Skip to content

Commit da727ad

Browse files
authored
Merge pull request #871 from microsasa/fix/869-test-absent-duration-key-18e059a630d638db
test: exercise `duration_by_model` absent-key fallback (#869)
2 parents b4c502e + 19dbe6d commit da727ad

1 file changed

Lines changed: 41 additions & 1 deletion

File tree

tests/copilot_usage/test_vscode_report.py

Lines changed: 41 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,11 +166,15 @@ def test_avg_ms_division_by_zero_guard(self) -> None:
166166
"""A model with count=0 in duration_by_model produces avg_ms=0."""
167167
summary = _make_summary(
168168
total_requests=0,
169+
total_duration_ms=1_000,
169170
requests_by_model={"some-model": 0},
170171
duration_by_model={"some-model": 100},
171172
)
172173
output = _capture(summary)
173-
assert "0ms" in output
174+
model_line = _strip_ansi(
175+
next(line for line in output.splitlines() if "some-model" in line)
176+
)
177+
assert re.search(r"(?<!\d)0ms(?!\d)", model_line)
174178

175179
def test_total_duration_formatted(self) -> None:
176180
summary = _make_summary(
@@ -182,6 +186,42 @@ def test_total_duration_formatted(self) -> None:
182186
# format_duration(389_114) -> "6m 29s"
183187
assert "6m 29s" in output
184188

189+
def test_per_model_table_absent_duration_defaults_to_zero_avg(self) -> None:
190+
"""Model in requests_by_model but absent from duration_by_model → 0ms avg."""
191+
summary = _make_summary(
192+
total_requests=3,
193+
total_duration_ms=1_000,
194+
requests_by_model={"claude-opus-4.6": 3},
195+
duration_by_model={},
196+
)
197+
output = _capture(summary)
198+
model_line = _strip_ansi(
199+
next(line for line in output.splitlines() if "claude-opus-4.6" in line)
200+
)
201+
assert "claude-opus-4.6" in model_line
202+
assert model_line.count("0ms") == 2
203+
204+
def test_per_model_table_partial_duration_dict(self) -> None:
205+
"""Only one of two models has a duration entry; the other defaults to 0ms."""
206+
summary = _make_summary(
207+
total_requests=5,
208+
total_duration_ms=1_500,
209+
requests_by_model={"gpt-4o-mini": 3, "claude-opus-4.6": 2},
210+
duration_by_model={"gpt-4o-mini": 1500},
211+
)
212+
output = _capture(summary)
213+
gpt_line = _strip_ansi(
214+
next(line for line in output.splitlines() if "gpt-4o-mini" in line)
215+
)
216+
opus_line = _strip_ansi(
217+
next(line for line in output.splitlines() if "claude-opus-4.6" in line)
218+
)
219+
# gpt-4o-mini avg = 1500 // 3 = 500ms; total = "1s 500ms"
220+
# "500ms" appears once for avg and once inside the total format.
221+
assert gpt_line.count("500ms") == 2
222+
# claude-opus-4.6 has no duration entry → 0ms avg and 0ms total
223+
assert opus_line.count("0ms") == 2
224+
185225
def test_empty_requests_by_model_table_absent(self) -> None:
186226
summary = _make_summary(total_requests=5, requests_by_model={})
187227
output = _capture(summary)

0 commit comments

Comments
 (0)