From fbd73819dd8ba67d6712538fdc40b0073ed86e01 Mon Sep 17 00:00:00 2001 From: Binh Date: Mon, 12 Oct 2026 11:57:01 +0200 Subject: [PATCH] test: align three tests with Michael's cluster order, optional app read and Data Hub donut props --- tests/features/context-cluster-facet.test.tsx | 5 +++-- tests/features/datahub-centered-layout.test.ts | 2 +- tests/features/pathfinder-text-interaction.test.tsx | 6 +++++- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/tests/features/context-cluster-facet.test.tsx b/tests/features/context-cluster-facet.test.tsx index d7c94d0..efaef38 100644 --- a/tests/features/context-cluster-facet.test.tsx +++ b/tests/features/context-cluster-facet.test.tsx @@ -91,7 +91,8 @@ describe('Work facet Context Cluster', () => { const index = contextClusterIndex(syntheticContext()); const facet = selectWorkFacets(sheet, { ...options, contextClusters: index }).find(item => item.id === CONTEXT_CLUSTER_FACET_ID)!; expect(facet.label).toBe('Context Cluster'); - expect(facet.values.map(value => value.value)).toEqual(['credential-relay-exposure', 'kerberos-delegation-abuse']); + // Published heatmap positions govern the order (Michael, 2026-10-11). + expect(facet.values.map(value => value.value)).toEqual(['kerberos-delegation-abuse', 'credential-relay-exposure']); const count = (id: string) => facet.values.find(value => value.value === id)!.count; expect(count('credential-relay-exposure')).toBe(2); expect(count('kerberos-delegation-abuse')).toBe(1); @@ -224,7 +225,7 @@ describe('Work facet Context Cluster in the filter bar', () => { mockApp({}); await act(async () => { root.render(); await new Promise(resolve => setTimeout(resolve, 0)); }); const select = () => host.querySelector('select[aria-label="Context Cluster"]')!; - expect([...select().options].map(option => option.value)).toEqual(['', 'credential-relay-exposure', 'kerberos-delegation-abuse']); + expect([...select().options].map(option => option.value)).toEqual(['', 'kerberos-delegation-abuse', 'credential-relay-exposure']); await act(async () => { select().value = 'credential-relay-exposure'; select().dispatchEvent(new Event('change', { bubbles: true })); }); expect(setFacetFilter).toHaveBeenLastCalledWith(CONTEXT_CLUSTER_FACET_ID, { values: ['credential-relay-exposure'] }); mockApp({ [CONTEXT_CLUSTER_FACET_ID]: { values: ['credential-relay-exposure'] } }); diff --git a/tests/features/datahub-centered-layout.test.ts b/tests/features/datahub-centered-layout.test.ts index d42063f..49d1f26 100644 --- a/tests/features/datahub-centered-layout.test.ts +++ b/tests/features/datahub-centered-layout.test.ts @@ -86,7 +86,7 @@ describe('Datahub centered reference rack layout', () => { expect(componentStyles).not.toContain('@keyframes donut-accent-build'); expect(overview).toContain('datahub-reference-controls donut-metric-rack'); - expect(overview).toContain('DonutMetricCard className="datahub-reference-knob" label="Results All" value={resultMetrics.all} percentage={resultMetrics.all !== null ? 100 : 0} tone="all"'); + expect(overview).toContain('DonutMetricCard className="datahub-reference-knob" label="Results All" value={resultMetrics.all} percentage={resultMetrics.all !== null ? 100 : 0} percentageBasisLabel="Of all records" tone="all"'); expect(overview).toContain('DonutMetricCard className="datahub-reference-knob" label="Deviation"'); expect(overview).toContain('DonutMetricCard className="datahub-reference-knob" label="Passed"'); expect(overview).toContain('DonutMetricCard className="datahub-reference-knob" label="Not Applicable"'); diff --git a/tests/features/pathfinder-text-interaction.test.tsx b/tests/features/pathfinder-text-interaction.test.tsx index 7c43bac..39d6aed 100644 --- a/tests/features/pathfinder-text-interaction.test.tsx +++ b/tests/features/pathfinder-text-interaction.test.tsx @@ -10,7 +10,11 @@ import { clearStoredMitreMatrix, MITRE_MATRIX_CHANGED_EVENT, saveStoredMitreMatr import { useFilteredRecords } from '../../src/features/search-filter/use-filtered-records'; import { makeSheet } from '../../src/importers/sheet-factory'; -vi.mock('../../src/app/AppProvider', () => ({ useApp: vi.fn() })); +vi.mock('../../src/app/AppProvider', () => { + const useApp = vi.fn(); + // The Context cluster index reads the app optionally; it sees the same mocked app. + return { useApp, useOptionalApp: () => useApp() }; +}); vi.mock('../../src/features/search-filter/use-filtered-records', () => ({ useFilteredRecords: vi.fn() })); vi.mock('../../src/features/search-filter/SearchFilterBar', () => ({ SearchFilterBar: () => null, SearchTextControl: () => null })); vi.mock('../../src/features/view-bookmarks/ViewBookmarks', () => ({ ViewBookmarks: () => null }));