Files
gupi-osint-board/e2e/adjudication.spec.ts
T

38 lines
2.5 KiB
TypeScript
Raw Normal View History

2026-08-23 23:20:40 +02:00
import { expect, test } from '@playwright/test'
test('accepted report is adjudicated before the merit node', async ({ page }) => {
const cutsceneState = {
playthrough: { id: 'adjudication-playthrough', mysterySlug: 'barricelli-files', levelSlug: 'completed-level', status: 'active' },
node: {
id: 'adjudication-node', kind: 'cutscene', label: 'Scene 8 · Case adjudication', componentKey: 'case-adjudication',
presentation: {
kind: 'case-adjudication', reportTitle: 'Barricelli Inventor Finding', investigatorName: 'Test Investigator',
submittedAt: '2026-08-23T12:00:00.000Z', finding: 'SUPPORTED BY THE SUBMITTED EVIDENCE', stampText: 'CASE VERIFIED',
claims: [{ statement: 'Nils Aall Barricelli was an inventor.', evidence: [{
displayNumber: 1, title: 'GB695913A Improved chest of drawers', fileType: 'image',
relationText: 'Proves that Barricelli filed a patent.', publishedAt: '1953-08-19T00:00:00.000Z',
sourceCitation: 'Google Patents', sourceUri: 'https://patents.google.com/patent/GB695913A/en',
}] }],
},
},
}
await page.route('**/api/playthroughs/current', route => route.fulfill({ status: 200, contentType: 'application/json', body: JSON.stringify(cutsceneState) }))
await page.route('**/api/playthroughs/adjudication-playthrough/advance', route => route.fulfill({ status: 200, contentType: 'application/json', body: JSON.stringify({
playthrough: cutsceneState.playthrough,
node: { id: 'merit-node', kind: 'merit', label: 'The Barricelli Luggage', awardsFlag: 'barricelli_luggage' },
}) }))
await page.goto('/?resume=1')
const adjudication = page.getByRole('dialog', { name: 'Case adjudication' })
await expect(adjudication).toContainText('Nils Aall Barricelli was an inventor.')
await expect(adjudication).toContainText('EXHIBIT 1 — ACCEPTED')
await expect(adjudication).toContainText('Google Patents')
await expect(adjudication).toContainText('SUPPORTED BY THE SUBMITTED EVIDENCE', { timeout: 5_000 })
await expect(adjudication).toHaveClass(/phase-stamped/, { timeout: 5_000 })
expect(await adjudication.locator('.adjudication-stamp').evaluate(element => Number.parseFloat(getComputedStyle(element).opacity))).toBeGreaterThan(0)
await page.getByRole('button', { name: 'RECEIVE MERIT' }).click()
await expect(page.getByText('MERIT AWARDED', { exact: false })).toBeVisible()
await expect(page.getByRole('heading', { name: 'The Barricelli Luggage' })).toBeVisible()
})