diff options
Diffstat (limited to 'polygerrit-ui/app/elements/diff/gr-comment-api/gr-comment-api_test.html')
-rw-r--r-- | polygerrit-ui/app/elements/diff/gr-comment-api/gr-comment-api_test.html | 694 |
1 files changed, 612 insertions, 82 deletions
diff --git a/polygerrit-ui/app/elements/diff/gr-comment-api/gr-comment-api_test.html b/polygerrit-ui/app/elements/diff/gr-comment-api/gr-comment-api_test.html index 09403a4534..1e53a14b1f 100644 --- a/polygerrit-ui/app/elements/diff/gr-comment-api/gr-comment-api_test.html +++ b/polygerrit-ui/app/elements/diff/gr-comment-api/gr-comment-api_test.html @@ -1,5 +1,6 @@ <!DOCTYPE html> <!-- +@license Copyright (C) 2017 The Android Open Source Project Licensed under the Apache License, Version 2.0 (the "License"); @@ -67,9 +68,9 @@ limitations under the License. changeNum)); assert.isTrue(element.$.restAPI.getDiffDrafts.calledWithExactly( changeNum)); - assert.isOk(element._comments); - assert.isOk(element._robotComments); - assert.deepEqual(element._drafts, {}); + assert.isOk(element._changeComments._comments); + assert.isOk(element._changeComments._robotComments); + assert.deepEqual(element._changeComments._drafts, {}); }); }); @@ -94,102 +95,631 @@ limitations under the License. changeNum)); assert.isTrue(element.$.restAPI.getDiffDrafts.calledWithExactly( changeNum)); - assert.isOk(element._comments); - assert.isOk(element._robotComments); - assert.notDeepEqual(element._drafts, {}); + assert.isOk(element._changeComments._comments); + assert.isOk(element._changeComments._robotComments); + assert.notDeepEqual(element._changeComments._drafts, {}); }); }); - test('_isInBaseOfPatchRange', () => { - const comment = {patch_set: 1}; - const patchRange = {basePatchNum: 1, patchNum: 2}; - assert.isTrue(element._isInBaseOfPatchRange(comment, patchRange)); - - patchRange.basePatchNum = PARENT; - assert.isFalse(element._isInBaseOfPatchRange(comment, patchRange)); + suite('reloadDrafts', () => { + let commentStub; + let robotCommentStub; + let draftStub; + setup(() => { + commentStub = sandbox.stub(element.$.restAPI, 'getDiffComments') + .returns(Promise.resolve({})); + robotCommentStub = sandbox.stub(element.$.restAPI, + 'getDiffRobotComments').returns(Promise.resolve({})); + draftStub = sandbox.stub(element.$.restAPI, 'getDiffDrafts') + .returns(Promise.resolve({})); + }); - comment.side = PARENT; - assert.isFalse(element._isInBaseOfPatchRange(comment, patchRange)); + test('without loadAll first', done => { + assert.isNotOk(element._changeComments); + sandbox.spy(element, 'loadAll'); + element.reloadDrafts().then(() => { + assert.isTrue(element.loadAll.called); + assert.isOk(element._changeComments); + assert.equal(commentStub.callCount, 1); + assert.equal(robotCommentStub.callCount, 1); + assert.equal(draftStub.callCount, 1); + done(); + }); + }); - comment.patch_set = 2; - assert.isTrue(element._isInBaseOfPatchRange(comment, patchRange)); + test('with loadAll first', done => { + assert.isNotOk(element._changeComments); + element.loadAll().then(() => { + assert.isOk(element._changeComments); + assert.equal(commentStub.callCount, 1); + assert.equal(robotCommentStub.callCount, 1); + assert.equal(draftStub.callCount, 1); + return element.reloadDrafts(); + }).then(() => { + assert.isOk(element._changeComments); + assert.equal(commentStub.callCount, 1); + assert.equal(robotCommentStub.callCount, 1); + assert.equal(draftStub.callCount, 2); + done(); + }); + }); }); - test('_isInRevisionOfPatchRange', () => { - const comment = {patch_set: 123}; - const patchRange = {basePatchNum: 122, patchNum: 124}; - assert.isFalse(element._isInRevisionOfPatchRange(comment, patchRange)); - - patchRange.patchNum = 123; - assert.isTrue(element._isInRevisionOfPatchRange(comment, patchRange)); + suite('_changeComment methods', () => { + setup(done => { + const changeNum = 1234; + stub('gr-rest-api-interface', { + getDiffComments() { return Promise.resolve({}); }, + getDiffRobotComments() { return Promise.resolve({}); }, + getDiffDrafts() { return Promise.resolve({}); }, + }); + element.loadAll(changeNum).then(() => { + done(); + }); + }); - comment.side = PARENT; - assert.isFalse(element._isInRevisionOfPatchRange(comment, patchRange)); - }); + test('_isInBaseOfPatchRange', () => { + const comment = {patch_set: 1}; + const patchRange = {basePatchNum: 1, patchNum: 2}; + assert.isTrue(element._changeComments._isInBaseOfPatchRange(comment, + patchRange)); - suite('comment ranges and paths', () => { - setup(() => { - element._changeNum = 1234; - element._drafts = {}; - element._robotComments = {}; - element._comments = { - 'file/one': [ - {patch_set: 2, side: PARENT}, - {patch_set: 2}, - ], - 'file/two': [ - {patch_set: 2}, - {patch_set: 3}, - ], - 'file/three': [ - {patch_set: 2, side: PARENT}, - {patch_set: 3}, - ], - }; + patchRange.basePatchNum = PARENT; + assert.isFalse(element._changeComments._isInBaseOfPatchRange(comment, + patchRange)); + + comment.side = PARENT; + assert.isFalse(element._changeComments._isInBaseOfPatchRange(comment, + patchRange)); + + comment.patch_set = 2; + assert.isTrue(element._changeComments._isInBaseOfPatchRange(comment, + patchRange)); + + patchRange.basePatchNum = -2; + comment.side = PARENT; + comment.parent = 1; + assert.isFalse(element._changeComments._isInBaseOfPatchRange(comment, + patchRange)); + + comment.parent = 2; + assert.isTrue(element._changeComments._isInBaseOfPatchRange(comment, + patchRange)); }); - test('getPaths', () => { - const patchRange = {basePatchNum: 1, patchNum: 4}; - let paths = element.getPaths(patchRange); - assert.equal(Object.keys(paths).length, 0); + test('_isInRevisionOfPatchRange', () => { + const comment = {patch_set: 123}; + const patchRange = {basePatchNum: 122, patchNum: 124}; + assert.isFalse(element._changeComments._isInRevisionOfPatchRange( + comment, patchRange)); - patchRange.basePatchNum = PARENT; - patchRange.patchNum = 3; - paths = element.getPaths(patchRange); - assert.notProperty(paths, 'file/one'); - assert.property(paths, 'file/two'); - assert.property(paths, 'file/three'); - - patchRange.patchNum = 2; - paths = element.getPaths(patchRange); - assert.property(paths, 'file/one'); - assert.property(paths, 'file/two'); - assert.property(paths, 'file/three'); + patchRange.patchNum = 123; + assert.isTrue(element._changeComments._isInRevisionOfPatchRange( + comment, patchRange)); + + comment.side = PARENT; + assert.isFalse(element._changeComments._isInRevisionOfPatchRange( + comment, patchRange)); }); - test('getCommentsForPath', () => { - const patchRange = {basePatchNum: 1, patchNum: 3}; - let path = 'file/one'; - let comments = element.getCommentsForPath(path, patchRange); - assert.equal(comments.meta.changeNum, 1234); - assert.equal(comments.left.length, 0); - assert.equal(comments.right.length, 0); + test('_isInPatchRange', () => { + const patchRange1 = {basePatchNum: 122, patchNum: 124}; + const patchRange2 = {basePatchNum: 123, patchNum: 125}; + const patchRange3 = {basePatchNum: 124, patchNum: 125}; - path = 'file/two'; - comments = element.getCommentsForPath(path, patchRange); - assert.equal(comments.left.length, 0); - assert.equal(comments.right.length, 1); + const isInBasePatchStub = sandbox.stub(element._changeComments, + '_isInBaseOfPatchRange'); + const isInRevisionPatchStub = sandbox.stub(element._changeComments, + '_isInRevisionOfPatchRange'); - patchRange.basePatchNum = 2; - comments = element.getCommentsForPath(path, patchRange); - assert.equal(comments.left.length, 1); - assert.equal(comments.right.length, 1); + isInBasePatchStub.withArgs({}, patchRange1).returns(true); + isInBasePatchStub.withArgs({}, patchRange2).returns(false); + isInBasePatchStub.withArgs({}, patchRange3).returns(false); - patchRange.basePatchNum = PARENT; - path = 'file/three'; - comments = element.getCommentsForPath(path, patchRange); - assert.equal(comments.left.length, 0); - assert.equal(comments.right.length, 1); + isInRevisionPatchStub.withArgs({}, patchRange1).returns(false); + isInRevisionPatchStub.withArgs({}, patchRange2).returns(true); + isInRevisionPatchStub.withArgs({}, patchRange3).returns(false); + + assert.isTrue(element._changeComments._isInPatchRange({}, patchRange1)); + assert.isTrue(element._changeComments._isInPatchRange({}, patchRange2)); + assert.isFalse(element._changeComments._isInPatchRange({}, + patchRange3)); + }); + + suite('comment ranges and paths', () => { + function makeTime(mins) { + return `2013-02-26 15:0${mins}:43.986000000`; + } + + setup(() => { + element._changeComments._drafts = { + 'file/one': [ + { + id: 11, + patch_set: 2, + side: PARENT, + line: 1, + updated: makeTime(3), + }, + { + id: 12, + in_reply_to: 2, + patch_set: 2, + line: 1, + updated: makeTime(3), + }, + ], + 'file/two': [ + { + id: 5, + patch_set: 3, + line: 1, + updated: makeTime(3), + }, + ], + }; + element._changeComments._robotComments = { + 'file/one': [ + { + id: 1, + patch_set: 2, + side: PARENT, + line: 1, + updated: makeTime(1), + range: { + start_line: 1, + start_character: 2, + end_line: 2, + end_character: 2, + }, + }, { + id: 2, + in_reply_to: 4, + patch_set: 2, + unresolved: true, + line: 1, + updated: makeTime(2), + }, + ], + }; + element._changeComments._comments = { + 'file/one': [ + {id: 3, patch_set: 2, side: PARENT, line: 2, updated: makeTime(1)}, + {id: 4, patch_set: 2, line: 1, updated: makeTime(1)}, + ], + 'file/two': [ + {id: 5, patch_set: 2, line: 2, updated: makeTime(1)}, + {id: 6, patch_set: 3, line: 2, updated: makeTime(1)}, + ], + 'file/three': [ + { + id: 7, + patch_set: 2, + side: PARENT, + unresolved: true, + line: 1, + updated: makeTime(1), + }, + {id: 8, patch_set: 3, line: 1, updated: makeTime(1)}, + ], + 'file/four': [ + {id: 9, patch_set: 5, side: PARENT, line: 1, updated: makeTime(1)}, + {id: 10, patch_set: 5, line: 1, updated: makeTime(1)}, + ], + }; + }); + + test('getPaths', () => { + const patchRange = {basePatchNum: 1, patchNum: 4}; + let paths = element._changeComments.getPaths(patchRange); + assert.equal(Object.keys(paths).length, 0); + + patchRange.basePatchNum = PARENT; + patchRange.patchNum = 3; + paths = element._changeComments.getPaths(patchRange); + assert.notProperty(paths, 'file/one'); + assert.property(paths, 'file/two'); + assert.property(paths, 'file/three'); + assert.notProperty(paths, 'file/four'); + + patchRange.patchNum = 2; + paths = element._changeComments.getPaths(patchRange); + assert.property(paths, 'file/one'); + assert.property(paths, 'file/two'); + assert.property(paths, 'file/three'); + assert.notProperty(paths, 'file/four'); + + paths = element._changeComments.getPaths(); + assert.property(paths, 'file/one'); + assert.property(paths, 'file/two'); + assert.property(paths, 'file/three'); + assert.property(paths, 'file/four'); + }); + + test('getCommentsBySideForPath', () => { + const patchRange = {basePatchNum: 1, patchNum: 3}; + let path = 'file/one'; + let comments = element._changeComments.getCommentsBySideForPath(path, + patchRange); + assert.equal(comments.meta.changeNum, 1234); + assert.equal(comments.left.length, 0); + assert.equal(comments.right.length, 0); + + path = 'file/two'; + comments = element._changeComments.getCommentsBySideForPath(path, + patchRange); + assert.equal(comments.left.length, 0); + assert.equal(comments.right.length, 2); + + patchRange.basePatchNum = 2; + comments = element._changeComments.getCommentsBySideForPath(path, + patchRange); + assert.equal(comments.left.length, 1); + assert.equal(comments.right.length, 2); + + patchRange.basePatchNum = PARENT; + path = 'file/three'; + comments = element._changeComments.getCommentsBySideForPath(path, + patchRange); + assert.equal(comments.left.length, 0); + assert.equal(comments.right.length, 1); + }); + + test('getAllCommentsForPath', () => { + let path = 'file/one'; + let comments = element._changeComments.getAllCommentsForPath(path); + assert.deepEqual(comments.length, 4); + path = 'file/two'; + comments = element._changeComments.getAllCommentsForPath(path, 2); + assert.deepEqual(comments.length, 1); + }); + + test('getAllDraftsForPath', () => { + const path = 'file/one'; + const drafts = element._changeComments.getAllDraftsForPath(path); + assert.deepEqual(drafts.length, 2); + }); + + test('computeUnresolvedNum', () => { + assert.equal(element._changeComments + .computeUnresolvedNum(2, 'file/one'), 0); + assert.equal(element._changeComments + .computeUnresolvedNum(1, 'file/one'), 0); + assert.equal(element._changeComments + .computeUnresolvedNum(2, 'file/three'), 1); + }); + + test('computeUnresolvedNum w/ non-linear thread', () => { + element._changeComments._drafts = {}; + element._changeComments._robotComments = {}; + element._changeComments._comments = { + path: [{ + id: '9c6ba3c6_28b7d467', + patch_set: 1, + updated: '2018-02-28 14:41:13.000000000', + unresolved: true, + }, { + id: '3df7b331_0bead405', + patch_set: 1, + in_reply_to: '1c346623_ab85d14a', + updated: '2018-02-28 23:07:55.000000000', + unresolved: false, + }, { + id: '6153dce6_69958d1e', + patch_set: 1, + in_reply_to: '9c6ba3c6_28b7d467', + updated: '2018-02-28 17:11:31.000000000', + unresolved: true, + }, { + id: '1c346623_ab85d14a', + patch_set: 1, + in_reply_to: '9c6ba3c6_28b7d467', + updated: '2018-02-28 23:01:39.000000000', + unresolved: false, + }], + }; + assert.equal( + element._changeComments.computeUnresolvedNum(1, 'path'), 0); + }); + + test('computeCommentCount', () => { + assert.equal(element._changeComments + .computeCommentCount(2, 'file/one'), 4); + assert.equal(element._changeComments + .computeCommentCount(1, 'file/one'), 0); + assert.equal(element._changeComments + .computeCommentCount(2, 'file/three'), 1); + }); + + test('computeDraftCount', () => { + assert.equal(element._changeComments + .computeDraftCount(2, 'file/one'), 2); + assert.equal(element._changeComments + .computeDraftCount(1, 'file/one'), 0); + assert.equal(element._changeComments + .computeDraftCount(2, 'file/three'), 0); + assert.equal(element._changeComments + .computeDraftCount(), 3); + }); + + test('getAllPublishedComments', () => { + let publishedComments = element._changeComments + .getAllPublishedComments(); + assert.equal(Object.keys(publishedComments).length, 4); + assert.equal(Object.keys(publishedComments[['file/one']]).length, 4); + assert.equal(Object.keys(publishedComments[['file/two']]).length, 2); + publishedComments = element._changeComments + .getAllPublishedComments(2); + assert.equal(Object.keys(publishedComments[['file/one']]).length, 4); + assert.equal(Object.keys(publishedComments[['file/two']]).length, 1); + }); + + test('getAllComments', () => { + let comments = element._changeComments.getAllComments(); + assert.equal(Object.keys(comments).length, 4); + assert.equal(Object.keys(comments[['file/one']]).length, 4); + assert.equal(Object.keys(comments[['file/two']]).length, 2); + comments = element._changeComments.getAllComments(false, 2); + assert.equal(Object.keys(comments).length, 4); + assert.equal(Object.keys(comments[['file/one']]).length, 4); + assert.equal(Object.keys(comments[['file/two']]).length, 1); + // Include drafts + comments = element._changeComments.getAllComments(true); + assert.equal(Object.keys(comments).length, 4); + assert.equal(Object.keys(comments[['file/one']]).length, 6); + assert.equal(Object.keys(comments[['file/two']]).length, 3); + comments = element._changeComments.getAllComments(true, 2); + assert.equal(Object.keys(comments).length, 4); + assert.equal(Object.keys(comments[['file/one']]).length, 6); + assert.equal(Object.keys(comments[['file/two']]).length, 1); + }); + + test('computeAllThreads', () => { + const expectedThreads = [ + { + comments: [ + { + id: 5, + patch_set: 2, + line: 2, + __path: 'file/two', + updated: '2013-02-26 15:01:43.986000000', + }, + ], + patchNum: 2, + path: 'file/two', + line: 2, + rootId: 5, + }, { + comments: [ + { + id: 3, + patch_set: 2, + side: 'PARENT', + line: 2, + __path: 'file/one', + updated: '2013-02-26 15:01:43.986000000', + }, + ], + commentSide: 'PARENT', + patchNum: 2, + path: 'file/one', + line: 2, + rootId: 3, + }, { + comments: [ + { + id: 1, + patch_set: 2, + side: 'PARENT', + line: 1, + updated: '2013-02-26 15:01:43.986000000', + range: { + start_line: 1, + start_character: 2, + end_line: 2, + end_character: 2, + }, + __path: 'file/one', + }, + ], + commentSide: 'PARENT', + patchNum: 2, + path: 'file/one', + line: 1, + rootId: 1, + }, { + comments: [ + { + id: 9, + patch_set: 5, + side: 'PARENT', + line: 1, + __path: 'file/four', + updated: '2013-02-26 15:01:43.986000000', + }, + ], + commentSide: 'PARENT', + patchNum: 5, + path: 'file/four', + line: 1, + rootId: 9, + }, { + comments: [ + { + id: 8, + patch_set: 3, + line: 1, + __path: 'file/three', + updated: '2013-02-26 15:01:43.986000000', + }, + ], + patchNum: 3, + path: 'file/three', + line: 1, + rootId: 8, + }, { + comments: [ + { + id: 7, + patch_set: 2, + side: 'PARENT', + unresolved: true, + line: 1, + __path: 'file/three', + updated: '2013-02-26 15:01:43.986000000', + }, + ], + commentSide: 'PARENT', + patchNum: 2, + path: 'file/three', + line: 1, + rootId: 7, + }, { + comments: [ + { + id: 4, + patch_set: 2, + line: 1, + __path: 'file/one', + updated: '2013-02-26 15:01:43.986000000', + }, + { + id: 2, + in_reply_to: 4, + patch_set: 2, + unresolved: true, + line: 1, + __path: 'file/one', + updated: '2013-02-26 15:02:43.986000000', + }, + { + id: 12, + in_reply_to: 2, + patch_set: 2, + line: 1, + __path: 'file/one', + __draft: true, + updated: '2013-02-26 15:03:43.986000000', + }, + ], + patchNum: 2, + path: 'file/one', + line: 1, + rootId: 4, + }, { + comments: [ + { + id: 6, + patch_set: 3, + line: 2, + __path: 'file/two', + updated: '2013-02-26 15:01:43.986000000', + }, + ], + patchNum: 3, + path: 'file/two', + line: 2, + rootId: 6, + }, { + comments: [ + { + id: 10, + patch_set: 5, + line: 1, + __path: 'file/four', + updated: '2013-02-26 15:01:43.986000000', + }, + ], + rootId: 10, + patchNum: 5, + path: 'file/four', + line: 1, + }, { + comments: [ + { + id: 5, + patch_set: 3, + line: 1, + __path: 'file/two', + __draft: true, + updated: '2013-02-26 15:03:43.986000000', + }, + ], + rootId: 5, + patchNum: 3, + path: 'file/two', + line: 1, + }, { + comments: [ + { + id: 11, + patch_set: 2, + side: 'PARENT', + line: 1, + __path: 'file/one', + __draft: true, + updated: '2013-02-26 15:03:43.986000000', + }, + ], + rootId: 11, + commentSide: 'PARENT', + patchNum: 2, + path: 'file/one', + line: 1, + }, + ]; + const threads = element._changeComments.getAllThreadsForChange(); + assert.deepEqual(threads, expectedThreads); + }); + + test('getCommentsForThreadGroup', () => { + let expectedComments = [ + { + __path: 'file/one', + id: 4, + patch_set: 2, + line: 1, + updated: '2013-02-26 15:01:43.986000000', + }, + { + __path: 'file/one', + id: 2, + in_reply_to: 4, + patch_set: 2, + unresolved: true, + line: 1, + updated: '2013-02-26 15:02:43.986000000', + }, + { + __path: 'file/one', + __draft: true, + id: 12, + in_reply_to: 2, + patch_set: 2, + line: 1, + updated: '2013-02-26 15:03:43.986000000', + }, + ]; + assert.deepEqual(element._changeComments.getCommentsForThread(4), + expectedComments); + + expectedComments = [{ + id: 11, + patch_set: 2, + side: 'PARENT', + line: 1, + __path: 'file/one', + __draft: true, + updated: '2013-02-26 15:03:43.986000000', + }]; + + assert.deepEqual(element._changeComments.getCommentsForThread(11), + expectedComments); + + assert.deepEqual(element._changeComments.getCommentsForThread(1000), + null); + }); }); }); }); |