blob: ea5059bc028709fb3848ea07d7120cb88e450477 [file] [log] [blame]
import { expect } from 'chai';
import {
addEventListenersToPuppeteerPage,
EventName,
loadCachedTestBed,
takeScreenshot,
TestBed
} from '../../../puppeteer-tests/util';
import { SearchPageSkPO } from './search-page-sk_po';
import path from "path";
describe('search-page-sk', () => {
let eventPromiseFactory: <T>(eventName: EventName) => Promise<T>;
let searchPageSkPO: SearchPageSkPO;
let testBed: TestBed;
before(async () => {
testBed = await loadCachedTestBed(
path.join(__dirname, '..', '..', 'webpack.config.ts')
);
});
const goToPage = async (queryString = '') => {
const busyEnd = eventPromiseFactory('busy-end');
await testBed.page.goto(`${testBed.baseUrl}/dist/search-page-sk.html${queryString}`);
await busyEnd;
await testBed.page.setViewport({width: 1600, height: 1200});
searchPageSkPO = new SearchPageSkPO((await testBed.page.$('search-page-sk'))!);
};
beforeEach(async () => {
eventPromiseFactory = await addEventListenersToPuppeteerPage(testBed.page, ['busy-end']);
});
it('should render the demo page', async () => {
// Smoke test.
await goToPage();
expect(await testBed.page.$$('search-page-sk')).to.have.length(1);
});
describe('screenshots', () => {
it('shows an empty results page', async () => {
await goToPage('?untriaged=false');
await takeScreenshot(testBed.page, 'gold', 'search-page-sk_empty');
});
it('shows search results', async () => {
await goToPage('?untriaged=true&positive=true&negative=true');
await takeScreenshot(testBed.page, 'gold', 'search-page-sk');
});
it('shows changelist controls', async () => {
await goToPage('?untriaged=true&positive=true&negative=true&crs=gerrit&issue=123456');
await takeScreenshot(testBed.page, 'gold', 'search-page-sk_changelist-controls');
});
it('shows the bulk triage dialog', async () => {
await goToPage('?untriaged=true&positive=true&negative=true');
await searchPageSkPO.clickBulkTriageBtn();
await takeScreenshot(testBed.page, 'gold', 'search-page-sk_bulk-triage');
});
it('shows the bulk triage dialog with a CL', async () => {
await goToPage('?untriaged=true&positive=true&negative=true&crs=gerrit&issue=123456');
await searchPageSkPO.clickBulkTriageBtn();
await takeScreenshot(testBed.page, 'gold', 'search-page-sk_bulk-triage-with-cl');
});
it('shows the help dialog', async () => {
await goToPage();
await searchPageSkPO.clickHelpBtn();
await takeScreenshot(testBed.page, 'gold', 'search-page-sk_help-dialog');
});
it('shows a selected digest', async () => {
await goToPage('?untriaged=true&positive=true&negative=true');
await searchPageSkPO.typeKey('j'); // Select the first search result.
await takeScreenshot(testBed.page, 'gold', 'search-page-sk_first-search-result-selected');
});
});
it('reads search params from the URL', async () => {
await goToPage('?untriaged=true&positive=true&negative=true');
let searchControlsSkPO = await searchPageSkPO.getSearchControlsSkPO();
expect(await searchControlsSkPO.isIncludeUntriagedDigestsCheckboxChecked()).to.be.true;
expect(await searchControlsSkPO.isIncludePositiveDigestsCheckboxChecked()).to.be.true;
expect(await searchControlsSkPO.isIncludeNegativeDigestsCheckboxChecked()).to.be.true;
await goToPage('?untriaged=true&positive=false&negative=false');
searchControlsSkPO = await searchPageSkPO.getSearchControlsSkPO();
expect(await searchControlsSkPO.isIncludeUntriagedDigestsCheckboxChecked()).to.be.true;
expect(await searchControlsSkPO.isIncludePositiveDigestsCheckboxChecked()).to.be.false;
expect(await searchControlsSkPO.isIncludeNegativeDigestsCheckboxChecked()).to.be.false;
});
// TODO(lovisolo): Test this more thoroughly (exercise all search parameters, etc.).
it('updates the URL whe the search controls change', async () => {
await goToPage();
const searchControlsSkPO = await searchPageSkPO.getSearchControlsSkPO();
// "Positive" is initially unchecked.
expect(testBed.page.url()).to.not.include('positive=true');
// Check "Positive" checkbox.
let busyEnd = eventPromiseFactory('busy-end');
await searchControlsSkPO.clickIncludePositiveDigestsCheckbox();
await busyEnd;
expect(testBed.page.url()).to.include('positive=true');
// Uncheck "Positive" checkbox.
busyEnd = eventPromiseFactory('busy-end');
await searchControlsSkPO.clickIncludePositiveDigestsCheckbox();
await busyEnd;
expect(testBed.page.url()).to.not.include('positive=true');
});
it('supports the browser back/forward buttons', async () => {
await goToPage();
const searchControlsSkPO = await searchPageSkPO.getSearchControlsSkPO();
expect(testBed.page.url()).to.not.include('positive=true');
expect(testBed.page.url()).to.not.include('negative=true');
expect(await searchControlsSkPO.isIncludePositiveDigestsCheckboxChecked()).to.be.false;
expect(await searchControlsSkPO.isIncludeNegativeDigestsCheckboxChecked()).to.be.false;
// Check "Positive" checkbox.
let busyEnd = eventPromiseFactory('busy-end');
await searchControlsSkPO.clickIncludePositiveDigestsCheckbox();
await busyEnd;
expect(testBed.page.url()).to.include('positive=true');
expect(testBed.page.url()).to.not.include('negative=true');
expect(await searchControlsSkPO.isIncludePositiveDigestsCheckboxChecked()).to.be.true;
expect(await searchControlsSkPO.isIncludeNegativeDigestsCheckboxChecked()).to.be.false;
// Check "Negative" checkbox.
busyEnd = eventPromiseFactory('busy-end');
await searchControlsSkPO.clickIncludeNegativeDigestsCheckbox();
await busyEnd;
expect(testBed.page.url()).to.include('positive=true');
expect(testBed.page.url()).to.include('negative=true');
expect(await searchControlsSkPO.isIncludePositiveDigestsCheckboxChecked()).to.be.true;
expect(await searchControlsSkPO.isIncludeNegativeDigestsCheckboxChecked()).to.be.true;
// Go back.
busyEnd = eventPromiseFactory('busy-end');
await testBed.page.goBack();
await busyEnd;
expect(testBed.page.url()).to.include('positive=true');
expect(testBed.page.url()).to.not.include('negative=true');
expect(await searchControlsSkPO.isIncludePositiveDigestsCheckboxChecked()).to.be.true;
expect(await searchControlsSkPO.isIncludeNegativeDigestsCheckboxChecked()).to.be.false;
// Go back.
busyEnd = eventPromiseFactory('busy-end');
await testBed.page.goBack();
await busyEnd;
expect(testBed.page.url()).to.not.include('positive=true');
expect(testBed.page.url()).to.not.include('negative=true');
expect(await searchControlsSkPO.isIncludePositiveDigestsCheckboxChecked()).to.be.false;
expect(await searchControlsSkPO.isIncludeNegativeDigestsCheckboxChecked()).to.be.false;
// Go forward.
busyEnd = eventPromiseFactory('busy-end');
await testBed.page.goForward();
await busyEnd;
expect(testBed.page.url()).to.include('positive=true');
expect(testBed.page.url()).to.not.include('negative=true');
expect(await searchControlsSkPO.isIncludePositiveDigestsCheckboxChecked()).to.be.true;
expect(await searchControlsSkPO.isIncludeNegativeDigestsCheckboxChecked()).to.be.false;
// Go forward.
busyEnd = eventPromiseFactory('busy-end');
await testBed.page.goForward();
await busyEnd;
expect(testBed.page.url()).to.include('positive=true');
expect(testBed.page.url()).to.include('negative=true');
expect(await searchControlsSkPO.isIncludePositiveDigestsCheckboxChecked()).to.be.true;
expect(await searchControlsSkPO.isIncludeNegativeDigestsCheckboxChecked()).to.be.true;
});
});