forked from BasedHardware/omi
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathgrowth-metrics.test.ts
More file actions
162 lines (141 loc) · 4.82 KB
/
Copy pathgrowth-metrics.test.ts
File metadata and controls
162 lines (141 loc) · 4.82 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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
import { describe, expect, it } from "vitest";
import {
completedWeeklyNewUsers,
maturedWeeklyActivation,
rollUpActivationCohort,
summarizeActivation,
} from "@/lib/growth-metrics";
describe("growth metrics", () => {
it("aggregates completed signup weeks and excludes the partial current week", () => {
const result = completedWeeklyNewUsers(
[
{ date: "2026-07-27", users: 10 },
{ date: "2026-08-02", users: 5 },
{ date: "2026-08-03", users: 40 },
{ date: "2026-08-08", users: 20 },
],
new Date("2026-08-08T12:00:00Z"),
);
expect(result).toEqual([{ week: "2026-07-27", users: 15 }]);
});
it("waits for every signup in a week to finish its activation window", () => {
const result = maturedWeeklyActivation(
[
{ date: "2026-07-20", signups: 20, activated: 8 },
{ date: "2026-07-26", signups: 10, activated: 4 },
{ date: "2026-07-27", signups: 50, activated: 15 },
],
new Date("2026-08-08T12:00:00Z"),
);
expect(result).toEqual([
{
week: "2026-07-20",
signups: 30,
activated: 12,
rate: 40,
capableRate: 40,
telemetryCoverage: 100,
},
]);
});
it("reports a week nobody could report as unmeasurable, not as zero", () => {
const result = maturedWeeklyActivation(
[
{
date: "2026-07-20",
signups: 30,
activated: 0,
capableSignups: 0,
capableActivated: 0,
},
],
new Date("2026-08-08T12:00:00Z"),
);
expect(result[0].rate).toBe(0);
expect(result[0].capableRate).toBeNull();
expect(result[0].telemetryCoverage).toBe(0);
});
});
describe("summarizeActivation", () => {
it("excludes signups whose 7-day activation window has not elapsed", () => {
// The Aug 5 cohort cannot have activated yet on Aug 8. Pooling it would
// report 10/60 = 16.7% instead of the real, measurable 10/20 = 50%.
const result = summarizeActivation(
[
{ date: "2026-08-01", signups: 20, activated: 10 },
{ date: "2026-08-05", signups: 40, activated: 0 },
],
new Date("2026-08-08T12:00:00Z"),
);
expect(result.signups).toBe(20);
expect(result.activated).toBe(10);
expect(result.rate).toBe(50);
});
it("counts a signup day the moment its window closes, not a day later", () => {
const result = summarizeActivation(
[{ date: "2026-08-01", signups: 20, activated: 10 }],
new Date("2026-08-08T00:00:00Z"),
);
expect(result.signups).toBe(20);
expect(result.rate).toBe(50);
});
it("separates users who cannot report activation from users who did not activate", () => {
// 100 matured signups, but only 20 run a build that can emit the event.
// The honest read is 50% of reporting users, at 20% telemetry coverage --
// not the 10% the pooled number would imply.
const result = summarizeActivation(
[
{
date: "2026-08-01",
signups: 100,
activated: 10,
capableSignups: 20,
capableActivated: 10,
},
],
new Date("2026-08-10T12:00:00Z"),
);
expect(result.rate).toBe(10);
expect(result.capableRate).toBe(50);
expect(result.telemetryCoverage).toBe(20);
});
it("treats a series without capability counts as fully covered", () => {
const result = summarizeActivation(
[{ date: "2026-08-01", signups: 50, activated: 20 }],
new Date("2026-08-10T12:00:00Z"),
);
expect(result.capableRate).toBe(40);
expect(result.telemetryCoverage).toBe(100);
});
it("returns null rates rather than zero when nothing has matured", () => {
const result = summarizeActivation(
[{ date: "2026-08-09", signups: 30, activated: 0 }],
new Date("2026-08-10T12:00:00Z"),
);
expect(result.signups).toBe(0);
expect(result.rate).toBeNull();
expect(result.telemetryCoverage).toBeNull();
});
});
describe("rollUpActivationCohort", () => {
it("buckets members by the Monday of their signup and pools the rate", () => {
const result = rollUpActivationCohort([
{ signupAt: "2026-08-03T09:00:00Z", activated: true },
{ signupAt: "2026-08-05T23:59:00Z", activated: false },
{ signupAt: "2026-08-09T12:00:00Z", activated: true },
{ signupAt: "2026-08-10T00:00:00Z", activated: false },
]);
expect(result.weeks).toEqual([
{ week: "2026-08-03", signups: 3, activated: 2, rate: 66.7 },
{ week: "2026-08-10", signups: 1, activated: 0, rate: 0 },
]);
expect(result.signups).toBe(4);
expect(result.activated).toBe(2);
expect(result.rate).toBe(50);
});
it("returns a null rate for an empty cohort rather than zero", () => {
const result = rollUpActivationCohort([]);
expect(result.weeks).toEqual([]);
expect(result.rate).toBeNull();
});
});