58 lines
1.8 KiB
TypeScript
58 lines
1.8 KiB
TypeScript
import { describe, test, expect, vi, afterEach } from 'vitest';
|
|||
|
|
import React from 'react';
|
||
|
|
import { createRoot, Root } from 'react-dom/client';
|
||
|
|
import { act } from 'react-dom/test-utils';
|
||
|
|
import { PublishWarnings } from './PublishWarnings';
|
||
|
|
|
||
|
|
/* ---------- DOM test harness (no @testing-library/react in this repo, see
|
||
|
|
src/ui/AssetPicker.test.tsx for the same pattern: react-dom/client +
|
||
|
|
react-dom/test-utils `act`, both transitive deps of react-dom already). ---------- */
|
||
|
|
let container: HTMLDivElement;
|
||
|
|
let root: Root;
|
||
|
|
|
||
|
|
function render(ui: React.ReactElement) {
|
||
|
|
container = document.createElement('div');
|
||
|
|
document.body.appendChild(container);
|
||
|
|
act(() => {
|
||
|
|
root = createRoot(container);
|
||
|
|
root.render(ui);
|
||
|
|
});
|
||
|
|
}
|
||
|
|
|
||
|
|
function click(el: Element | null) {
|
||
|
|
if (!el) throw new Error('element not found');
|
||
|
|
act(() => { (el as HTMLElement).dispatchEvent(new MouseEvent('click', { bubbles: true })); });
|
||
|
|
}
|
||
|
|
|
||
|
|
afterEach(() => {
|
||
|
|
if (container) {
|
||
|
|
act(() => { root.unmount(); });
|
||
|
|
container.remove();
|
||
|
|
}
|
||
|
|
});
|
||
|
|
|
||
|
|
describe('PublishWarnings', () => {
|
||
|
|
test('renders nothing when there are no warnings', () => {
|
||
|
|
render(<PublishWarnings warnings={[]} onDismiss={() => {}} />);
|
||
|
|
expect(container.innerHTML).toBe('');
|
||
|
|
});
|
||
|
|
|
||
|
|
test('renders each warning', () => {
|
||
|
|
render(
|
||
|
|
<PublishWarnings
|
||
|
|
warnings={['First problem.', 'Second problem.']}
|
||
|
|
onDismiss={() => {}}
|
||
|
|
/>,
|
||
|
|
);
|
||
|
|
expect(container.textContent).toContain('First problem.');
|
||
|
|
expect(container.textContent).toContain('Second problem.');
|
||
|
|
});
|
||
|
|
|
||
|
|
test('dismiss fires the callback', () => {
|
||
|
|
const onDismiss = vi.fn();
|
||
|
|
render(<PublishWarnings warnings={['A problem.']} onDismiss={onDismiss} />);
|
||
|
|
click(container.querySelector('[data-testid="publish-warnings-dismiss"]'));
|
||
|
|
expect(onDismiss).toHaveBeenCalledTimes(1);
|
||
|
|
});
|
||
|
|
});
|