60 lines
2.8 KiB
TypeScript
60 lines
2.8 KiB
TypeScript
// @vitest-environment jsdom
|
|
import { act } from 'react';
|
|
import { createRoot, type Root } from 'react-dom/client';
|
|
import { afterEach, beforeEach, expect, it, vi } from 'vitest';
|
|
import { AssessorApiClient } from '../../src/api/assessor-api-client';
|
|
import { ENGINE_PREFERENCES_KEY, resetEnginePreferencesForTests } from '../../src/app/engine-preferences';
|
|
import { EnginesControl } from '../../src/components/EnginesControl';
|
|
// Importing the Data Hub ISO tile installs the link, as it does when the app loads.
|
|
import '../../src/compliance/ui/IsoCorpusLibrary';
|
|
|
|
let host: HTMLDivElement;
|
|
let root: Root;
|
|
|
|
beforeEach(() => {
|
|
vi.stubGlobal('IS_REACT_ACT_ENVIRONMENT', true);
|
|
window.localStorage.removeItem(ENGINE_PREFERENCES_KEY);
|
|
resetEnginePreferencesForTests();
|
|
host = document.createElement('div');
|
|
document.body.append(host);
|
|
root = createRoot(host);
|
|
});
|
|
|
|
afterEach(async () => {
|
|
await act(async () => root.unmount());
|
|
host.remove();
|
|
window.localStorage.removeItem(ENGINE_PREFERENCES_KEY);
|
|
resetEnginePreferencesForTests();
|
|
vi.restoreAllMocks();
|
|
vi.unstubAllGlobals();
|
|
});
|
|
|
|
it('switches automatic ISO mapping off when the Compliance Engine is unticked in the Engines popup, and not back on', async () => {
|
|
const setAutoMapping = vi.spyOn(AssessorApiClient.prototype, 'setIsoAutoMapping')
|
|
.mockResolvedValue({ version: 1, configured: true, active: null, job: null, autoMapping: { enabled: false } });
|
|
await act(async () => root.render(<EnginesControl/>));
|
|
await act(async () => host.querySelector<HTMLButtonElement>('.engines-button')!.click());
|
|
const compliance = () => [...document.querySelectorAll<HTMLLabelElement>('.engines-option')]
|
|
.find(option => option.textContent?.includes('Compliance Engine'))!.querySelector('input')!;
|
|
|
|
await act(async () => { compliance().click(); await Promise.resolve(); });
|
|
expect(compliance().checked).toBe(false);
|
|
expect(setAutoMapping).toHaveBeenCalledTimes(1);
|
|
expect(setAutoMapping).toHaveBeenCalledWith(false);
|
|
|
|
await act(async () => { compliance().click(); await Promise.resolve(); });
|
|
expect(compliance().checked).toBe(true);
|
|
expect(setAutoMapping).toHaveBeenCalledTimes(1);
|
|
});
|
|
|
|
it('leaves automatic mapping alone when another engine is switched off', async () => {
|
|
const setAutoMapping = vi.spyOn(AssessorApiClient.prototype, 'setIsoAutoMapping')
|
|
.mockResolvedValue({ version: 1, configured: true, active: null, job: null });
|
|
await act(async () => root.render(<EnginesControl/>));
|
|
await act(async () => host.querySelector<HTMLButtonElement>('.engines-button')!.click());
|
|
const context = [...document.querySelectorAll<HTMLLabelElement>('.engines-option')]
|
|
.find(option => option.textContent?.includes('Context Engine'))!.querySelector('input')!;
|
|
await act(async () => { context.click(); await Promise.resolve(); });
|
|
expect(setAutoMapping).not.toHaveBeenCalled();
|
|
});
|