ScriptTypeSelect: option list, placeholder disabled, value initialisation, disabled prop propagation. SinglePersonHintBar: hasDateFilter false vs true branches, sortDir DESC vs ASC label switch, year-range with only fromDate fallback. UserGroupsSection: per-group checkbox rendering, label visibility, selectedGroupIds preselection, empty groups list, default empty selection. 15 tests across three small primitives. Refs #496. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
55 lines
1.8 KiB
TypeScript
55 lines
1.8 KiB
TypeScript
import { describe, it, expect, afterEach } from 'vitest';
|
|
import { cleanup, render } from 'vitest-browser-svelte';
|
|
import UserGroupsSection from './UserGroupsSection.svelte';
|
|
|
|
afterEach(cleanup);
|
|
|
|
const groups = [
|
|
{ id: 'g1', name: 'Familie' },
|
|
{ id: 'g2', name: 'Admins' },
|
|
{ id: 'g3', name: 'Lesetransport' }
|
|
];
|
|
|
|
describe('UserGroupsSection', () => {
|
|
it('renders one checkbox per group', async () => {
|
|
render(UserGroupsSection, { props: { groups } });
|
|
|
|
const checkboxes = document.querySelectorAll('input[name="groupIds"]');
|
|
expect(checkboxes.length).toBe(3);
|
|
});
|
|
|
|
it('renders each group label', async () => {
|
|
render(UserGroupsSection, { props: { groups } });
|
|
|
|
expect(document.body.textContent).toContain('Familie');
|
|
expect(document.body.textContent).toContain('Admins');
|
|
expect(document.body.textContent).toContain('Lesetransport');
|
|
});
|
|
|
|
it('preselects checkboxes for ids in selectedGroupIds', async () => {
|
|
render(UserGroupsSection, { props: { groups, selectedGroupIds: ['g1', 'g3'] } });
|
|
|
|
const checkboxes = Array.from(
|
|
document.querySelectorAll('input[name="groupIds"]')
|
|
) as HTMLInputElement[];
|
|
const checkedValues = checkboxes.filter((c) => c.checked).map((c) => c.value);
|
|
expect(checkedValues.sort()).toEqual(['g1', 'g3']);
|
|
});
|
|
|
|
it('renders nothing when groups is empty', async () => {
|
|
render(UserGroupsSection, { props: { groups: [] } });
|
|
|
|
const checkboxes = document.querySelectorAll('input[name="groupIds"]');
|
|
expect(checkboxes.length).toBe(0);
|
|
});
|
|
|
|
it('handles a missing selectedGroupIds prop by defaulting to none selected', async () => {
|
|
render(UserGroupsSection, { props: { groups } });
|
|
|
|
const checkboxes = Array.from(
|
|
document.querySelectorAll('input[name="groupIds"]')
|
|
) as HTMLInputElement[];
|
|
expect(checkboxes.every((c) => !c.checked)).toBe(true);
|
|
});
|
|
});
|