| "use strict"; |
| |
| const assert = require('assert'); |
| require('../tools/js/v3-models.js'); |
| const BrowserPrivilegedAPI = require('../public/v3/privileged-api.js').PrivilegedAPI; |
| const MockModels = require('./resources/mock-v3-models.js').MockModels; |
| const MockRemoteAPI = require('../unit-tests/resources/mock-remote-api.js').MockRemoteAPI; |
| |
| function createPatch() |
| { |
| return UploadedFile.ensureSingleton(453, {'createdAt': new Date('2017-05-01T19:16:53Z'), 'filename': 'patch.dat', 'extension': '.dat', 'author': 'some user', |
| size: 534637, sha256: '169463c8125e07c577110fe144ecd63942eb9472d438fc0014f474245e5df8a1'}); |
| } |
| |
| function createAnotherPatch() |
| { |
| return UploadedFile.ensureSingleton(454, {'createdAt': new Date('2017-05-01T19:16:53Z'), 'filename': 'patch.dat', 'extension': '.dat', 'author': 'some user', |
| size: 534611, sha256: '169463c8125e07c577110fe144ecd63942eb9472d438fc0014f474245e5dfaaa'}); |
| } |
| |
| function createRoot() |
| { |
| return UploadedFile.ensureSingleton(456, {'createdAt': new Date('2017-05-01T21:03:27Z'), 'filename': 'root.dat', 'extension': '.dat', 'author': 'some user', |
| size: 16452234, sha256: '03eed7a8494ab8794c44b7d4308e55448fc56f4d6c175809ba968f78f656d58d'}); |
| } |
| |
| function createAnotherRoot() |
| { |
| return UploadedFile.ensureSingleton(457, {'createdAt': new Date('2017-05-01T21:03:27Z'), 'filename': 'root.dat', 'extension': '.dat', 'author': 'some user', |
| size: 16452111, sha256: '03eed7a8494ab8794c44b7d4308e55448fc56f4d6c175809ba968f78f656dbbb'}); |
| } |
| |
| function createSharedRoot() |
| { |
| return UploadedFile.ensureSingleton(458, {'createdAt': new Date('2017-05-01T22:03:27Z'), 'filename': 'root.dat', 'extension': '.dat', 'author': 'some user', |
| size: 16452111, sha256: '03eed7a8494ab8794c44b7d4308e55448fc56f4aac175809ba968f78f656dbbb'}); |
| } |
| |
| function customCommitSetWithoutOwnedCommit() |
| { |
| const customCommitSet = new CustomCommitSet; |
| customCommitSet.setRevisionForRepository(MockModels.osx, '10.11.4 15E65'); |
| customCommitSet.setRevisionForRepository(MockModels.webkit, '200805'); |
| return customCommitSet; |
| } |
| |
| function customCommitSetWithOwnedCommit() |
| { |
| const customCommitSet = new CustomCommitSet; |
| customCommitSet.setRevisionForRepository(MockModels.osx, '10.11.4 15E65'); |
| customCommitSet.setRevisionForRepository(MockModels.ownerRepository, 'OwnerRepository-r0'); |
| customCommitSet.setRevisionForRepository(MockModels.ownedRepository, 'OwnedRepository-r0', null, 'OwnerRepository-r0'); |
| return customCommitSet; |
| } |
| |
| function customCommitSetWithPatch() |
| { |
| const customCommitSet = new CustomCommitSet; |
| const patch = createPatch(); |
| customCommitSet.setRevisionForRepository(MockModels.osx, '10.11.4 15E65'); |
| customCommitSet.setRevisionForRepository(MockModels.webkit, '200805', patch); |
| return customCommitSet; |
| } |
| |
| function customCommitSetWithOwnedRepositoryHasSameNameAsNotOwnedRepository() |
| { |
| const customCommitSet = new CustomCommitSet; |
| customCommitSet.setRevisionForRepository(MockModels.osx, '10.11.4 15E65'); |
| customCommitSet.setRevisionForRepository(MockModels.webkit, '200805'); |
| customCommitSet.setRevisionForRepository(MockModels.ownedWebkit, 'owned-200805', null, '10.11.4 15E65'); |
| return customCommitSet; |
| } |
| |
| function ownerCommit() |
| { |
| return CommitLog.ensureSingleton(5, { |
| id: 5, |
| repository: MockModels.ownerRepository, |
| revision: 'owner-commit-0', |
| ownsCommits: true, |
| time: null, |
| }); |
| } |
| |
| function partialOwnerCommit() |
| { |
| return CommitLog.ensureSingleton(5, { |
| id: 5, |
| repository: MockModels.ownerRepository, |
| revision: 'owner-commit-0', |
| ownsCommits: null, |
| time: +(new Date('2016-05-13T00:55:57.841344Z')), |
| }); |
| } |
| |
| function ownedCommit() |
| { |
| return new CommitLog(6, { |
| id: 6, |
| repository: MockModels.ownedRepository, |
| revision: 'owned-commit-0', |
| ownsCommits: null, |
| time: 1456932774000 |
| }); |
| } |
| |
| function webkitCommit() |
| { |
| return CommitLog.ensureSingleton(2017, { |
| id: 2017, |
| repository: MockModels.webkit, |
| revision: 'webkit-commit-0', |
| ownsCommits: false, |
| time: 1456932773000 |
| }); |
| } |
| |
| function anotherWebKitCommit() |
| { |
| return CommitLog.ensureSingleton(2018, { |
| id: 2018, |
| repository: MockModels.webkit, |
| revision: 'webkit-commit-1', |
| ownsCommits: false, |
| time: 1456932773000 |
| }); |
| } |
| |
| function commitWithSVNRevision() |
| { |
| return CommitLog.ensureSingleton(2019, { |
| id: 2019, |
| repository: MockModels.webkit, |
| revision: '12345', |
| ownsCommits: false, |
| time: 1456932773000 |
| }); |
| } |
| |
| function anotherCommitWithSVNRevision() |
| { |
| return CommitLog.ensureSingleton(2020, { |
| id: 2020, |
| repository: MockModels.webkit, |
| revision: '45678', |
| ownsCommits: false, |
| time: 1456932773000 |
| }); |
| } |
| |
| function commitWithGitRevision() |
| { |
| return CommitLog.ensureSingleton(2021, { |
| id: 2021, |
| repository: MockModels.webkitGit, |
| revision: '13a0590d34f26fda3953c42ff833132a1a6f6f5a', |
| ownsCommits: false, |
| time: 1456932773000 |
| }); |
| } |
| |
| function anotherCommitWithGitRevision() |
| { |
| return CommitLog.ensureSingleton(2022, { |
| id: 2022, |
| repository: MockModels.webkitGit, |
| revision: '2f8dd3321d4f51c04f4e2019428ce9ffe97f1ef1', |
| ownsCommits: false, |
| time: 1456932773000 |
| }); |
| } |
| |
| function commitWithTestability() |
| { |
| return CommitLog.ensureSingleton(2023, { |
| id: 2023, |
| repository: MockModels.webkitGit, |
| revision: 'f24fc67873a0068fd5a3a9adac595f0036c21315', |
| ownsCommits: false, |
| time: 1456932773000, |
| testability: 'Failed compilation' |
| }); |
| } |
| |
| describe('CommitSet', () => { |
| MockRemoteAPI.inject(null, BrowserPrivilegedAPI); |
| MockModels.inject(); |
| |
| function oneCommitSet() |
| { |
| return CommitSet.ensureSingleton(1, { |
| revisionItems: [{ commit: webkitCommit(), requiresBuild: false }], |
| customRoots: [] |
| }); |
| } |
| |
| function anotherCommitSet() |
| { |
| return CommitSet.ensureSingleton(2, { |
| revisionItems: [{ commit: webkitCommit(), requiresBuild: false }], |
| customRoots: [] |
| }); |
| } |
| |
| function commitSetWithPatch() |
| { |
| return CommitSet.ensureSingleton(3, { |
| revisionItems: [{ commit: webkitCommit(), requiresBuild: false, patch: createPatch() }], |
| customRoots: [] |
| }); |
| } |
| |
| function commitSetWithAnotherPatch() |
| { |
| return CommitSet.ensureSingleton(4, { |
| revisionItems: [{ commit: webkitCommit(), requiresBuild: false, patch: createAnotherPatch() }], |
| customRoots: [] |
| }); |
| } |
| |
| function commitSetWithRoot() |
| { |
| return CommitSet.ensureSingleton(5, { |
| revisionItems: [{ commit: webkitCommit(), requiresBuild: false }], |
| customRoots: [createRoot()] |
| }); |
| } |
| |
| function anotherCommitSetWithRoot() |
| { |
| return CommitSet.ensureSingleton(6, { |
| revisionItems: [{ commit: webkitCommit(), requiresBuild: false }], |
| customRoots: [createAnotherRoot()] |
| }); |
| } |
| |
| function commitSetWithTwoRoots() |
| { |
| return CommitSet.ensureSingleton(7, { |
| revisionItems: [{ commit: webkitCommit(), requiresBuild: false }], |
| customRoots: [createRoot(), createSharedRoot()] |
| }); |
| } |
| |
| function commitSetWithAnotherWebKitCommit() |
| { |
| return CommitSet.ensureSingleton(8, { |
| revisionItems: [{ commit: anotherWebKitCommit(), requiresBuild: false }], |
| customRoots: [] |
| }); |
| } |
| |
| function commitSetWithAnotherCommitPatchAndRoot() |
| { |
| return CommitSet.ensureSingleton(9, { |
| revisionItems: [{ commit: anotherWebKitCommit(), requiresBuild: true, patch: createPatch()}], |
| customRoots: [createRoot(), createSharedRoot()] |
| }); |
| } |
| |
| function commitSetWithSVNCommit() |
| { |
| return CommitSet.ensureSingleton(10, { |
| revisionItems: [{ commit: commitWithSVNRevision(), requiresBuild: false }], |
| customRoots: [] |
| }); |
| } |
| |
| function anotherCommitSetWithSVNCommit() |
| { |
| return CommitSet.ensureSingleton(11, { |
| revisionItems: [{ commit: anotherCommitWithSVNRevision(), requiresBuild: false }], |
| customRoots: [] |
| }); |
| } |
| |
| function commitSetWithGitCommit() |
| { |
| return CommitSet.ensureSingleton(12, { |
| revisionItems: [{ commit: commitWithGitRevision(), requiresBuild: false }], |
| customRoots: [] |
| }); |
| } |
| |
| function anotherCommitSetWithGitCommit() |
| { |
| return CommitSet.ensureSingleton(13, { |
| revisionItems: [{ commit: anotherCommitWithGitRevision(), requiresBuild: false }], |
| customRoots: [] |
| }); |
| } |
| |
| function commitSetWithTwoCommits() |
| { |
| return CommitSet.ensureSingleton(14, { |
| revisionItems: [{ commit: commitWithGitRevision(), requiresBuild: false }, { commit: commitWithSVNRevision(), requiresBuild: false }], |
| customRoots: [] |
| }); |
| } |
| |
| function anotherCommitSetWithTwoCommits() |
| { |
| return CommitSet.ensureSingleton(15, { |
| revisionItems: [{ commit: anotherCommitWithGitRevision(), requiresBuild: false }, { commit: anotherCommitWithSVNRevision(), requiresBuild: false }], |
| customRoots: [] |
| }); |
| } |
| |
| function commitSetWithTestability() |
| { |
| return CommitSet.ensureSingleton(16, { |
| revisionItems: [{ commit: commitWithTestability(), requiresBuild: false }, |
| { commit: webkitCommit(), requiresBuild: false }], |
| customRoots: [] |
| }); |
| } |
| |
| function oneMeasurementCommitSet() |
| { |
| return MeasurementCommitSet.ensureSingleton(1, [ |
| [2017, 11, 'webkit-commit-0', null, 1456932773000] |
| ]); |
| } |
| |
| describe('equals', () => { |
| it('should return false if patches for same repository are different', () => { |
| assert(!commitSetWithPatch().equals(commitSetWithAnotherPatch())); |
| assert(!commitSetWithAnotherPatch().equals(commitSetWithPatch())); |
| }); |
| |
| it('should return false if patch is only specified in one commit set', () => { |
| assert(!oneCommitSet().equals(commitSetWithPatch())); |
| assert(!commitSetWithPatch().equals(oneCommitSet())); |
| }); |
| |
| it('should return false if roots for same repository are different', () => { |
| assert(!commitSetWithRoot().equals(anotherCommitSetWithRoot())); |
| assert(!anotherCommitSetWithRoot().equals(commitSetWithRoot())); |
| }); |
| |
| it('should return false if root is only specified in one commit set', () => { |
| assert(!commitSetWithRoot().equals(oneCommitSet())); |
| assert(!oneCommitSet().equals(commitSetWithRoot())); |
| }); |
| |
| it('should return true when comparing two identical commit set', () => { |
| assert(oneCommitSet().equals(oneCommitSet())); |
| assert(anotherCommitSet().equals(anotherCommitSet())); |
| assert(commitSetWithPatch().equals(commitSetWithPatch())); |
| assert(commitSetWithAnotherPatch().equals(commitSetWithAnotherPatch())); |
| assert(oneMeasurementCommitSet().equals(oneMeasurementCommitSet())); |
| assert(commitSetWithRoot().equals(commitSetWithRoot())); |
| assert(anotherCommitSetWithRoot().equals(anotherCommitSetWithRoot())); |
| }); |
| |
| it('should be able to compare between CommitSet and MeasurementCommitSet', () => { |
| assert(oneCommitSet().equals(oneMeasurementCommitSet())); |
| assert(oneMeasurementCommitSet().equals(oneCommitSet())); |
| }); |
| }); |
| |
| describe('containsRootOrPatchOrOwnedCommit', () => { |
| it('should return false if commit does not contain root, patch or owned commit', () => { |
| assert.ok(!oneCommitSet().containsRootOrPatchOrOwnedCommit()); |
| assert.ok(!anotherCommitSet().containsRootOrPatchOrOwnedCommit()); |
| assert.ok(!commitSetWithAnotherWebKitCommit().containsRootOrPatchOrOwnedCommit()); |
| assert.ok(!commitSetWithSVNCommit().containsRootOrPatchOrOwnedCommit()); |
| assert.ok(!anotherCommitSetWithSVNCommit().containsRootOrPatchOrOwnedCommit()); |
| assert.ok(!commitSetWithGitCommit().containsRootOrPatchOrOwnedCommit()); |
| assert.ok(!anotherCommitSetWithGitCommit().containsRootOrPatchOrOwnedCommit()); |
| assert.ok(!commitSetWithTwoCommits().containsRootOrPatchOrOwnedCommit()); |
| assert.ok(!anotherCommitSetWithTwoCommits().containsRootOrPatchOrOwnedCommit()); |
| assert.ok(!oneMeasurementCommitSet().containsRootOrPatchOrOwnedCommit()); |
| }); |
| |
| it('should return true if commit contains root, patch or owned commit', () => { |
| assert.ok(commitSetWithPatch().containsRootOrPatchOrOwnedCommit()); |
| assert.ok(commitSetWithAnotherPatch().containsRootOrPatchOrOwnedCommit()); |
| assert.ok(commitSetWithRoot().containsRootOrPatchOrOwnedCommit()); |
| assert.ok(anotherCommitSetWithRoot().containsRootOrPatchOrOwnedCommit()); |
| assert.ok(commitSetWithTwoRoots().containsRootOrPatchOrOwnedCommit()); |
| assert.ok(commitSetWithAnotherCommitPatchAndRoot().containsRootOrPatchOrOwnedCommit()); |
| }); |
| }); |
| |
| describe('hasSameRepositories', () => { |
| it('should return true if two commit sets have same repositories', () => { |
| assert.ok(oneCommitSet().hasSameRepositories(anotherCommitSet())); |
| assert.ok(commitSetWithGitCommit().hasSameRepositories(anotherCommitSetWithGitCommit())); |
| assert.ok(oneCommitSet().hasSameRepositories(oneCommitSet())); |
| }); |
| |
| it('should return false if two commit sets have differen repositories', () => { |
| assert.ok(!commitSetWithGitCommit().hasSameRepositories(commitSetWithSVNCommit())); |
| assert.ok(!commitSetWithTwoCommits().hasSameRepositories(commitSetWithGitCommit())); |
| }); |
| }); |
| |
| describe('diff', () => { |
| it('should describe patch difference', () => { |
| assert.equal(CommitSet.diff(commitSetWithPatch(), commitSetWithAnotherPatch()), 'WebKit: patch.dat - patch.dat (2)'); |
| }); |
| |
| it('should describe root difference', () => { |
| assert.equal(CommitSet.diff(commitSetWithRoot(), anotherCommitSetWithRoot()), 'Roots: root.dat - root.dat (2)'); |
| assert.equal(CommitSet.diff(commitSetWithRoot(), commitSetWithTwoRoots()), 'Roots: none - root.dat'); |
| assert.equal(CommitSet.diff(commitSetWithTwoRoots(), oneCommitSet()), 'Roots: root.dat, root.dat (2) - none'); |
| }); |
| |
| it('should describe commit difference', () => { |
| assert.equal(CommitSet.diff(oneCommitSet(), commitSetWithAnotherWebKitCommit()), 'WebKit: webkit-commit-0 - webkit-commit-1'); |
| assert.equal(CommitSet.diff(commitSetWithSVNCommit(), anotherCommitSetWithSVNCommit()), 'WebKit: r12345-r45678'); |
| assert.equal(CommitSet.diff(commitSetWithGitCommit(), anotherCommitSetWithGitCommit()), 'WebKit-Git: 13a0590d34f2..2f8dd3321d4f'); |
| assert.equal(CommitSet.diff(commitSetWithTwoCommits(), anotherCommitSetWithTwoCommits()), 'WebKit: r12345-r45678 WebKit-Git: 13a0590d34f2..2f8dd3321d4f'); |
| }); |
| |
| it('should describe commit root and patch difference', () => { |
| assert.equal(CommitSet.diff(oneCommitSet(), commitSetWithAnotherCommitPatchAndRoot()), 'WebKit: webkit-commit-0 with none - webkit-commit-1 with patch.dat Roots: none - root.dat, root.dat (2)'); |
| }); |
| }); |
| |
| describe('revisionSetsFromCommitSets', () => { |
| it('should create revision sets from commit sets', () => { |
| assert.deepEqual(CommitSet.revisionSetsFromCommitSets([oneCommitSet(), commitSetWithRoot(), commitSetWithTwoRoots()]), |
| [{'11': { revision: 'webkit-commit-0', ownerRevision: null, patch: null}}, |
| {'11': { revision: 'webkit-commit-0', ownerRevision: null, patch: null}, customRoots: [456]}, |
| {'11': { revision: 'webkit-commit-0', ownerRevision: null, patch: null}, customRoots: [456, 458]}]); |
| }); |
| }); |
| |
| describe('commitsWithTestability', () => { |
| it('should return commits with testability', () => { |
| const commits = commitSetWithTestability().commitsWithTestability(); |
| assert.equal(commits.length, 1); |
| assert.equal(commits[0], commitWithTestability()); |
| }); |
| |
| it('should return empty list if no commit in commit set contains testability', () => { |
| const commits = commitSetWithTwoCommits().commitsWithTestability(); |
| assert.equal(commits.length, 0); |
| }); |
| }); |
| |
| describe('commits', () => { |
| it('should return all commits in commit set', () => { |
| assert.equal(commitSetWithTwoCommits().commits().length, 2); |
| }); |
| }); |
| }); |
| |
| describe('IntermediateCommitSet', () => { |
| MockRemoteAPI.inject(null, BrowserPrivilegedAPI); |
| MockModels.inject(); |
| |
| describe('setCommitForRepository', () => { |
| it('should allow set commit for owner repository', () => { |
| const commitSet = new IntermediateCommitSet(new CommitSet); |
| const commit = ownerCommit(); |
| commitSet.setCommitForRepository(MockModels.ownerRepository, commit); |
| assert.equal(commit, commitSet.commitForRepository(MockModels.ownerRepository)); |
| }); |
| |
| it('should allow set commit for owned repository', () => { |
| const commitSet = new IntermediateCommitSet(new CommitSet); |
| const commit = ownerCommit(); |
| |
| const fetchingPromise = commit.fetchOwnedCommits(); |
| const requests = MockRemoteAPI.requests; |
| assert.equal(requests.length, 1); |
| assert.equal(requests[0].url, '../api/commits/111/owned-commits?owner-revision=owner-commit-0'); |
| assert.equal(requests[0].method, 'GET'); |
| |
| requests[0].resolve({commits: [{ |
| id: 233, |
| repository: MockModels.ownedRepository.id(), |
| revision: '6f8b0dbbda95a440503b88db1dd03dad3a7b07fb', |
| time: +(new Date('2016-05-13T00:55:57.841344Z')), |
| }]}); |
| |
| return fetchingPromise.then(() => { |
| const ownedCommit = commit.ownedCommits()[0]; |
| commitSet.setCommitForRepository(MockModels.ownerRepository, commit); |
| commitSet.setCommitForRepository(MockModels.ownedRepository, ownedCommit); |
| assert.equal(commit, commitSet.commitForRepository(MockModels.ownerRepository)); |
| assert.equal(ownedCommit, commitSet.commitForRepository(MockModels.ownedRepository)); |
| assert.deepEqual(commitSet.repositories(), [MockModels.ownerRepository, MockModels.ownedRepository]); |
| }); |
| }); |
| }); |
| |
| describe('fetchCommitLogs', () => { |
| |
| it('should fetch CommitLog object with owned commits information', () => { |
| const commit = partialOwnerCommit(); |
| assert.equal(commit.ownsCommits(), null); |
| const owned = ownedCommit(); |
| |
| const commitSet = CommitSet.ensureSingleton('53246456', {revisionItems: [{commit}, {commit: owned, ownerCommit: commit}]}); |
| const intermediateCommitSet = new IntermediateCommitSet(commitSet); |
| const fetchingPromise = intermediateCommitSet.fetchCommitLogs(); |
| |
| const requests = MockRemoteAPI.requests; |
| assert.equal(requests.length, 2); |
| assert.equal(requests[0].url, '/api/commits/111/owner-commit-0?prefix-match=true'); |
| assert.equal(requests[0].method, 'GET'); |
| assert.equal(requests[1].url, '/api/commits/112/owned-commit-0?prefix-match=true'); |
| assert.equal(requests[1].method, 'GET'); |
| |
| requests[0].resolve({commits: [{ |
| id: 5, |
| repository: MockModels.ownerRepository.id(), |
| revision: 'owner-commit-0', |
| ownsCommits: true, |
| time: +(new Date('2016-05-13T00:55:57.841344Z')), |
| }]}); |
| requests[1].resolve({commits: [{ |
| id: 6, |
| repository: MockModels.ownedRepository.id(), |
| revision: 'owned-commit-0', |
| ownsCommits: false, |
| time: 1456932774000, |
| }]}); |
| |
| return MockRemoteAPI.waitForRequest().then(() => { |
| assert.equal(requests.length, 3); |
| assert.equal(requests[2].url, '../api/commits/111/owned-commits?owner-revision=owner-commit-0'); |
| assert.equal(requests[2].method, 'GET'); |
| |
| requests[2].resolve({commits: [{ |
| id: 6, |
| repository: MockModels.ownedRepository.id(), |
| revision: 'owned-commit-0', |
| ownsCommits: false, |
| time: 1456932774000, |
| }]}); |
| return fetchingPromise; |
| }).then(() => { |
| assert(commit.ownsCommits()); |
| assert.equal(commit.ownedCommits().length, 1); |
| assert.equal(commit.ownedCommits()[0], owned); |
| assert.equal(owned.ownerCommit(), commit); |
| assert.equal(owned.repository(), MockModels.ownedRepository); |
| assert.equal(intermediateCommitSet.commitForRepository(MockModels.ownedRepository), owned); |
| assert.equal(intermediateCommitSet.ownerCommitForRepository(MockModels.ownedRepository), commit); |
| assert.deepEqual(intermediateCommitSet.repositories(), [MockModels.ownerRepository, MockModels.ownedRepository]); |
| }); |
| }); |
| }); |
| |
| describe('updateRevisionForOwnerRepository', () => { |
| |
| it('should update CommitSet based on the latest invocation', () => { |
| const commitSet = new IntermediateCommitSet(new CommitSet); |
| const firstUpdatePromise = commitSet.updateRevisionForOwnerRepository(MockModels.webkit, 'webkit-commit-0'); |
| const secondUpdatePromise = commitSet.updateRevisionForOwnerRepository(MockModels.webkit, 'webkit-commit-1'); |
| const requests = MockRemoteAPI.requests; |
| |
| assert(requests.length, 2); |
| assert.equal(requests[0].url, '/api/commits/11/webkit-commit-0?prefix-match=true'); |
| assert.equal(requests[0].method, 'GET'); |
| assert.equal(requests[1].url, '/api/commits/11/webkit-commit-1?prefix-match=true'); |
| assert.equal(requests[1].method, 'GET'); |
| |
| requests[1].resolve({commits: [{ |
| id: 2018, |
| repository: MockModels.webkit.id(), |
| revision: 'webkit-commit-1', |
| ownsCommits: false, |
| time: 1456932774000, |
| }]}); |
| |
| let commit = null; |
| return secondUpdatePromise.then(() => { |
| commit = commitSet.commitForRepository(MockModels.webkit); |
| |
| requests[0].resolve({commits: [{ |
| id: 2017, |
| repository: MockModels.webkit.id(), |
| revision: 'webkit-commit-0', |
| ownsCommits: false, |
| time: 1456932773000, |
| }]}); |
| |
| assert.equal(commit.revision(), 'webkit-commit-1'); |
| assert.equal(commit.id(), 2018); |
| |
| return firstUpdatePromise; |
| }).then(() => { |
| const currentCommit = commitSet.commitForRepository(MockModels.webkit); |
| assert.equal(commit, currentCommit); |
| }); |
| }); |
| |
| }); |
| |
| describe('removeCommitForRepository', () => { |
| it('should remove owned commits when owner commit is removed', () => { |
| const commitSet = new IntermediateCommitSet(new CommitSet); |
| const commit = ownerCommit(); |
| |
| const fetchingPromise = commit.fetchOwnedCommits(); |
| const requests = MockRemoteAPI.requests; |
| assert.equal(requests.length, 1); |
| assert.equal(requests[0].url, '../api/commits/111/owned-commits?owner-revision=owner-commit-0'); |
| assert.equal(requests[0].method, 'GET'); |
| |
| requests[0].resolve({commits: [{ |
| id: 233, |
| repository: MockModels.ownedRepository.id(), |
| revision: '6f8b0dbbda95a440503b88db1dd03dad3a7b07fb', |
| ownsCommits: true |
| }]}); |
| |
| return fetchingPromise.then(() => { |
| commitSet.setCommitForRepository(MockModels.ownerRepository, commit); |
| commitSet.setCommitForRepository(MockModels.ownedRepository, commit.ownedCommits()[0]); |
| commitSet.removeCommitForRepository(MockModels.ownerRepository); |
| assert.deepEqual(commitSet.repositories(), []); |
| }); |
| }); |
| |
| it('should not remove owner commits when owned commit is removed', () => { |
| const commitSet = new IntermediateCommitSet(new CommitSet); |
| const commit = ownerCommit(); |
| |
| const fetchingPromise = commit.fetchOwnedCommits(); |
| const requests = MockRemoteAPI.requests; |
| assert.equal(requests.length, 1); |
| assert.equal(requests[0].url, '../api/commits/111/owned-commits?owner-revision=owner-commit-0'); |
| assert.equal(requests[0].method, 'GET'); |
| |
| requests[0].resolve({commits: [{ |
| id: 233, |
| repository: MockModels.ownedRepository.id(), |
| revision: '6f8b0dbbda95a440503b88db1dd03dad3a7b07fb', |
| time: +(new Date('2016-05-13T00:55:57.841344Z')), |
| }]}); |
| |
| return fetchingPromise.then(() => { |
| commitSet.setCommitForRepository(MockModels.ownerRepository, commit); |
| commitSet.setCommitForRepository(MockModels.ownedRepository, commit.ownedCommits()[0]); |
| commitSet.removeCommitForRepository(MockModels.ownedRepository); |
| assert.deepEqual(commitSet.repositories(), [MockModels.ownerRepository]); |
| }); |
| }); |
| |
| it('should not update commit set for repository if removeCommitForRepository called before updateRevisionForOwnerRepository finishes', () => { |
| const commitSet = new IntermediateCommitSet(new CommitSet); |
| const commit = webkitCommit(); |
| commitSet.setCommitForRepository(MockModels.webkit, commit); |
| const updatePromise = commitSet.updateRevisionForOwnerRepository(MockModels.webkit, 'webkit-commit-1'); |
| |
| commitSet.removeCommitForRepository(MockModels.webkit); |
| |
| const requests = MockRemoteAPI.requests; |
| assert.equal(requests[0].url, '/api/commits/11/webkit-commit-1?prefix-match=true'); |
| assert.equal(requests[0].method, 'GET'); |
| |
| requests[0].resolve({commits: [{ |
| id: 2018, |
| repository: MockModels.webkit.id(), |
| revision: 'webkit-commit-1', |
| ownsCommits: false, |
| time: 1456932774000, |
| }]}); |
| |
| return updatePromise.then(() => { |
| assert.deepEqual(commitSet.repositories(), []); |
| assert(!commitSet.commitForRepository(MockModels.webkit)); |
| }); |
| }); |
| }); |
| }); |
| |
| describe('CustomCommitSet', () => { |
| MockModels.inject(); |
| |
| describe('Test custom commit set without owned commit', () => { |
| it('should have right revision for a given repository', () => { |
| const commitSet = customCommitSetWithoutOwnedCommit(); |
| assert.equal(commitSet.revisionForRepository(MockModels.osx), '10.11.4 15E65'); |
| assert.equal(commitSet.revisionForRepository(MockModels.webkit), '200805'); |
| }); |
| |
| it('should have no patch for any repository', () => { |
| const commitSet = customCommitSetWithoutOwnedCommit(); |
| assert.equal(commitSet.patchForRepository(MockModels.osx), null); |
| assert.equal(commitSet.patchForRepository(MockModels.webkit), null); |
| }); |
| |
| it('should have no owner revision for a given repository', () => { |
| const commitSet = customCommitSetWithoutOwnedCommit(); |
| assert.equal(commitSet.ownerRevisionForRepository(MockModels.osx), null); |
| assert.equal(commitSet.ownerRevisionForRepository(MockModels.webkit), null); |
| }); |
| |
| it('should return all repositories in it', () => { |
| const commitSet = customCommitSetWithoutOwnedCommit(); |
| assert.deepEqual(commitSet.repositories(), [MockModels.osx, MockModels.webkit]); |
| }); |
| |
| it('should return only top level repositories', () => { |
| const commitSet = customCommitSetWithoutOwnedCommit(); |
| assert.deepEqual(commitSet.topLevelRepositories(), [MockModels.osx, MockModels.webkit]); |
| }); |
| }); |
| |
| describe('Test custom commit set with owned commit', () => { |
| it('should have right revision for a given repository', () => { |
| const commitSet = customCommitSetWithOwnedCommit(); |
| assert.equal(commitSet.revisionForRepository(MockModels.osx), '10.11.4 15E65'); |
| assert.equal(commitSet.revisionForRepository(MockModels.ownerRepository), 'OwnerRepository-r0'); |
| assert.equal(commitSet.revisionForRepository(MockModels.ownedRepository), 'OwnedRepository-r0'); |
| }); |
| |
| it('should have no patch for any repository', () => { |
| const commitSet = customCommitSetWithOwnedCommit(); |
| assert.equal(commitSet.patchForRepository(MockModels.osx), null); |
| assert.equal(commitSet.patchForRepository(MockModels.ownerRepository), null); |
| assert.equal(commitSet.patchForRepository(MockModels.ownedRepository), null); |
| }); |
| |
| it('should have right owner revision for an owned repository', () => { |
| const commitSet = customCommitSetWithOwnedCommit(); |
| assert.equal(commitSet.ownerRevisionForRepository(MockModels.osx), null); |
| assert.equal(commitSet.ownerRevisionForRepository(MockModels.ownerRepository), null); |
| assert.equal(commitSet.ownerRevisionForRepository(MockModels.ownedRepository), 'OwnerRepository-r0'); |
| }); |
| |
| it('should return all repositories in it', () => { |
| const commitSet = customCommitSetWithOwnedCommit(); |
| assert.deepEqual(commitSet.repositories(), [MockModels.osx, MockModels.ownerRepository, MockModels.ownedRepository]); |
| }); |
| |
| it('should return only top level repositories', () => { |
| const commitSet = customCommitSetWithOwnedCommit(); |
| assert.deepEqual(commitSet.topLevelRepositories(), [MockModels.osx, MockModels.ownerRepository]); |
| }); |
| }); |
| |
| describe('Test custom commit set with patch', () => { |
| it('should have right revision for a given repository', () => { |
| const commitSet = customCommitSetWithPatch(); |
| assert.equal(commitSet.revisionForRepository(MockModels.osx), '10.11.4 15E65'); |
| assert.equal(commitSet.revisionForRepository(MockModels.webkit), '200805'); |
| }); |
| |
| it('should have a patch for a repository with patch specified', () => { |
| const commitSet = customCommitSetWithPatch(); |
| assert.equal(commitSet.patchForRepository(MockModels.osx), null); |
| assert.deepEqual(commitSet.patchForRepository(MockModels.webkit), createPatch()); |
| }); |
| |
| it('should have no owner revision for a given repository', () => { |
| const commitSet = customCommitSetWithPatch(); |
| assert.equal(commitSet.ownerRevisionForRepository(MockModels.osx), null); |
| assert.equal(commitSet.ownerRevisionForRepository(MockModels.webkit), null); |
| }); |
| |
| it('should return all repositories in it', () => { |
| const commitSet = customCommitSetWithPatch(); |
| assert.deepEqual(commitSet.repositories(), [MockModels.osx, MockModels.webkit]); |
| }); |
| |
| it('should return only top level repositories', () => { |
| const commitSet = customCommitSetWithPatch(); |
| assert.deepEqual(commitSet.topLevelRepositories(), [MockModels.osx, MockModels.webkit]); |
| }); |
| }); |
| |
| describe('Test custom commit set with owned repository has same name as non-owned repository', () => { |
| it('should have right revision for a given repository', () => { |
| const commitSet = customCommitSetWithOwnedRepositoryHasSameNameAsNotOwnedRepository(); |
| assert.equal(commitSet.revisionForRepository(MockModels.osx), '10.11.4 15E65'); |
| assert.equal(commitSet.revisionForRepository(MockModels.webkit), '200805'); |
| assert.equal(commitSet.revisionForRepository(MockModels.ownedWebkit), 'owned-200805'); |
| }); |
| |
| it('should have no patch for any repository', () => { |
| const commitSet = customCommitSetWithOwnedRepositoryHasSameNameAsNotOwnedRepository(); |
| assert.equal(commitSet.patchForRepository(MockModels.osx), null); |
| assert.equal(commitSet.patchForRepository(MockModels.webkit), null); |
| assert.equal(commitSet.patchForRepository(MockModels.ownedWebkit), null); |
| }); |
| |
| it('should have right owner revision for an owned repository', () => { |
| const commitSet = customCommitSetWithOwnedRepositoryHasSameNameAsNotOwnedRepository(); |
| assert.equal(commitSet.ownerRevisionForRepository(MockModels.osx), null); |
| assert.equal(commitSet.ownerRevisionForRepository(MockModels.webkit), null); |
| assert.equal(commitSet.ownerRevisionForRepository(MockModels.ownedWebkit), '10.11.4 15E65'); |
| }); |
| |
| it('should return all repositories in it', () => { |
| const commitSet = customCommitSetWithOwnedRepositoryHasSameNameAsNotOwnedRepository(); |
| assert.deepEqual(commitSet.repositories(), [MockModels.osx, MockModels.webkit, MockModels.ownedWebkit]); |
| }); |
| |
| it('should return only top level repositories', () => { |
| const commitSet = customCommitSetWithOwnedRepositoryHasSameNameAsNotOwnedRepository(); |
| assert.deepEqual(commitSet.topLevelRepositories(), [MockModels.osx, MockModels.webkit]); |
| }); |
| }); |
| |
| describe('Test custom commit set equality function', () => { |
| it('should be equal to same custom commit set', () => { |
| assert.deepEqual(customCommitSetWithoutOwnedCommit(), customCommitSetWithoutOwnedCommit()); |
| assert.deepEqual(customCommitSetWithOwnedCommit(), customCommitSetWithOwnedCommit()); |
| assert.deepEqual(customCommitSetWithPatch(), customCommitSetWithPatch()); |
| assert.deepEqual(customCommitSetWithOwnedRepositoryHasSameNameAsNotOwnedRepository(), |
| customCommitSetWithOwnedRepositoryHasSameNameAsNotOwnedRepository()); |
| }); |
| |
| it('should not be equal even if non-owned revisions are the same', () => { |
| const commitSet0 = customCommitSetWithoutOwnedCommit(); |
| const commitSet1 = customCommitSetWithOwnedRepositoryHasSameNameAsNotOwnedRepository(); |
| assert.equal(commitSet0.equals(commitSet1), false); |
| }); |
| }); |
| |
| describe('Test custom commit set custom root operations', () => { |
| it('should return empty custom roots if no custom root specified', () => { |
| assert.deepEqual(customCommitSetWithoutOwnedCommit().customRoots(), []); |
| }); |
| |
| it('should return root if root is added into commit set', () => { |
| const commitSet = customCommitSetWithoutOwnedCommit(); |
| commitSet.addCustomRoot(createRoot()); |
| assert.deepEqual(commitSet.customRoots(), [createRoot()]); |
| }); |
| }); |
| }); |