Files
frontend-svelte/src/widgets/Board/ui/RoleField/RoleField.svelte.test.ts
T

52 lines
1.9 KiB
TypeScript

import {
fireEvent,
render,
screen,
} from '@testing-library/svelte';
import { tick } from 'svelte';
import {
describe,
expect,
it,
vi,
} from 'vitest';
import RoleField from './RoleField.svelte';
const baseProps = { fontName: 'Georgia', size: 24, weight: 400, leading: 1.4, tracking: 0 };
describe('RoleField', () => {
it('renders the initial text', async () => {
render(RoleField, { props: { role: 'header', text: 'Hello', oncommit: () => {}, ...baseProps } });
await tick();
expect(screen.getByRole('textbox').textContent).toBe('Hello');
});
it('commits the field text on blur (not on input)', async () => {
const oncommit = vi.fn();
render(RoleField, { props: { role: 'body', text: 'Start', oncommit, ...baseProps } });
await tick();
const field = screen.getByRole('textbox');
field.textContent = 'Edited';
await fireEvent.blur(field);
expect(oncommit).toHaveBeenCalledWith('Edited');
});
it('prevents Enter on the header role (single-line)', async () => {
render(RoleField, { props: { role: 'header', text: 'Title', oncommit: () => {}, ...baseProps } });
await tick();
const field = screen.getByRole('textbox');
const event = new KeyboardEvent('keydown', { key: 'Enter', cancelable: true, bubbles: true });
field.dispatchEvent(event);
expect(event.defaultPrevented).toBe(true);
});
it('allows Enter on the body role (multi-line)', async () => {
render(RoleField, { props: { role: 'body', text: 'Para', oncommit: () => {}, ...baseProps } });
await tick();
const field = screen.getByRole('textbox');
const event = new KeyboardEvent('keydown', { key: 'Enter', cancelable: true, bubbles: true });
field.dispatchEvent(event);
expect(event.defaultPrevented).toBe(false);
});
});