| 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; |
| } |
| }); |