import { readFileSync } from 'node:fs'; import { createElement } from 'react'; import { renderToStaticMarkup } from 'react-dom/server'; import { describe, expect, it } from 'vitest'; import { hasSelectedTimeslotScope } from '../../src/app/work-scope'; import { ResultsBrowser } from '../../src/features/results-browser/ResultsBrowser'; describe('Result DB timeslot scope', () => { it('forwards the active scan runs and applies them to facets and result rows', () => { const appSource = readFileSync('src/app/App.tsx', 'utf8'); const browserSource = readFileSync('src/features/results-browser/ResultsBrowser.tsx', 'utf8'); const domainSource = readFileSync('src/domain/unified-result.ts', 'utf8'); const serverSource = readFileSync('server/assessor-http-server.ts', 'utf8'); const postgresSource = readFileSync('server/postgres/postgres-assessor-repository.ts', 'utf8'); expect(appSource).toContain('scanRunIds={app.activeScanRunIds}'); expect(appSource).toContain('assessmentIds={app.activeAssessmentIds}'); expect(browserSource).toContain("backendStatus !== 'connected' || !projectId || !hasTimeslotScope"); expect(browserSource).toContain('

No timeslot selected

'); expect(browserSource).toContain('assessmentIds'); expect(browserSource).toContain('queryUnifiedResultFacets(scopedQuery)'); expect(browserSource).toContain('queryUnifiedResults({ ...scopedQuery, offset: 0, limit })'); expect(browserSource).toContain('DEFAULT_RESULT_DB_FILTERS: UnifiedResultQuery = { deviation: true }'); expect(browserSource).toContain('onReset={() => updateFilters({ ...DEFAULT_RESULT_DB_FILTERS })}'); expect(browserSource).toContain("'Export JSONL'"); expect(browserSource).toContain('queryAllUnifiedResults'); expect(browserSource).toContain('buildUnifiedResultJsonl(scopedQuery, results, generatedAt)'); expect(browserSource).toContain("item.sourceKind === 'environment-observation'"); expect(browserSource).toContain("item.sourceKind === 'policy-observation'"); expect(browserSource).toContain('item.policyValues'); expect(browserSource).toContain('item.environmentNormalizedValue'); expect(browserSource).not.toContain('item.environmentOriginalValue'); expect(browserSource).not.toContain('item.environmentSubjectIdentity'); expect(browserSource).toContain('item.supplementalDisclosurePolicyVersion'); expect(domainSource).toContain("query.scanRunIds.includes(item.scanRunId)"); expect(domainSource).toContain("sourceKind: 'environment-observation'"); expect(domainSource).toContain("sourceKind: 'policy-observation'"); expect(domainSource).toContain('environmentProperty: disclosure.property'); expect(domainSource).toContain('discloseSupplementalObservation(observation)'); expect(serverSource).toContain("scanRunIds: many('scanRunIds')"); expect(serverSource).toContain("assessmentIds: many('assessmentIds')"); expect(serverSource).toContain("environmentProperty: many('environmentProperty')"); expect(postgresSource).toContain("r.id = ANY(?::text[])"); expect(postgresSource).toContain('FROM assessor_environment_observations o'); expect(appSource).toContain("dataset && hasClientTimeslotScope && (graphVisited || activeArea === 'graph')"); expect(appSource).toContain('hasSelectedTimeslotScope(app.activeScanRunIds, app.activeAssessmentIds)'); expect(appSource).toContain(' { expect(hasSelectedTimeslotScope([], ['gpo-assessment'])).toBe(true); expect(hasSelectedTimeslotScope(['scanner-run'], [])).toBe(true); expect(hasSelectedTimeslotScope([], [])).toBe(false); expect(hasSelectedTimeslotScope()).toBe(false); const markup = renderToStaticMarkup(createElement(ResultsBrowser, { backendStatus: 'connected', projectId: 'gpo-client', scanRunIds: [], assessmentIds: ['gpo-assessment'] })); expect(markup).toContain('Loading results …'); expect(markup).not.toContain('No timeslot selected'); }); });