blob: 4207abe42767e779ed80ae56f28c1725b56df150 [file] [log] [blame]
import './index';
import { setUpElementUnderTest, eventSequencePromise, eventPromise, setQueryString } from '../../../infra-sk/modules/test_util';
import { searchResponse, statusResponse, paramSetResponse } from './demo_data';
import fetchMock from 'fetch-mock';
import { deepCopy } from 'common-sk/modules/object';
import { SearchPageSk } from './search-page-sk';
import { SearchPageSkPO } from './search-page-sk_po';
import { SearchResponse } from '../rpc_types';
import { testOnlySetSettings } from '../settings';
const expect = chai.expect;
describe('search-page-sk', () => {
const newInstance = setUpElementUnderTest<SearchPageSk>('search-page-sk');
let searchPageSk: SearchPageSk;
let searchPageSkPO: SearchPageSkPO;
const defaultSearchRpcQueryString =
'fref=false&' +
'frgbamax=255&' +
'frgbamin=0&' +
'head=true&' +
'include=false&' +
'neg=false&' +
'pos=false&' +
'query=source_type%3Dinfra&' +
'rquery=source_type%3Dinfra&' +
'sort=desc&' +
'unt=true';
const emptySearchResponse = deepCopy(searchResponse);
emptySearchResponse.size = 0;
emptySearchResponse.digests = [];
const instantiate =
async (
searchRpcQueryString: string = defaultSearchRpcQueryString,
initialSearchResponse: SearchResponse = searchResponse) => {
fetchMock.get('/json/search?' + searchRpcQueryString, () => initialSearchResponse);
const events = eventSequencePromise(['end-task', 'end-task', 'end-task']);
searchPageSk = newInstance();
searchPageSkPO = new SearchPageSkPO(searchPageSk);
await events;
}
before(() => {
testOnlySetSettings({
title: 'Skia Infra',
defaultCorpus: 'infra',
baseRepoURL: 'https://skia.googlesource.com/buildbot.git',
});
});
beforeEach(() => {
setQueryString('');
fetchMock.get('/json/trstatus', () => statusResponse);
fetchMock.get('/json/paramset', () => paramSetResponse);
});
afterEach(() => {
expect(fetchMock.done()).to.be.true; // All mock RPCs called at least once.
fetchMock.reset();
});
it('shows empty search results', async () => {
await instantiate(defaultSearchRpcQueryString, emptySearchResponse);
expect(await searchPageSkPO.getSummary()).to.equal('No results matched your search criteria.');
expect(await searchPageSkPO.getDigests()).to.be.empty;
});
it('shows non-empty search results', async () => {
await instantiate();
expect(await searchPageSkPO.getSummary()).to.equal('Showing results 1 to 3 (out of 85).');
expect(await searchPageSkPO.getDigests()).to.deep.equal([
'Left: fbd3de3fff6b852ae0bb6751b9763d27',
'Left: 2fa58aa430e9c815755624ca6cca4a72',
'Left: ed4a8cf9ea9fbb57bf1f302537e07572'
])
});
// TODO(lovisolo): Test this more thoroughly (exercise all search parameters, etc.).
it('updates the search results when the search controls change', async () => {
await instantiate();
// We will pretend that the user unchecked "Include untriaged digests".
fetchMock.get(
'/json/search?' + defaultSearchRpcQueryString.replace('unt=true', 'unt=false'),
() => emptySearchResponse);
const event = eventPromise('end-task');
const searchControlsSkPO = await searchPageSkPO.getSearchControlsSkPO();
await searchControlsSkPO.clickIncludeUntriagedDigestsCheckbox();
await event;
expect(await searchPageSkPO.getSummary()).to.equal('No results matched your search criteria.');
});
it('reads the "blame" URL parameter', async () => {
setQueryString('?blame=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa:bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb');
await instantiate(
'blame=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa%3Abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb&' +
defaultSearchRpcQueryString);
// Nothing to assert here. If the RPC wasn't called with the query string above, the call to
// fetchMock.done() in the afterEach hook will fail.
});
});