import '../../../dist/zn.min.js'; import { expect, fixture, html } from '@open-wc/testing'; import { sendKeys } from '@web/test-runner-commands'; import type ZnButton from '../button'; import type ZnDataTable from '../data-table'; import type ZnFilterWrapper from './filter-wrapper.component'; import type ZnInput from '../input'; describe('', () => { it('should render a component', async () => { const el = await fixture(html` `); expect(el).to.exist; }); it('trims input values on submit', async () => { const table = await fixture(html` `); table.refresh = async () => undefined; const wrapper = table.querySelector('zn-filter-wrapper')!; const input = table.querySelector('zn-input')!; await input.updateComplete; wrapper.handleSubmit(new Event('click')); expect(table.requestParams).to.deep.equal({external_reference: 'abc'}); expect(input.value).to.equal('abc'); }); it('clears displayed whitespace from a focused email input on submit', async () => { const table = await fixture(html` `); table.refresh = async () => undefined; const [input, clean] = table.querySelectorAll('zn-input'); await input.updateComplete; input.focus(); await sendKeys({type: ' a@b.com'}); expect(input.input.scrollWidth).to.be.greaterThan(clean.input.scrollWidth); table.querySelector('zn-filter-wrapper')!.handleSubmit(new Event('click')); expect(table.requestParams.email).to.equal('a@b.com'); expect(input.input.scrollWidth).to.equal(clean.input.scrollWidth); }); it('submits on Enter only when submit-on-enter is set', async () => { const table = await fixture(html` `); let refreshes = 0; table.refresh = async () => { refreshes++; }; const wrapper = table.querySelector('zn-filter-wrapper')!; const input = table.querySelector('zn-input')!; await input.updateComplete; input.focus(); await sendKeys({type: 'a@b.com'}); await sendKeys({press: 'Enter'}); expect(refreshes).to.equal(0); wrapper.submitOnEnter = true; await sendKeys({press: 'Enter'}); expect(refreshes).to.equal(1); expect(table.requestParams).to.deep.equal({email: 'a@b.com'}); }); it('shows the submit button as processing until results load', async () => { const table = await fixture(html` Submit `); let finish!: () => void; let refreshes = 0; table.refresh = () => { refreshes++; return new Promise(resolve => { finish = resolve; }); }; const button = table.querySelector('zn-button')!; await button.updateComplete; const base = button.shadowRoot!.querySelector('[part="base"]')!; base.click(); base.click(); expect(refreshes).to.equal(1); expect(button.processing).to.be.true; expect(button.processingText).to.equal('Searching...'); finish(); await new Promise(resolve => setTimeout(resolve)); expect(button.processing).to.be.false; }); });