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); }); });