blob: c3b617e21b3225395fce663ab9f40c7aec3f92ba [file] [log] [blame]
import './index.js';
import { eventPromise, noEventPromise } from '../test_util';
import { $$ } from 'common-sk/modules/dom';
describe('triage-sk', function() {
let triageSk;
beforeEach(() => {
triageSk = document.createElement('triage-sk');
document.body.appendChild(triageSk);
});
afterEach(() => {
// Remove the stale instance under test.
if (triageSk) {
document.body.removeChild(triageSk);
triageSk = null;
}
});
it('is untriaged by default', () => {
expectValueAndToggledButtonToBe(triageSk, 'untriaged');
});
describe('"value" property setter/getter', () => {
it('sets and gets value via property', () => {
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);
expect($$(`button.${value}`, triageSk).className).to.contain('selected');
};