blob: e131c6ad616e47d9e0a402f72792626766b3d81f [file] [log] [blame]
import './index';
import { expect } from 'chai';
import { TestPickerSk } from './test-picker-sk';
import { setUpElementUnderTest } from '../../../infra-sk/modules/test_util';
import { NextParamListHandlerResponse, NextParamListHandlerRequest } from '../json';
import { toParamSet } from '../../../infra-sk/modules/query';
import { PickerFieldSk } from '../picker-field-sk/picker-field-sk';
describe('test-picker-sk', () => {
const newInstance = setUpElementUnderTest<TestPickerSk>('test-picker-sk');
let element: TestPickerSk;
let fetchMock: any;
beforeEach(async () => {
// Mock the fetch function.
fetchMock = (_url: string, request: any) => {
const req = JSON.parse(request.body) as NextParamListHandlerRequest;
const params = toParamSet(req.q!);
const paramset: any = {};
if (Object.keys(params).length === 0) {
paramset['benchmark'] = ['benchmark1', 'benchmark2'];
} else if (params.benchmark) {
paramset['bot'] = ['bot1', 'bot2'];
}
const response: NextParamListHandlerResponse = {
paramset: paramset,
count: 10,
};
return Promise.resolve(new Response(JSON.stringify(response)));
};
window.fetch = fetchMock;
element = newInstance((_el: TestPickerSk) => {});
element.initializeTestPicker(['benchmark', 'bot', 'test'], {}, false);
await new Promise((resolve) => setTimeout(resolve, 100));
});
it('should create the first field on initialization', () => {
const field = element.querySelector<PickerFieldSk>('picker-field-sk');
expect(field).to.not.equal(null);
expect(field!.label).to.equal('benchmark');
});
it('should create a new field when a value is selected', async () => {
const field = element.querySelector<PickerFieldSk>('picker-field-sk');
field!.dispatchEvent(
new CustomEvent('value-changed', {
detail: { value: ['benchmark1'] },
})
);
await new Promise((resolve) => setTimeout(resolve, 100));
const fields = element.querySelectorAll<PickerFieldSk>('picker-field-sk');
expect(fields.length).to.equal(2);
expect(fields[1].label).to.equal('bot');
});
it('should remove child fields when a value is cleared', async () => {
const field = element.querySelector<PickerFieldSk>('picker-field-sk');
field!.dispatchEvent(
new CustomEvent('value-changed', {
detail: { value: ['benchmark1'] },
})
);
await new Promise((resolve) => setTimeout(resolve, 100));
let fields = element.querySelectorAll<PickerFieldSk>('picker-field-sk');
expect(fields.length).to.equal(2);
field!.dispatchEvent(
new CustomEvent('value-changed', {
detail: { value: [] },
})
);
await new Promise((resolve) => setTimeout(resolve, 100));
fields = element.querySelectorAll<PickerFieldSk>('picker-field-sk');
expect(fields.length).to.equal(1);
});
it('should emit a plot-button-clicked event', async () => {
const plotButton = element.querySelector<HTMLButtonElement>('#plot-button');
plotButton!.disabled = false;
const eventPromise = new Promise<CustomEvent>((resolve) => {
element.addEventListener('plot-button-clicked', (e) => {
resolve(e as CustomEvent);
});
});
plotButton!.click();
const e = await eventPromise;
expect(e.detail.query).to.equal('');
});
});