forked from BasedHardware/omi
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdesktop-ratings.test.ts
More file actions
66 lines (60 loc) · 2.29 KB
/
Copy pathdesktop-ratings.test.ts
File metadata and controls
66 lines (60 loc) · 2.29 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
import { afterEach, describe, expect, it, vi } from "vitest";
const posthogResults = vi.fn();
vi.mock("@/lib/posthog", () => ({ posthogResults }));
const ENV_KEYS = [
"POSTHOG_PERSONAL_API_KEY",
"POSTHOG_PROJECT_ID",
"POSTHOG_HOST",
] as const;
const originalEnv = Object.fromEntries(
ENV_KEYS.map((key) => [key, process.env[key]]),
);
afterEach(() => {
vi.resetModules();
posthogResults.mockReset();
for (const key of ENV_KEYS) {
if (originalEnv[key] == null) delete process.env[key];
else process.env[key] = originalEnv[key];
}
});
describe("computeDesktopRatings", () => {
it("buckets by NYC day and reports a count-weighted average", async () => {
process.env.POSTHOG_PERSONAL_API_KEY = "phx_test";
process.env.POSTHOG_PROJECT_ID = "1";
posthogResults.mockResolvedValue([
["2026-08-24", 5, 1],
["2026-08-25", 3, 3],
]);
const { computeDesktopRatings } = await import(
"@/app/api/omi/stats/desktop-ratings/route"
);
const payload = await computeDesktopRatings(60);
expect(posthogResults.mock.calls[0][3]).toContain(
"toTimeZone(timestamp, 'America/New_York')",
);
expect(posthogResults.mock.calls[0][3]).toContain("Desktop Rating Submitted");
// HogQL rejects ClickHouse's toFloat64OrZero with a validation_error
// ("Unsupported function call ... Perhaps you meant 'toFloatOrZero'") —
// observed live on prod PostHog 2026-08-25.
expect(posthogResults.mock.calls[0][3]).toContain("toFloatOrZero(");
expect(posthogResults.mock.calls[0][3]).not.toContain("toFloat64OrZero");
expect(payload.daily).toEqual([
{ date: "2026-08-24", avgRating: 5, count: 1 },
{ date: "2026-08-25", avgRating: 3, count: 3 },
]);
// (5*1 + 3*3) / 4 = 3.5 — weighted by ratings, not by days.
expect(payload.summary).toEqual({ avgRating: 3.5, count: 4 });
});
it("degrades to unavailable without PostHog credentials", async () => {
delete process.env.POSTHOG_PERSONAL_API_KEY;
delete process.env.POSTHOG_PROJECT_ID;
const { computeDesktopRatings } = await import(
"@/app/api/omi/stats/desktop-ratings/route"
);
await expect(computeDesktopRatings(60)).resolves.toMatchObject({
available: false,
daily: [],
});
expect(posthogResults).not.toHaveBeenCalled();
});
});