blob: 338df1e707e4c3040b3000aeb8c8d33a417af3cf [file] [log] [blame]
import './index'
import { QueryValuesSk, QueryValuesSkQueryValuesChangedEventDetail } from './query-values-sk';
import { CheckOrRadio } from 'elements-sk/checkbox-sk/checkbox-sk';
import { assert } from 'chai';
import { $$ } from 'common-sk/modules/dom';
import { setUpElementUnderTest, eventPromise } from '../test_util';
import { MultiSelectSk } from 'elements-sk/multi-select-sk/multi-select-sk';
describe('query-values-sk', () => {
const newInstance = setUpElementUnderTest<QueryValuesSk>('query-values-sk');
let queryValuesSk: QueryValuesSk;
let regexCheckbox: CheckOrRadio;
let invertCheckbox: CheckOrRadio;
beforeEach(() => {
queryValuesSk = newInstance();
queryValuesSk.options = ['x86', 'arm'];
regexCheckbox = $$<CheckOrRadio>('#regex', queryValuesSk)!;
invertCheckbox = $$<CheckOrRadio>('#invert', queryValuesSk)!;
})
describe('with regex', () => {
// We mark the beforeEach hook as async to give the MultiSelectSk's MutationObserver microtask
// a chance to run and detect the selection change before we execute the tests.
beforeEach(async () => {
queryValuesSk.selected = ['~ar'];
});
it('toggles a regex correctly on invert click', async () => {
assert.isTrue(regexCheckbox.checked);
const value = await clickAndWaitForQueryValuesChangedEvent(invertCheckbox);
assert.deepEqual([], value, 'Event was sent.');
// Regex and Invert are mutually exclusive.
assert.isFalse(regexCheckbox.checked, 'Regex checkbox is unchecked.');
assert.isTrue(invertCheckbox.checked);
});
it('toggles a regex correctly for regex click', async () => {
assert.isTrue(regexCheckbox.checked);
let value = await clickAndWaitForQueryValuesChangedEvent(regexCheckbox);
assert.deepEqual([], value, 'Event was sent.');
assert.isFalse(regexCheckbox.checked, 'Regex is unchecked');
assert.isFalse(invertCheckbox.checked, 'Invert stays unchecked');
// Now go back to regex.
value = await clickAndWaitForQueryValuesChangedEvent(regexCheckbox);
assert.deepEqual(['~ar'], value, 'Event was sent.');
assert.isTrue(regexCheckbox.checked, 'Regex is checked');
assert.isFalse(invertCheckbox.checked, 'Invert stays unchecked');
});
});
describe('normal input', () => {
// We mark the beforeEach hook as async to give the MultiSelectSk's MutationObserver microtask
// a chance to run and detect the selection change before we execute the tests.
beforeEach(async () => {
queryValuesSk.selected = ['arm'];
});
it('toggles invert correctly for invert click', async () => {
assert.isFalse(regexCheckbox.checked);
assert.isFalse(invertCheckbox.checked);
let value = await clickAndWaitForQueryValuesChangedEvent(invertCheckbox);
assert.deepEqual(['!arm'], value, 'Event was sent.');
assert.isFalse(regexCheckbox.checked);
assert.isTrue(invertCheckbox.checked);
value = await clickAndWaitForQueryValuesChangedEvent(invertCheckbox);
assert.deepEqual(['arm'], value, 'Event was sent.');
assert.isFalse(regexCheckbox.checked);
assert.isFalse(invertCheckbox.checked);
});
});
describe('with inverted input', () => {
// We mark the beforeEach hook as async to give the MultiSelectSk's MutationObserver microtask
// a chance to run and detect the selection change before we execute the tests.
beforeEach(async () => {
queryValuesSk.selected = ['!arm'];
});
it('toggles correctly for invert click when starting inverted', async () => {
assert.isFalse(regexCheckbox.checked);
assert.isTrue(invertCheckbox.checked);
let value = await clickAndWaitForQueryValuesChangedEvent(invertCheckbox);
assert.deepEqual(['arm'], value, 'Event was sent.');
assert.isFalse(regexCheckbox.checked);
assert.isFalse(invertCheckbox.checked);
value = await clickAndWaitForQueryValuesChangedEvent(invertCheckbox);
assert.deepEqual(['!arm'], value, 'Event was sent.');
assert.isFalse(regexCheckbox.checked);
assert.isTrue(invertCheckbox.checked);
});
it('sends right event when value is clicked', async () => {
assert.isFalse(regexCheckbox.checked);
assert.isTrue(invertCheckbox.checked);
const firstValue = $$<MultiSelectSk>('#values', queryValuesSk)!.children[0];
let value = await clickAndWaitForQueryValuesChangedEvent(firstValue as HTMLElement);
assert.deepEqual(['!x86', '!arm'], value, 'Event was sent.');
value = await clickAndWaitForQueryValuesChangedEvent(invertCheckbox);
assert.deepEqual(['x86', 'arm'], value, 'Event was sent.');
assert.isFalse(regexCheckbox.checked);
assert.isFalse(invertCheckbox.checked);
});
});
describe('with invert and regex hidden', () => {
beforeEach(() => {
queryValuesSk.setAttribute('hide_invert', 'true');
queryValuesSk.setAttribute('hide_regex', 'true');
});
it('can hide the regex and invert boxes', () => {
assert.isTrue(regexCheckbox.hasAttribute('hidden'));
assert.isTrue(invertCheckbox.hasAttribute('hidden'));
});
});
});
const clickAndWaitForQueryValuesChangedEvent = async (el: HTMLElement) => {
const e =
eventPromise<CustomEvent<QueryValuesSkQueryValuesChangedEventDetail>>(
'query-values-changed');
el.click();
return (await e).detail;
};