Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 15 additions & 2 deletions cli/src/services/sync/progress.rs
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ impl<E> ProgressReporter<E> for NoopProgressReporter {
fn report(&mut self, _event: E) {}
}

const STREAM_LABELS: [&str; 4] = ["messages", "parts", "diff_traces", "agent_traces"];
const STREAM_LABELS: [&str; 3] = ["messages", "parts", "agent_traces"];
const STREAM_LABEL_WIDTH: usize = 15;
const STEADY_TICK_INTERVAL: Duration = Duration::from_millis(100);

Expand Down Expand Up @@ -270,8 +270,21 @@ mod tests {
let output = String::from_utf8(output).expect("progress output should be UTF-8");
assert!(output.contains("messages "));
assert!(output.contains("parts "));
assert!(output.contains("diff_traces "));
assert!(output.contains("agent_traces "));
assert!(!output.contains("diff_traces"));
let first_render = output
.lines()
.take(STREAM_LABELS.len() + 1)
.map(|line| {
line.split_whitespace()
.nth(1)
.expect("progress row has a stream label")
})
.collect::<Vec<_>>();
assert_eq!(
first_render,
vec!["messages", "parts", "agent_traces", "messages"]
);
assert!(output.contains("messages 500 rows uploaded"));
assert!(output.contains("parts 0 rows uploaded"));
assert!(output.contains("✓ parts 0 rows uploaded"));
Expand Down
38 changes: 37 additions & 1 deletion cli/src/services/sync/render_sync.rs
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@ fn render_text(report: &AgentTraceSyncReport) -> String {
let uploaded = [
report.streams.messages.uploaded,
report.streams.parts.uploaded,
report.streams.diff_traces.uploaded,
report.streams.agent_traces.uploaded,
];
let heading = if uploaded.iter().all(|count| *count == 0) {
Expand Down Expand Up @@ -126,4 +125,41 @@ mod tests {
assert!(value.get("diff_traces").is_none());
assert!(value.get("agent_traces").is_none());
}

fn report_with_uploads(
messages: usize,
parts: usize,
diff_traces: usize,
agent_traces: usize,
) -> AgentTraceSyncReport {
let mut report = sample_report();
report.streams.messages.uploaded = messages;
report.streams.parts.uploaded = parts;
report.streams.diff_traces.uploaded = diff_traces;
report.streams.agent_traces.uploaded = agent_traces;
report
}

#[test]
fn text_heading_is_already_synced_when_three_active_streams_uploaded_nothing() {
assert_eq!(
render_text(&report_with_uploads(0, 0, 0, 0)),
style::heading(ALREADY_SYNCED_HEADING)
);
assert_eq!(
render_text(&report_with_uploads(0, 0, 1, 0)),
style::heading(ALREADY_SYNCED_HEADING)
);
}

#[test]
fn text_heading_is_complete_when_any_active_stream_uploaded_rows() {
for report in [
report_with_uploads(1, 0, 0, 0),
report_with_uploads(0, 1, 0, 0),
report_with_uploads(0, 0, 0, 1),
] {
assert_eq!(render_text(&report), style::heading(COMPLETE_HEADING));
}
}
}
Loading
Loading