import { render } from '@stencil/vitest'; describe('ontario-input', () => { describe('snapshot', () => { it('should render the expected html', async () => { const page = await render( ``, ); expect(page.root).toMatchSnapshot(); }); }); describe('render', () => { it('should render a default input element', async () => { const page = await render( ``, ); expect(page.root).toEqualHtml(`
`); }); it('should reflect attributes/props being set', async () => { const page = await render(``); expect(page.instance.name).toBe('input-name'); expect(page.instance.value).toBe('input value'); expect(page.instance.elementId).toBe('input-id'); expect(page.instance.type).toBe('tel'); expect(page.instance.inputWidth).toBe('7-char-width'); expect(page.instance.captionState.captionText).toBe('Ontario Input'); }); }); describe('events/methods', () => { it('should emit a keyboard event on change', async () => { const page = await render(``); const emitSpy = vi.fn(); const leftArrowKeyCode = 37; document.addEventListener('inputOnChange', emitSpy); page.instance.handleEvent( new KeyboardEvent('keydown', { keyCode: leftArrowKeyCode, }), 'change', ); await page.waitForChanges(); expect(emitSpy).toHaveBeenCalled(); }); // Note: This is skipped until it can be figured out why it doesn't work. it.skip('should update the input value on a change event', async () => { const page = await render(``); const emitSpy = vi.fn(); const testValue = 'This is a test'; const leftArrowKeyCode = 37; document.addEventListener('inputOnChange', emitSpy); page.instance.value = testValue; console.log('value:', page.instance.value); page.instance.handleEvent( new KeyboardEvent('keydown', { keyCode: leftArrowKeyCode, }), 'change', ); await page.waitForChanges(); console.log('value2:', page.instance.value); expect(emitSpy).toHaveBeenCalled(); expect(page.instance.value).toBe(testValue); }); it('should return the input id when using the getId method', async () => { const page = await render(``); expect(page.instance.getId()).toEqual('input-id'); }); }); describe('form association', () => { it('should call setFormValue with the current value when handleValueChange is invoked', async () => { const page = await render(``); const setFormValueSpy = vi.fn(); page.instance.internals = { setFormValue: setFormValueSpy }; page.instance.value = 'updated value'; page.instance.handleValueChange(); expect(setFormValueSpy).toHaveBeenCalledWith('updated value'); }); it('should call setFormValue with an empty string when value is cleared', async () => { const page = await render(``); const setFormValueSpy = vi.fn(); page.instance.internals = { setFormValue: setFormValueSpy }; page.instance.value = undefined; page.instance.handleValueChange(); expect(setFormValueSpy).toHaveBeenCalledWith(''); }); }); });