feat(Board): add always-editable RoleField specimen input
This commit is contained in:
@@ -0,0 +1,51 @@
|
||||
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);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user