blob: ba5d92a59251fcd32acbe8deae2d80d1a48dcf25 [file] [log] [blame]
import './index';
import sinon from 'sinon';
import { expect } from 'chai';
import { $, $$ } from 'common-sk/modules/dom';
import fetchMock from 'fetch-mock';
import { ChromiumPerfRunsSk } from './chromium-perf-runs-sk';
import {
tasksResult0, tasksResult1,
} from './test_data';
import {
eventPromise,
setUpElementUnderTest,
} from '../../../infra-sk/modules/test_util';
describe('chromium-perf-runs-sk', () => {
const newInstance = setUpElementUnderTest<ChromiumPerfRunsSk>('chromium-perf-runs-sk');
fetchMock.config.overwriteRoutes = false;
let perfRuns: HTMLElement;
beforeEach(async () => {
await expectReload(() => perfRuns = newInstance(), null);
});
afterEach(() => {
// Check all mock fetches called at least once and reset.
expect(fetchMock.done()).to.be.true;
fetchMock.reset();
sinon.restore();
});
// Expect 'trigger' to cause a reload, and execute it.
// Optionally pass desired result from server.
const expectReload = async (trigger: any, result: any) => {
result = result || tasksResult0;
const event = eventPromise('end-task');
fetchMock.postOnce('begin:/_/get_chromium_perf_tasks', result);
trigger();
await event;
};
it('shows table entries', async () => {
expect($('table.runssummary>tbody>tr', perfRuns)).to.have.length(11);
expect(fetchMock.lastUrl()).to.contain('exclude_dummy_page_sets=true');
expect(fetchMock.lastUrl()).to.contain('offset=0');
expect(fetchMock.lastUrl()).to.contain('size=10');
expect(fetchMock.lastUrl()).to.not.contain('filter_by_logged_in_user=true');
});
it('filters by user', async () => {
expect(fetchMock.lastUrl()).to.not.contain('filter_by_logged_in_user=true');
await expectReload(() => ($$('#userFilter', perfRuns) as HTMLElement).click(), null);
expect(fetchMock.lastUrl()).to.contain('filter_by_logged_in_user=true');
});
it('filters by tests', async () => {
expect(fetchMock.lastUrl()).to.contain('exclude_dummy_page_sets=true');
await expectReload(() => ($$('#testFilter', perfRuns) as HTMLElement).click(), null);
expect(fetchMock.lastUrl()).to.not.contain('exclude_dummy_page_sets=true');
});
it('navigates with pages', async () => {
expect(fetchMock.lastUrl()).to.contain('offset=0');
const result = tasksResult1;
result.pagination!.offset = 10;
// 'Next page' button.
await expectReload(
() => ($('pagination-sk button.action', perfRuns)[2] as HTMLElement).click(), result,
);
expect(fetchMock.lastUrl()).to.contain('offset=10');
expect($('table.runssummary>tbody>tr', perfRuns)).to.have.length(5);
});
it('deletes tasks', async () => {
sinon.stub(window, 'confirm').returns(true);
sinon.stub(window, 'alert');
fetchMock.post('begin:/_/delete_chromium_perf_task', 200);
fetchMock.postOnce('begin:/_/get_chromium_perf_tasks', tasksResult0);
($$('delete-icon-sk', perfRuns) as HTMLElement).click();
expect(fetchMock.lastOptions('begin:/_/delete')!.body).to.contain('"id":5094');
});
it('reschedules tasks', async () => {
sinon.stub(window, 'confirm').returns(true);
sinon.stub(window, 'alert');
fetchMock.post('begin:/_/redo_chromium_perf_task', 200);
fetchMock.postOnce('begin:/_/get_chromium_perf_tasks', tasksResult0);
($$('redo-icon-sk', perfRuns) as HTMLElement).click();
expect(fetchMock.lastOptions('begin:/_/redo')!.body).to.contain('"id":5094');
});
it('shows detail dialogs', async () => {
expect($$('#benchmarkArgs0', perfRuns)!.classList.value).to.include('hidden');
($$('.details', perfRuns) as HTMLElement).click();
expect($$('#benchmarkArgs0', perfRuns)!.classList.value).to.not.include('hidden');
});
});