blob: 66dbf91a0d751e3ea6a1665243bab143bde4b5db [file] [log] [blame]
import './index';
import { $, $$ } from 'common-sk/modules/dom';
import {
eventPromise,
noEventPromise,
setUpElementUnderTest,
} from '../test_util';
describe('triage-sk', () => {
const newInstance = setUpElementUnderTest('triage-sk');
let triageSk;
beforeEach(() => triageSk = newInstance());
it('is untriaged by default', () => {
expectValueAndToggledButtonToBe(triageSk, 'untriaged');
});
describe('"value" property setter/getter', () => {
it('sets and gets value via property', () => {
triageSk.value = '';
expectValueAndToggledButtonToBe(triageSk, '');
triageSk.value = 'positive';
expectValueAndToggledButtonToBe(triageSk, 'positive');
triageSk.value = 'negative';
expectValueAndToggledButtonToBe(triageSk, 'negative');
triageSk.value = 'untriaged';
expectValueAndToggledButtonToBe(triageSk, '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')
.to.throw(RangeError, 'Invalid triage-sk value: "hello world".');
});
});
describe('buttons', () => {
let changeEvent;
beforeEach(() => { changeEvent = eventPromise('change', 100); });
it('sets value to positive when clicking positive button', async () => {
$$('button.positive', triageSk).click();
expectValueAndToggledButtonToBe(triageSk, 'positive');
expect((await changeEvent).detail).to.equal('positive');
});
it('sets value to negative when clicking negative button', async () => {
$$('button.negative', triageSk).click();
expectValueAndToggledButtonToBe(triageSk, 'negative');
expect((await changeEvent).detail).to.equal('negative');
});
it('sets value to untriaged when clicking untriaged button', async () => {
triageSk.value = 'positive'; // Untriaged by default; change value first.
$$('button.untriaged', triageSk).click();
expectValueAndToggledButtonToBe(triageSk, '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');
$$('button.untriaged', triageSk).click();
await noChangeEvent;
});
});
});
const expectValueAndToggledButtonToBe = (triageSk, value) => {
expect(triageSk.value).to.equal(value);
if (value === '') {
expect($('button.selected', triageSk)).to.have.length(0);
} else {
expect($$(`button.${value}`, triageSk).className).to.contain('selected');
}
};