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('');
});
});
});