Skip to content

Commit 2d5aaa4

Browse files
veksenclaude
andcommitted
test: add tests for countUploadableQueries
Extract UPLOADABLE_STATES and countUploadableQueries as exported functions so they can be tested. Tests verify: - Only improvements_available, no_improvement_found, error are counted - not_supported, timeout, waiting, optimizing are excluded - countUploadableQueries agrees with buildQueries for every state Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent 3a662ec commit 2d5aaa4

File tree

2 files changed

+71
-2
lines changed

2 files changed

+71
-2
lines changed

src/runner.test.ts

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
import { test, expect, describe } from "vitest";
2+
import { countUploadableQueries, UPLOADABLE_STATES } from "./runner.ts";
3+
import { buildQueries } from "./reporters/site-api.ts";
4+
import type { OptimizedQuery } from "./sql/recent-query.ts";
5+
6+
function fakeQuery(state: string): OptimizedQuery {
7+
return {
8+
optimization: { state },
9+
} as OptimizedQuery;
10+
}
11+
12+
describe("countUploadableQueries", () => {
13+
test("counts improvements_available, no_improvement_found, and error", () => {
14+
const results = [
15+
fakeQuery("improvements_available"),
16+
fakeQuery("no_improvement_found"),
17+
fakeQuery("error"),
18+
];
19+
expect(countUploadableQueries(results)).toBe(3);
20+
});
21+
22+
test("excludes not_supported, timeout, waiting, optimizing", () => {
23+
const results = [
24+
fakeQuery("not_supported"),
25+
fakeQuery("timeout"),
26+
fakeQuery("waiting"),
27+
fakeQuery("optimizing"),
28+
];
29+
expect(countUploadableQueries(results)).toBe(0);
30+
});
31+
32+
test("counts only uploadable in a mixed set", () => {
33+
const results = [
34+
fakeQuery("improvements_available"),
35+
fakeQuery("not_supported"),
36+
fakeQuery("no_improvement_found"),
37+
fakeQuery("timeout"),
38+
fakeQuery("error"),
39+
fakeQuery("waiting"),
40+
];
41+
expect(countUploadableQueries(results)).toBe(3);
42+
});
43+
});
44+
45+
describe("UPLOADABLE_STATES matches buildQueries filter", () => {
46+
test("buildQueries keeps exactly the same states as UPLOADABLE_STATES", () => {
47+
const allStates = [
48+
"improvements_available",
49+
"no_improvement_found",
50+
"error",
51+
"not_supported",
52+
"timeout",
53+
"waiting",
54+
"optimizing",
55+
];
56+
57+
for (const state of allStates) {
58+
const results = [fakeQuery(state)];
59+
const uploaded = buildQueries(results).length;
60+
const counted = countUploadableQueries(results);
61+
expect(counted, `state "${state}"`).toBe(uploaded);
62+
}
63+
});
64+
});

src/runner.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -217,8 +217,7 @@ export class Runner {
217217
}
218218
}
219219

220-
const uploadableStates = new Set(["improvements_available", "no_improvement_found", "error"]);
221-
const total = allResults.filter((q) => uploadableStates.has(q.optimization.state)).length;
220+
const total = countUploadableQueries(allResults);
222221

223222
const statistics = deriveIndexStatistics(filteredRecommendations);
224223
const timeElapsed = Date.now() - startDate.getTime();
@@ -247,4 +246,10 @@ export class Runner {
247246
}
248247
}
249248

249+
export const UPLOADABLE_STATES = new Set(["improvements_available", "no_improvement_found", "error"]);
250+
251+
export function countUploadableQueries(results: OptimizedQuery[]): number {
252+
return results.filter((q) => UPLOADABLE_STATES.has(q.optimization.state)).length;
253+
}
254+
250255
export type QueryProcessResult = OptimizedQuery;

0 commit comments

Comments
 (0)