// @vitest-environment jsdom
import { act } from 'react';
import { createRoot } from 'react-dom/client';
import { afterEach, describe, expect, it, vi } from 'vitest';
import { AppProvider, useApp } from '../../src/app/AppProvider';
import { AssessorApiClient } from '../../src/api/assessor-api-client';
import type { UnifiedResultProjection } from '../../src/domain/unified-result';
import type { CanonicalAssessmentModel } from '../../src/domain/canonical-model';
import type { ImportedDataset } from '../../src/domain/dataset';
import { POLICY_EVALUATION_ENGINE, type PolicyEvaluationResult, type StoredPolicyEvaluation } from '../../src/domain/policy-evaluation';
import { appendPolicyObservationsToDataset } from '../../src/features/project-import/policy-observations-to-dataset';
import { loadCanonicalProjectWorkspace } from '../../src/features/project-import/load-canonical-project-workspace';
import { SearchFilterBar, SearchTextControl, SheetAndSearchControls } from '../../src/features/search-filter/SearchFilterBar';
import { useFilteredRecords } from '../../src/features/search-filter/use-filtered-records';
import { FindingReader } from '../../src/features/finding-reader/FindingReader';
import { inlineResultTableSheets } from '../../src/features/linked-results/inline-result-tables';
import { makeSheet } from '../../src/importers/sheet-factory';
vi.mock('../../src/features/project-import/load-canonical-project-workspace', () => ({ loadCanonicalProjectWorkspace: vi.fn() }));
afterEach(() => { vi.restoreAllMocks(); vi.unstubAllGlobals(); localStorage.clear(); });
const nativeId = (index: number) => `{00000000-0000-0000-0000-${String(index).padStart(12, '0')}}`;
function source(index: number, value: number | 'delete', setting = 'Alpha mode'): UnifiedResultProjection {
return {
sourceKind: 'policy-observation', sourceResultId: `observation-${index}`, projectId: 'synthetic', assessmentId: 'slot',
policyBackupInstanceId: `backup-${index}`, policyGpoId: nativeId(index), policyNativeBackupId: nativeId(index + 100),
policySourceSequence: index, title: setting, importedAt: '2026-09-17T00:00:00Z',
policyScope: 'computer', policyDeliveryMechanism: 'registry-policy', policyIdentityStatus: 'resolved',
policyIdentityKey: setting, policyState: value === 'delete' ? 'instruction' : 'configured',
sourceLocator: { objectPath: `C:/SyntheticPrivate/${nativeId(index + 100)}/DomainSysvol/GPO/Machine/registry.pol#records=${index}` },
policyValues: [{ kind: 'registry-policy', operation: value === 'delete' ? 'delete-value' : 'set-value',
key: 'Software\\Policies\\Synthetic', valueName: setting,
...(value === 'delete' ? {} : { typeCode: 4, data: { kind: 'uint32', value } }) }]
} as unknown as UnifiedResultProjection;
}
function fixture(mixed: boolean) {
const sources = [source(1, 1), source(2, 'delete'), source(3, 1), source(4, 1), source(5, 0, 'Beta switch')];
const comparison = (observations: UnifiedResultProjection[], conflicted: boolean): PolicyEvaluationResult => ({
id: `comparison-${observations[0].policyIdentityKey}`, observationIds: observations.map(item => item.sourceResultId),
backupInstanceIds: observations.map(item => item.policyBackupInstanceId), baselineId: 'baseline', baselineLabel: 'Synthetic baseline',
identity: { id: observations[0].policyIdentityKey, scope: 'computer', target: { kind: 'registry-value',
hive: 'HKEY_LOCAL_MACHINE', key: 'Software\\Policies\\Synthetic', valueName: observations[0].title } },
baselineState: 'explicit-recommendation', customerState: conflicted ? 'conflicted' : 'configured',
classification: 'confirmed_configured_deviation', diagnosticCodes: conflicted ? ['policy-evaluation-customer-conflict'] : [],
comparator: { version: 1, comparator: { kind: 'equality' }, relation: 'different', baseline: { kind: 'integer', value: '1' }, diagnosticCodes: [] },
baselineVariantAssessment: { version: 1, scope: 'backup-configuration', decision: 'all-fail',
actualValues: observations.flatMap(item => item.policyValues!), variants: [{
settingId: 'baseline-setting', baselineValues: [{ kind: 'registry-policy', operation: 'set-value',
key: 'Software\\Policies\\Synthetic', valueName: observations[0].title, typeCode: 4,
data: { kind: 'uint32', value: 1 } }],
comparator: { version: 1, comparator: { kind: 'equality' }, relation: 'different',
baseline: { kind: 'integer', value: '1' }, diagnosticCodes: [] }
}], diagnosticCodes: [] }
} as unknown as PolicyEvaluationResult);
const evaluation = { run: { id: 'evaluation', projectId: 'synthetic', aggregationRunId: 'aggregation',
completedAt: '2026-09-17T00:01:00Z', evaluator: POLICY_EVALUATION_ENGINE },
results: [comparison(sources.slice(0, 4), true), comparison(sources.slice(4), false)] } as StoredPolicyEvaluation;
const scanner = mixed ? { sheets: [makeSheet('All Records', [['Title', 'Status', 'Source: Scan'],
['Synthetic scanner', 'Fail', 'Maester']], '', 'Synthetic', { isProjectSheet: true })],
profileId: 'generic', scanTool: 'Multiple Tools' } as ImportedDataset : null;
return { dataset: appendPolicyObservationsToDataset(scanner, 'Synthetic', sources, [evaluation])!, sources, evaluation };
}
function Harness({ onResults }: { onResults(): void }) {
const app = useApp();
const records = useFilteredRecords();
const selected = records.find(record => record.id === app.selectedRecordId) ?? records[0];
const position = selected ? records.indexOf(selected) : 0;
return <>