haikuwebkit/Websites/perf.webkit.org/browser-tests/commit-log-viewer-tests.js

204 lines
9.2 KiB
JavaScript

describe('CommitLogViewer', () => {
function importCommitLogViewer(context)
{
const scripts = [
'../shared/statistics.js',
'instrumentation.js',
'lazily-evaluated-function.js',
'models/data-model.js',
'models/repository.js',
'models/commit-set.js',
'models/commit-log.js',
'../shared/common-component-base.js',
'components/base.js',
'components/spinner-icon.js',
'components/commit-log-viewer.js'];
return context.importScripts(scripts, 'CommonComponentBase', 'ComponentBase', 'CommitLogViewer', 'Repository', 'CommitLog', 'RemoteAPI').then(() => {
return context.symbols.CommitLogViewer;
});
}
const webkitCommit210948 = {
"id": "185326",
"revision": "210948",
"repository": 1,
"previousCommit": null,
"ownsCommits": false,
"time": +new Date("2017-01-20 02:52:34.577Z"),
"authorName": "Zalan Bujtas",
"authorEmail": "zalan@apple.com",
"message": "a message",
};
const webkitCommit210949 = {
"id": "185334",
"revision": "210949",
"repository": 1,
"previousCommit": null,
"ownsCommits": false,
"time": +new Date("2017-01-20T03:23:50.645Z"),
"authorName": "Chris Dumez",
"authorEmail": "cdumez@apple.com",
"message": "some message",
};
const webkitCommit210950 = {
"id": "185338",
"revision": "210950",
"repository": 1,
"previousCommit": null,
"ownsCommits": false,
"time": +new Date("2017-01-20T03:49:37.887Z"),
"authorName": "Commit Queue",
"authorEmail": "commit-queue@webkit.org",
"message": "another message",
};
const webkitCommit210950WithRevisionIdentifier = {
"id": "185338",
"revision": "210950",
"revisionIdentifier": "184278@main",
"repository": 1,
"previousCommit": null,
"ownsCommits": false,
"time": +new Date("2017-01-20T03:49:37.887Z"),
"authorName": "Commit Queue",
"authorEmail": "commit-queue@webkit.org",
"message": "another message",
};
it('should initially be empty with no spinner', () => {
const context = new BrowsingContext();
return importCommitLogViewer(context).then((CommitLogViewer) => {
const viewer = new CommitLogViewer;
context.document.body.appendChild(viewer.element());
viewer.enqueueToRender();
return waitForComponentsToRender(context).then(() => {
expect(viewer.content('spinner-container').offsetHeight).to.be(0);
expect(viewer.content('commits-list').matches(':empty')).to.be(true);
expect(viewer.content('repository-name').matches(':empty')).to.be(true);
});
});
});
it('should show the repository name and the spinner once it started fetching the list of commits ', () => {
const context = new BrowsingContext();
return importCommitLogViewer(context).then((CommitLogViewer) => {
const Repository = context.symbols.Repository;
const SpinnerIcon = context.symbols.SpinnerIcon;
const ComponentBase = context.symbols.ComponentBase;
const RemoteAPI = context.symbols.RemoteAPI;
const viewer = new CommitLogViewer;
const webkit = new Repository(1, {name: 'WebKit'});
context.document.body.appendChild(viewer.element());
viewer.enqueueToRender();
return waitForComponentsToRender(context).then(() => {
expect(viewer.content('spinner-container').offsetHeight).to.be(0);
expect(viewer.content('commits-list').matches(':empty')).to.be(true);
expect(viewer.content('repository-name').matches(':empty')).to.be(true);
expect(RemoteAPI.requests.length, 0);
viewer.view(webkit, '210948', '210950');
expect(RemoteAPI.requests.length, 1);
return waitForComponentsToRender(context);
}).then(() => {
expect(viewer.content('spinner-container').offsetHeight).to.not.be(0);
expect(viewer.content('commits-list').matches(':empty')).to.be(true);
expect(viewer.content('repository-name').matches(':empty')).to.be(false);
expect(viewer.content('repository-name').textContent).to.contain('WebKit');
});
});
});
it('should show the repository name, the list of commits, and hide the spinner once the list of commits are fetched', () => {
const context = new BrowsingContext();
return importCommitLogViewer(context).then(async (CommitLogViewer) => {
const Repository = context.symbols.Repository;
const SpinnerIcon = context.symbols.SpinnerIcon;
const ComponentBase = context.symbols.ComponentBase;
const requests = context.symbols.RemoteAPI.requests;
const viewer = new CommitLogViewer;
const webkit = new Repository(1, {name: 'WebKit'});
context.document.body.appendChild(viewer.element());
viewer.enqueueToRender();
await waitForComponentsToRender(context);
viewer.view(webkit, '210948', '210950');
await waitForComponentsToRender(context);
expect(viewer.content('spinner-container').offsetHeight).to.not.be(0);
expect(viewer.content('commits-list').matches(':empty')).to.be(true);
expect(viewer.content('repository-name').matches(':empty')).to.be(false);
expect(viewer.content('repository-name').textContent).to.contain('WebKit');
expect(requests.length).to.be(2);
expect(requests[0].url).to.be('/api/commits/1/?precedingRevision=210948&lastRevision=210950');
expect(requests[1].url).to.be('/api/commits/1/210948');
requests[0].resolve({
"status": "OK",
"commits": [webkitCommit210949, webkitCommit210950],
});
requests[1].resolve({
"status": "OK",
"commits": [webkitCommit210948],
});
await requests[0].promise;
await requests[1].promise;
await waitForComponentsToRender(context);
expect(viewer.content('spinner-container').offsetHeight).to.be(0);
expect(viewer.content('commits-list').matches(':empty')).to.be(false);
expect(viewer.content('commits-list').textContent).to.contain('r210949');
expect(viewer.content('commits-list').textContent).to.contain('Chris Dumez');
expect(viewer.content('commits-list').textContent).to.contain('r210950');
expect(viewer.content('commits-list').textContent).to.contain('Commit Queue');
expect(viewer.content('repository-name').matches(':empty')).to.be(false);
expect(viewer.content('repository-name').textContent).to.contain('WebKit');
expect(viewer.content('commits-list').querySelector('a')).to.be(null);
});
});
it('should show revision label', async () => {
const context = new BrowsingContext();
const CommitLogViewer = await importCommitLogViewer(context);
const Repository = context.symbols.Repository;
const requests = context.symbols.RemoteAPI.requests;
const viewer = new CommitLogViewer;
const webkit = new Repository(1, {name: 'WebKit'});
context.document.body.appendChild(viewer.element());
viewer.enqueueToRender();
await waitForComponentsToRender(context);
viewer.view(webkit, '210948', '210950');
await waitForComponentsToRender(context);
expect(viewer.content('spinner-container').offsetHeight).to.not.be(0);
expect(viewer.content('commits-list').matches(':empty')).to.be(true);
expect(viewer.content('repository-name').matches(':empty')).to.be(false);
expect(viewer.content('repository-name').textContent).to.contain('WebKit');
expect(requests.length).to.be(2);
expect(requests[0].url).to.be('/api/commits/1/?precedingRevision=210948&lastRevision=210950');
expect(requests[1].url).to.be('/api/commits/1/210948');
requests[0].resolve({
"status": "OK",
"commits": [webkitCommit210949, webkitCommit210950WithRevisionIdentifier],
});
requests[1].resolve({
"status": "OK",
"commits": [webkitCommit210948],
});
await requests[0].promise;
await requests[1].promise;
await waitForComponentsToRender(context);
expect(viewer.content('spinner-container').offsetHeight).to.be(0);
expect(viewer.content('commits-list').matches(':empty')).to.be(false);
expect(viewer.content('commits-list').textContent).to.contain('184278@main (r210950)');
expect(viewer.content('commits-list').textContent).to.contain('Commit Queue');
expect(viewer.content('repository-name').matches(':empty')).to.be(false);
expect(viewer.content('repository-name').textContent).to.contain('WebKit');
expect(viewer.content('commits-list').querySelector('a')).to.be(null);
});
});