Files
gupi-osint-board/server/narrativeRepository.test.ts
T

44 lines
2.7 KiB
TypeScript

import { describe, expect, it } from 'vitest'
import { buildAdjudicationPresentation, resolvePoseAssetId } from './narrativeRepository.js'
describe('resolvePoseAssetId', () => {
const poses = { neutral: 'asset-neutral', concerned: 'asset-concerned', missing: null }
it('returns the requested pose asset when present', () => {
expect(resolvePoseAssetId(poses, 'concerned', 'neutral')).toBe('asset-concerned')
})
it('falls back to the NPC default pose when the requested pose is absent', () => {
expect(resolvePoseAssetId(poses, 'pointing', 'neutral')).toBe('asset-neutral')
})
it('falls back to the default when the requested pose exists but has no artwork', () => {
expect(resolvePoseAssetId(poses, 'missing', 'neutral')).toBe('asset-neutral')
})
it('returns null (no artwork) when neither requested nor default resolves', () => {
expect(resolvePoseAssetId(poses, 'pointing', 'also-missing')).toBeNull()
expect(resolvePoseAssetId(poses, null, null)).toBeNull()
expect(resolvePoseAssetId({}, 'neutral', 'neutral')).toBeNull()
})
})
describe('buildAdjudicationPresentation', () => {
it('presents only evidence accepted by the submitted report', () => {
const presentation = buildAdjudicationPresentation({
title: 'Barricelli Inventor Finding', investigatorName: 'Mutable byline', requiredForCompletion: true,
status: 'accepted', issues: [], claims: [{ claimExhibitId: 'claim-1', statement: 'Nils Aall Barricelli was an inventor.', evidence: [
{ connectionId: 'connection-1', documentExhibitId: 'document-1', displayNumber: 1, documentTitle: 'Patent record', fileType: 'image',
relationText: 'Proves that Barricelli filed a patent.', publishedAt: '1953-08-19T00:00:00.000Z', sourceCitation: 'Google Patents', sourceUri: 'https://patents.example/1',
evidenceAccepted: true, verification: { status: 'accepted', detail: 'Matched.' } },
{ connectionId: 'connection-2', documentExhibitId: 'document-2', displayNumber: 2, documentTitle: 'Unverified image', fileType: 'image',
relationText: 'Maybe related.', evidenceAccepted: false, verification: { status: 'not_evaluated', detail: 'Not checked.' } },
] }],
}, { investigatorName: 'Ada Investigator', submittedAt: new Date('2026-08-23T12:00:00.000Z') })
expect(presentation).toMatchObject({
kind: 'case-adjudication', investigatorName: 'Ada 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: 'Patent record' }] }],
})
expect(presentation.claims[0].evidence).toHaveLength(1)
})
})