blob: 8a6f6be1843f59fae346ba64a3c2c7d2041c8fdd [file] [log] [blame]
import './index';
import { assert } from 'chai';
import { AlgoSelectSk, AlgoSelectAlgoChangeEventDetail } from './algo-select-sk';
import { setUpElementUnderTest } from '../../../infra-sk/modules/test_util';
describe('algo-select-sk', () => {
const newInstance = setUpElementUnderTest<AlgoSelectSk>('algo-select-sk');
let element: AlgoSelectSk;
beforeEach(() => {
element = newInstance();
});
const dispatchSelectionChanged = (selection: number) => {
const select = element.querySelector('select-sk')!;
select.dispatchEvent(
new CustomEvent('selection-changed', {
detail: { selection },
bubbles: true,
})
);
};
const waitForAlgoChange = async () =>
await new Promise<CustomEvent<AlgoSelectAlgoChangeEventDetail>>((resolve) => {
element.addEventListener(
'algo-change',
(e) => {
resolve(e as CustomEvent<AlgoSelectAlgoChangeEventDetail>);
},
{ once: true }
);
});
it('defaults to kmeans', () => {
assert.equal(element.algo, 'kmeans');
});
it('can set algo through attribute', () => {
element.setAttribute('algo', 'stepfit');
assert.equal(element.algo, 'stepfit');
});
it('can set algo through property', () => {
element.algo = 'stepfit';
assert.equal(element.getAttribute('algo'), 'stepfit');
assert.equal(element.algo, 'stepfit');
});
it('falls back to kmeans for invalid values', () => {
element.setAttribute('algo', 'invalid');
assert.equal(element.algo, 'kmeans');
});
it('emits algo-change event when selection changes', async () => {
const eventPromise = waitForAlgoChange();
// select-sk selection changed is index based.
// 0 is K-Means, 1 is Individual (stepfit)
dispatchSelectionChanged(1);
const event = await eventPromise;
assert.equal(event.detail.algo, 'stepfit');
});
it('handles negative selection in select-sk', async () => {
const eventPromise = waitForAlgoChange();
dispatchSelectionChanged(-1);
const event = await eventPromise;
assert.equal(event.detail.algo, 'kmeans');
});
});