204 lines
9.2 KiB
JavaScript
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);
|
|
});
|
|
|
|
});
|