import { render } from '@stencil/vitest';
describe('ontario-task', () => {
it('renders with default props', async () => {
const page = await render(``);
if (!page.root) {
throw new Error('Component did not render properly.');
}
expect(page.root).toEqualHtml(`
`);
});
it('renders with a custom label', async () => {
const page = await render(``);
if (!page.root) {
throw new Error('Component did not render properly.');
}
expect(page.root.shadowRoot?.querySelector('.ontario-task__label')?.textContent).toBe('Task 2');
});
it('renders with a different task status', async () => {
const page = await render(``);
if (!page.root) {
throw new Error('Component did not render properly.');
}
const badge = page.root.shadowRoot?.querySelector('ontario-badge');
expect(badge?.getAttribute('aria-label')).toBe('Task Status: Completed (completed)');
expect(badge?.colour).toBe('white');
expect(badge?.textContent).toBe('Completed');
});
it('updates when task status changes', async () => {
const page = await render(``);
if (!page.root) {
throw new Error('Component did not render properly.');
}
const badge = page.root.shadowRoot?.querySelector('ontario-badge');
expect(badge?.textContent).toBe('Not Started');
expect(badge?.getAttribute('aria-label')).toBe('Task Status: Not Started (notStarted)');
// Update the task status
page.root.setAttribute('task-status', 'inProgress');
await page.waitForChanges(); // Wait for changes to propagate
// Ensure the badge text and aria-label reflect the updated status
expect(badge?.getAttribute('aria-label')).toBe('Task Status: In Progress (inProgress)');
expect(badge?.textContent).toBe('In Progress');
});
it('renders with accessibility attributes', async () => {
const page = await render(
``,
);
if (!page.root) {
throw new Error('Component did not render properly.');
}
const listItem = page.root.shadowRoot?.querySelector('li');
expect(listItem?.getAttribute('role')).toBe('group');
expect(listItem?.getAttribute('aria-labelledby')).toBe('task-label--task-5');
});
});