OcrTrigger: select initialisation from storedScriptType (with the UNKNOWN sentinel collapsing to empty), button disabled-state matrix across blockCount × scriptType, onTrigger callback wiring, no-annotations hint visibility. CoCorrespondentsList: empty-list early return, populated heading + hint, chip count and links, initials-from-up-to-two-name-parts logic. reset-password page: form/success branches, hidden-token rendering with null fallback, MISMATCH vs generic error code mapping, back-to-login link. 21 tests across three files. Refs #496. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
96 lines
3.2 KiB
TypeScript
96 lines
3.2 KiB
TypeScript
import { describe, it, expect, vi, afterEach } from 'vitest';
|
|
import { cleanup, render } from 'vitest-browser-svelte';
|
|
import { page } from 'vitest/browser';
|
|
import OcrTrigger from './OcrTrigger.svelte';
|
|
|
|
afterEach(cleanup);
|
|
|
|
describe('OcrTrigger', () => {
|
|
it('renders the script-type select and the trigger button', async () => {
|
|
render(OcrTrigger, {
|
|
props: { blockCount: 1, storedScriptType: 'HANDWRITING_KURRENT', onTrigger: () => {} }
|
|
});
|
|
|
|
await expect.element(page.getByRole('combobox')).toBeVisible();
|
|
await expect.element(page.getByRole('button')).toBeVisible();
|
|
});
|
|
|
|
it('initialises the select with the stored script type when provided', async () => {
|
|
render(OcrTrigger, {
|
|
props: { blockCount: 1, storedScriptType: 'HANDWRITING_KURRENT', onTrigger: () => {} }
|
|
});
|
|
|
|
const select = (await page.getByRole('combobox').element()) as HTMLSelectElement;
|
|
expect(select.value).toBe('HANDWRITING_KURRENT');
|
|
});
|
|
|
|
it('starts with an empty selection when storedScriptType is UNKNOWN', async () => {
|
|
render(OcrTrigger, {
|
|
props: { blockCount: 1, storedScriptType: 'UNKNOWN', onTrigger: () => {} }
|
|
});
|
|
|
|
const select = (await page.getByRole('combobox').element()) as HTMLSelectElement;
|
|
expect(select.value).toBe('');
|
|
});
|
|
|
|
it('disables the trigger button when no script type is selected', async () => {
|
|
render(OcrTrigger, {
|
|
props: { blockCount: 1, storedScriptType: 'UNKNOWN', onTrigger: () => {} }
|
|
});
|
|
|
|
const btn = (await page.getByRole('button').element()) as HTMLButtonElement;
|
|
expect(btn.disabled).toBe(true);
|
|
});
|
|
|
|
it('disables the trigger button when blockCount is 0 even if a script type is selected', async () => {
|
|
render(OcrTrigger, {
|
|
props: { blockCount: 0, storedScriptType: 'HANDWRITING_KURRENT', onTrigger: () => {} }
|
|
});
|
|
|
|
const btn = (await page.getByRole('button').element()) as HTMLButtonElement;
|
|
expect(btn.disabled).toBe(true);
|
|
});
|
|
|
|
it('shows the no-annotations hint when blockCount is 0', async () => {
|
|
render(OcrTrigger, {
|
|
props: { blockCount: 0, storedScriptType: 'HANDWRITING_KURRENT', onTrigger: () => {} }
|
|
});
|
|
|
|
await expect
|
|
.element(page.getByText('Zeichnen Sie zuerst Bereiche auf dem Dokument ein.'))
|
|
.toBeVisible();
|
|
});
|
|
|
|
it('omits the no-annotations hint when blockCount is greater than 0', async () => {
|
|
render(OcrTrigger, {
|
|
props: { blockCount: 5, storedScriptType: 'HANDWRITING_KURRENT', onTrigger: () => {} }
|
|
});
|
|
|
|
await expect
|
|
.element(page.getByText('Zeichnen Sie zuerst Bereiche auf dem Dokument ein.'))
|
|
.not.toBeInTheDocument();
|
|
});
|
|
|
|
it('calls onTrigger with the selected script type and useExistingAnnotations=true', async () => {
|
|
const onTrigger = vi.fn();
|
|
render(OcrTrigger, {
|
|
props: { blockCount: 5, storedScriptType: 'HANDWRITING_KURRENT', onTrigger }
|
|
});
|
|
|
|
await page.getByRole('button').click();
|
|
|
|
expect(onTrigger).toHaveBeenCalledWith('HANDWRITING_KURRENT', true);
|
|
});
|
|
|
|
it('does not call onTrigger when no script type is selected', async () => {
|
|
const onTrigger = vi.fn();
|
|
render(OcrTrigger, {
|
|
props: { blockCount: 5, storedScriptType: 'UNKNOWN', onTrigger }
|
|
});
|
|
|
|
await page.getByRole('button').click({ force: true });
|
|
|
|
expect(onTrigger).not.toHaveBeenCalled();
|
|
});
|
|
});
|