test: qualify immutable models and Phase 9 regression
MariaDB persistence qualification / mariadb (push) Has been cancelled

This commit is contained in:
cesnimda
2026-10-25 13:43:50 +01:00
parent 30e251a593
commit b48f25c4ff
33 changed files with 67462 additions and 6 deletions
@@ -80,7 +80,7 @@ test('[P7-09 OAuth sender] Timeline ignores forged senders and stale-job callbac
await enter(page, `/jobs/${first.id}?section=timeline&sub=correspondence`); const dialog = await importDialog(page); const before = count(session, '/gmail/status').length;
await page.evaluate(() => window.postMessage({ source: 'jobtracker-gmail-oauth', status: 'connected', message: 'CLIENT-GUARD timeline unsolicited-self' }, location.origin)); await received(page, 'CLIENT-GUARD timeline unsolicited-self'); expect(candidateQueries).toEqual([]); expect(count(session, '/gmail/status')).toHaveLength(before);
const child = await openChild(page, dialog.getByRole('button', { name: copy('correspondenceConnectGmail'), exact: true })); await finish(child, childUrl('gmail', 'valid', 'CLIENT-GUARD timeline valid-terminal')); await received(page, 'CLIENT-GUARD timeline valid-terminal'); await expect.poll(() => candidateQueries.length).toBe(1); await expect.poll(() => count(session, '/gmail/status').length).toBe(before + 1); const matched = (await proof(page)).messages.filter(message => message.message === 'CLIENT-GUARD timeline valid-terminal'); expect(matched).toHaveLength(2); for (const message of matched) expect(message).toMatchObject({ origin: uiOrigin, sourceOpenName: 'jobtracker-gmail-connect', sourceClosed: true }); await disconnected(page.request);
const stale = await openChild(page, dialog.getByRole('button', { name: copy('correspondenceConnectGmail'), exact: true })); await page.keyboard.press('Escape'); await expect(dialog).toHaveCount(0); await page.keyboard.press('Control+k'); const palette = page.getByRole('dialog', { name: copy('quickSearch'), exact: true }); await palette.getByRole('textbox', { name: copy('quickSearch'), exact: true }).fill(second.jobTitle); await keyboard(page, palette.getByRole('button').filter({ hasText: second.jobTitle }).first()); await expect.poll(() => new URL(page.url()).pathname).toBe(`/jobs/${second.id}`); const afterNavigation = count(session, '/gmail/status').length;
const stale = await openChild(page, dialog.getByRole('button', { name: copy('correspondenceConnectGmail'), exact: true })); await page.keyboard.press('Escape'); await expect(dialog).toHaveCount(0); await page.keyboard.press('Control+k'); const palette = page.getByRole('dialog', { name: copy('quickSearch'), exact: true }); await palette.getByRole('textbox', { name: copy('quickSearch'), exact: true }).fill(second.jobTitle); await keyboard(page, palette.getByRole('button').filter({ hasText: second.jobTitle }).first()); await expect.poll(() => new URL(page.url()).pathname).toBe(`/jobs/${second.id}`); await expect(page.getByRole('heading', { name: second.jobTitle, exact: true })).toBeVisible(); await expect(page.getByRole('button', { name: copy('correspondenceImportEmail'), exact: true })).toHaveCount(0); const afterNavigation = count(session, '/gmail/status').length;
await finish(stale, childUrl('gmail', 'valid', 'CLIENT-GUARD stale first-job terminal')); await received(page, 'CLIENT-GUARD stale first-job terminal'); expect(candidateQueries).toHaveLength(1); expect(count(session, '/gmail/status')).toHaveLength(afterNavigation); await disconnected(page.request); expect(session.requests.filter(request => request.method !== 'GET')).toEqual([]);
await info.attach('timeline-client-guard-popup-proof', { body: JSON.stringify({ boundary, firstJobId: first.id, secondJobId: second.id, candidateQueries, actualWindowMessages: await proof(page), qualification: 'Candidate GET is an explicit empty CLIENT-GUARD projection after actual owner authorization; server Gmail remains disconnected and no provider search occurs. Stale callback follows actual command-palette navigation/unmount.' }), contentType: 'application/json' });
});