blob: 640eaf9db4009c1306a9dca4d932db1ffc427959 [file] [log] [blame]
import { expect } from 'chai';
import { ElementHandle } from 'puppeteer';
import {
addEventListenersToPuppeteerPage,
EventName,
loadCachedTestBed,
takeScreenshot,
TestBed,
} from '../../../puppeteer-tests/util';
describe('sort-toggle-sk', () => {
let testBed: TestBed;
before(async () => {
testBed = await loadCachedTestBed();
});
let promiseFactory: <T>(eventName: EventName) => Promise<T>;
let sortToggleSk: ElementHandle;
beforeEach(async () => {
promiseFactory = await addEventListenersToPuppeteerPage(testBed.page, [
'sort-changed',
]);
const loaded = promiseFactory('sort-changed'); // Emitted when sorted.
await testBed.page.goto(testBed.baseUrl);
await loaded;
sortToggleSk = (await testBed.page.$('#container sort-toggle-sk'))!;
});
it('should render the demo page', async () => {
// Smoke test.
expect(await testBed.page.$$('sort-toggle-sk')).to.have.length(1);
});
it('should respect the default sort order', async () => {
await expectSortOrderToMatch(['alfa', 'bravo', 'charlie', 'delta']);
await takeScreenshot(
sortToggleSk,
'gold',
'sort-toggle-sk_sort-alpha-ascending'
);
});
it('can sort alphabetically in descending order', async () => {
await clickSortHeader('name');
await expectSortOrderToMatch(['delta', 'charlie', 'bravo', 'alfa']);
await takeScreenshot(
sortToggleSk,
'gold',
'sort-toggle-sk_sort-alpha-descending'
);
});
it('it can sort by numeric values in descending order', async () => {
await clickSortHeader('weight');
await expectSortOrderToMatch(['charlie', 'bravo', 'alfa', 'delta']);
await takeScreenshot(
sortToggleSk,
'gold',
'sort-toggle-sk_sort-numeric-descending'
);
});
it('it can sort by numeric values in ascending order', async () => {
await clickSortHeader('weight'); // first in descending order
await clickSortHeader('weight'); // then should toggle to be in ascending order
await expectSortOrderToMatch(['delta', 'alfa', 'bravo', 'charlie']);
await takeScreenshot(
sortToggleSk,
'gold',
'sort-toggle-sk_sort-numeric-ascending'
);
});
async function expectSortOrderToMatch(names: string[]) {
const nameOrder = await sortToggleSk.$$eval(
'tbody tr td:first-child',
(tds: Element[]) => tds.map((td) => td.textContent)
);
expect(names).to.deep.equal(nameOrder);
}
async function clickSortHeader(key: string) {
const sortEvent = promiseFactory('sort-changed');
const header = await sortToggleSk.$(`th[data-key="${key}"]`);
await header!.click();
await sortEvent;
}
});