Skip to content

Commit e485256

Browse files
B2JK-Industryclaude
andcommitted
fix(test): bump e2e birthYear 2012 → 2010 (skip parent-consent flow)
cbd74ea fixed the password-rule fixture, but the birthYear bump 2000 → 2012 introduced a new failure: 2012 is age 14, which triggers the GDPR-K parental-consent gate (requires `parentEmail`). Tests that don't pass `parentEmail` get 400 with `"Konta dla osób poniżej 16 lat wymagają zgody rodzica."`. 2010 is exactly age 16 (today minus 16 years). The server check is `< 16` (strict), so 16-year-olds bypass the parent-email requirement while still passing my G-01 server clamp `min(CURRENT_YEAR - 16) = 2010`. Bumped birthYear 2012 → 2010 in all 7 e2e specs + the two helper-fallback `?? 2012` defaults. Tests that explicitly want to verify the parent-email flow still pass `parentEmail` explicitly so they're unaffected. Verified locally: - POST /api/auth/register with birthYear 2010 returns `{"ok":true,"ageBucket":"16-plus","needsConsent":false}` Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent 99e956a commit e485256

7 files changed

Lines changed: 18 additions & 18 deletions

e2e/bot-protection.spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ test.describe("bot protection — /api/auth/register IP rate limit", () => {
4040
data: {
4141
username: `bot_${randomAlphaSuffix(10)}`,
4242
password: "correct horse battery 1",
43-
birthYear: 2012,
43+
birthYear: 2010,
4444
},
4545
headers: { "x-forwarded-for": ip },
4646
failOnStatusCode: false,

e2e/data-integrity.spec.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ async function freshUser(page: Page): Promise<{ username: string }> {
1515
// `/api/auth/register` is CSRF-exempt so page.request is enough.
1616
const username = `di_${randomAlphaSuffix(12)}`;
1717
const res = await page.request.post("/api/auth/register", {
18-
data: { username, password: "correct horse battery 1", birthYear: 2012 },
18+
data: { username, password: "correct horse battery 1", birthYear: 2010 },
1919
});
2020
expect(res.ok(), `register ${username}: ${res.status()}`).toBeTruthy();
2121
// Prime wc_csrf so subsequent mutating POSTs carry the header.
@@ -146,10 +146,10 @@ test.describe("data integrity — leaderboard ordering stable under concurrent w
146146
const u1 = `lb1_${randomAlphaSuffix(10)}`;
147147
const u2 = `lb2_${randomAlphaSuffix(10)}`;
148148
await p1.request.post("/api/auth/register", {
149-
data: { username: u1, password: "correct horse battery 1", birthYear: 2012 },
149+
data: { username: u1, password: "correct horse battery 1", birthYear: 2010 },
150150
});
151151
await p2.request.post("/api/auth/register", {
152-
data: { username: u2, password: "correct horse battery 1", birthYear: 2012 },
152+
data: { username: u2, password: "correct horse battery 1", birthYear: 2010 },
153153
});
154154

155155
await primeCsrf(p1);

e2e/golden-paths.spec.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ async function register(
2828
data: {
2929
username,
3030
password: "correct horse battery 1",
31-
birthYear: opts.birthYear ?? 2012,
31+
birthYear: opts.birthYear ?? 2010,
3232
},
3333
});
3434
expect(r.ok(), `register ${username}: ${r.status()} ${await r.text()}`).toBeTruthy();
@@ -178,10 +178,10 @@ test.describe("golden paths", () => {
178178
const kidUser = `k_${randomAlphaSuffix(10)}`;
179179
const parentUser = `p_${randomAlphaSuffix(10)}`;
180180
await kid.request.post("/api/auth/register", {
181-
data: { username: kidUser, password: "correct horse battery 1", birthYear: 2012 },
181+
data: { username: kidUser, password: "correct horse battery 1", birthYear: 2010 },
182182
});
183183
await parent.request.post("/api/auth/register", {
184-
data: { username: parentUser, password: "correct horse battery 1", birthYear: 2012 },
184+
data: { username: parentUser, password: "correct horse battery 1", birthYear: 2010 },
185185
});
186186
await primeCsrf(kid);
187187
await primeCsrf(parent);
@@ -243,7 +243,7 @@ test.describe("golden paths", () => {
243243
expect(code, `class create body: ${JSON.stringify(createClass.body)}`).toBeTruthy();
244244

245245
await s.request.post("/api/auth/register", {
246-
data: { username: studentUser, password: "correct horse battery 1", birthYear: 2012, parentEmail: "p@example.com" },
246+
data: { username: studentUser, password: "correct horse battery 1", birthYear: 2010, parentEmail: "p@example.com" },
247247
});
248248
await primeCsrf(s);
249249
const join = await postJson(s, "/api/klasa/join", { code });

e2e/production-ready.spec.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ async function registerFresh(
3535
data: {
3636
username,
3737
password: "correct horse battery 1",
38-
birthYear: opts.birthYear ?? 2012,
38+
birthYear: opts.birthYear ?? 2010,
3939
...(opts.parentEmail ? { parentEmail: opts.parentEmail } : {}),
4040
},
4141
});
@@ -249,7 +249,7 @@ test.describe("db persistence — writes survive a fresh browser context", () =>
249249
const username = `db_${randomAlphaSuffix(10)}`;
250250
const password = "correct horse battery 1";
251251
await pageA.request.post("/api/auth/register", {
252-
data: { username, password, birthYear: 2012 },
252+
data: { username, password, birthYear: 2010 },
253253
});
254254
await primeCsrf(pageA);
255255
// xp=250 is capped by finance-quiz's xpCap=100; what matters for
@@ -289,10 +289,10 @@ test.describe("db persistence — writes survive a fresh browser context", () =>
289289
const kidName = `k_${randomAlphaSuffix(10)}`;
290290
const parentName = `p_${randomAlphaSuffix(10)}`;
291291
await kid.request.post("/api/auth/register", {
292-
data: { username: kidName, password: "correct horse battery 1", birthYear: 2012 },
292+
data: { username: kidName, password: "correct horse battery 1", birthYear: 2010 },
293293
});
294294
await parent.request.post("/api/auth/register", {
295-
data: { username: parentName, password: "correct horse battery 1", birthYear: 2012 },
295+
data: { username: parentName, password: "correct horse battery 1", birthYear: 2010 },
296296
});
297297
await primeCsrf(kid);
298298
await primeCsrf(parent);

e2e/rate-limits.spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ const isProd = (process.env.PLAYWRIGHT_BASE_URL ?? "").includes(PROD_HOST);
2424
async function register(page: Page): Promise<void> {
2525
const username = `rl_${randomAlphaSuffix(12)}`;
2626
const r = await page.request.post("/api/auth/register", {
27-
data: { username, password: "correct horse battery 1", birthYear: 2012 },
27+
data: { username, password: "correct horse battery 1", birthYear: 2010 },
2828
});
2929
expect(r.ok(), `register ${username}: ${r.status()}`).toBeTruthy();
3030
await primeCsrf(page);

e2e/security.spec.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ async function freshUser(page: Page): Promise<{ username: string }> {
2222
data: {
2323
username,
2424
password: "correct horse battery 1",
25-
birthYear: 2012,
25+
birthYear: 2010,
2626
},
2727
});
2828
expect(res.ok(), `register ${username}: ${res.status()}`).toBeTruthy();
@@ -111,10 +111,10 @@ test.describe("security — IDOR: one user can't read another's private data", (
111111
const userB = `b_${randomAlphaSuffix(10)}`;
112112

113113
await pageA.request.post("/api/auth/register", {
114-
data: { username: userA, password: "correct horse battery 1", birthYear: 2012 },
114+
data: { username: userA, password: "correct horse battery 1", birthYear: 2010 },
115115
});
116116
await pageB.request.post("/api/auth/register", {
117-
data: { username: userB, password: "correct horse battery 1", birthYear: 2012 },
117+
data: { username: userB, password: "correct horse battery 1", birthYear: 2010 },
118118
});
119119

120120
// A tries to read B's child data. Parent dashboard reads require
@@ -198,7 +198,7 @@ test.describe("security — PII validator edge cases", () => {
198198
test(`register "${c.name}" → ${c.expect}`, async ({ page }) => {
199199
const u = c.username();
200200
const r = await page.request.post("/api/auth/register", {
201-
data: { username: u, password: "correct horse battery 1", birthYear: 2012 },
201+
data: { username: u, password: "correct horse battery 1", birthYear: 2010 },
202202
failOnStatusCode: false,
203203
});
204204
if (c.expect === "reject") {

e2e/smoke.spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ test.describe("smoke — landing + auth + city", () => {
6060
data: {
6161
username: u,
6262
password: "correct horse battery 1",
63-
birthYear: 2012,
63+
birthYear: 2010,
6464
},
6565
});
6666
expect(res.ok()).toBeTruthy();

0 commit comments

Comments
 (0)