import { expect, Locator } from '@playwright/test'; import { test, EventSpy } from '@stencil/playwright'; test.describe('ontario-checkboxes', () => { let host: Locator; let checkboxes: Locator; let labels: Locator; let changeSpy: EventSpy; let checkboxOnChangeSpy: EventSpy; test.beforeEach(async ({ page }) => { await page.setContent(` `); await page.waitForChanges(); host = page.locator('ontario-checkboxes').first(); checkboxes = host.locator('input[type="checkbox"]'); labels = host.locator('.ontario-checkboxes__label'); changeSpy = await page.spyOnEvent('change'); checkboxOnChangeSpy = await page.spyOnEvent('checkboxOnChange'); }); test('updates the component value and emits host/custom change details when checkboxes are toggled', async ({ page, }) => { await labels.nth(0).click(); await page.waitForChanges(); await labels.nth(1).click(); await page.waitForChanges(); expect(await host.evaluate((element: HTMLOntarioCheckboxesElement) => element.value)).toEqual([ 'checkbox-option-1', 'checkbox-option-2', ]); await expect(changeSpy).toHaveReceivedEventDetail({ value: ['checkbox-option-1', 'checkbox-option-2'], }); expect(checkboxOnChangeSpy.events.length).toBeGreaterThan(0); expect(checkboxOnChangeSpy.events[checkboxOnChangeSpy.events.length - 1].detail).toEqual({ checked: true, id: 'checkbox-2', value: 'checkbox-option-2', }); }); test('updates the component value and emits host/custom change details when a checkbox is unchecked', async ({ page, }) => { await labels.nth(0).click(); await page.waitForChanges(); await labels.nth(1).click(); await page.waitForChanges(); await labels.nth(1).click(); await page.waitForChanges(); expect(await host.evaluate((element: HTMLOntarioCheckboxesElement) => element.value)).toEqual([ 'checkbox-option-1', ]); await expect(changeSpy).toHaveReceivedEventDetail({ value: ['checkbox-option-1'], }); expect(checkboxOnChangeSpy.events.length).toBeGreaterThan(0); expect(checkboxOnChangeSpy.events[checkboxOnChangeSpy.events.length - 1].detail).toEqual({ checked: false, id: 'checkbox-2', value: 'checkbox-option-2', }); }); test('applies external value updates to the rendered checkbox selection', async ({ page }) => { await host.evaluate((element: HTMLOntarioCheckboxesElement) => { element.value = ['checkbox-option-2']; }); await page.waitForChanges(); await expect(checkboxes.nth(0)).not.toBeChecked(); await expect(checkboxes.nth(1)).toBeChecked(); }); }); // import { newE2EPage } from '@stencil/core/testing'; // describe('ontario-checkboxes', () => { // it('renders checkbox', async () => { // const page = await newE2EPage(); // await page.setContent(''); // const component = await page.find('ontario-checkboxes'); // expect(component).toHaveClass('hydrated'); // }); // }); // describe('events', () => { // it('fires the onChange event', async () => { // const page = await newE2EPage(); // await page.setContent(''); // const changeEvent = await page.spyOnEvent('change'); // const component = await page.find('ontario-checkboxes'); // component.triggerEvent('change'); // await page.waitForChanges(); // expect(changeEvent).toHaveReceivedEventTimes(1); // }); // });