blob: 61924f2e6a8f8ba1f4b3ecccc76c22694c013ace [file] [log] [blame]
import './index';
import {
eventPromise,
noEventPromise,
setUpElementUnderTest,
} from '../../../infra-sk/modules/test_util';
import { expect } from 'chai';
import { LabelOrEmpty, TriageSk } from './triage-sk';
import { TriageSkPO } from './triage-sk_po';
describe('triage-sk', () => {
const newInstance = setUpElementUnderTest<TriageSk>('triage-sk');
let triageSk: TriageSk;
let triageSkPO: TriageSkPO;
beforeEach(() => {
triageSk = newInstance();
triageSkPO = new TriageSkPO(triageSk);
});
it('is untriaged by default', async () => {
await expectValueAndToggledButtonToBe(triageSk, triageSkPO, 'untriaged');
});
describe('"value" property setter/getter', () => {
it('sets and gets value via property', async () => {
triageSk.value = '';
await expectValueAndToggledButtonToBe(triageSk, triageSkPO, '');
triageSk.value = 'positive';
await expectValueAndToggledButtonToBe(triageSk, triageSkPO, 'positive');
triageSk.value = 'negative';
await expectValueAndToggledButtonToBe(triageSk, triageSkPO, 'negative');
triageSk.value = 'untriaged';
await expectValueAndToggledButtonToBe(triageSk, triageSkPO, 'untriaged');
});
it('does not emit event "change" when setting value via property',
async () => {
const noTriageEvent = noEventPromise('change');
triageSk.value = 'positive';
await noTriageEvent;
});
it('throws an exception upon an invalid value', () => {
expect(() => triageSk.value = 'hello world' as LabelOrEmpty)
.to.throw(RangeError, 'Invalid triage-sk value: "hello world".');
});
});
describe('buttons', () => {
it('sets value to positive when clicking positive button', async () => {
const changeEvent = eventPromise<CustomEvent<LabelOrEmpty>>('change', 100);
await triageSkPO.clickButton('positive');
await expectValueAndToggledButtonToBe(triageSk, triageSkPO, 'positive');
expect((await changeEvent).detail).to.equal('positive');
});
it('sets value to negative when clicking negative button', async () => {
const changeEvent = eventPromise<CustomEvent<LabelOrEmpty>>('change', 100);
await triageSkPO.clickButton('negative');
await expectValueAndToggledButtonToBe(triageSk, triageSkPO, 'negative');
expect((await changeEvent).detail).to.equal('negative');
});
it('sets value to untriaged when clicking untriaged button', async () => {
const changeEvent = eventPromise<CustomEvent<LabelOrEmpty>>('change', 100);
triageSk.value = 'positive'; // Untriaged by default; change value first.
await triageSkPO.clickButton('untriaged');
await expectValueAndToggledButtonToBe(triageSk, triageSkPO, 'untriaged');
expect((await changeEvent).detail).to.equal('untriaged');
});
it('does not emit event "change" when clicking button for current value',
async () => {
const noChangeEvent = noEventPromise('change');
await triageSkPO.clickButton('untriaged');
await noChangeEvent;
});
});
});
const expectValueAndToggledButtonToBe =
async (triageSk: TriageSk, triageSkPO: TriageSkPO, value: LabelOrEmpty) => {
expect(triageSk.value).to.equal(value);
expect(await triageSkPO.getLabelOrEmpty()).to.equal(value);
};