 8cdc76ba4c
			
		
	
	8cdc76ba4c
	
	
	
		
			
			These tags are preserved by the Closure compiler and vulcanize in order to serve the license notices embedded in the outputs. In a standalone Gerrit server, these license are also covered in the LICENSES.txt served with the documentation. When serving PG assets from a CDN, it's less obvious what the corresponding LICENSES.txt file is, since the CDN is not directly linked to a running Gerrit server. Safer to embed the licenses in the assets themselves. Change-Id: Id1add1451fad1baa7916882a6bda02c326ccc988
		
			
				
	
	
		
			727 lines
		
	
	
		
			24 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			727 lines
		
	
	
		
			24 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
| <!DOCTYPE html>
 | |
| <!--
 | |
| @license
 | |
| Copyright (C) 2017 The Android Open Source Project
 | |
| 
 | |
| Licensed under the Apache License, Version 2.0 (the "License");
 | |
| you may not use this file except in compliance with the License.
 | |
| You may obtain a copy of the License at
 | |
| 
 | |
| http://www.apache.org/licenses/LICENSE-2.0
 | |
| 
 | |
| Unless required by applicable law or agreed to in writing, software
 | |
| distributed under the License is distributed on an "AS IS" BASIS,
 | |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | |
| See the License for the specific language governing permissions and
 | |
| limitations under the License.
 | |
| -->
 | |
| 
 | |
| <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1.0, user-scalable=yes">
 | |
| <title>gr-comment-api</title>
 | |
| 
 | |
| <script src="../../../bower_components/webcomponentsjs/webcomponents-lite.min.js"></script>
 | |
| <script src="../../../bower_components/web-component-tester/browser.js"></script>
 | |
| <link rel="import" href="../../../test/common-test-setup.html"/>
 | |
| 
 | |
| <link rel="import" href="./gr-comment-api.html">
 | |
| 
 | |
| <script>void(0);</script>
 | |
| 
 | |
| <test-fixture id="basic">
 | |
|   <template>
 | |
|     <gr-comment-api></gr-comment-api>
 | |
|   </template>
 | |
| </test-fixture>
 | |
| 
 | |
| <script>
 | |
|   suite('gr-comment-api tests', () => {
 | |
|     const PARENT = 'PARENT';
 | |
| 
 | |
|     let element;
 | |
|     let sandbox;
 | |
| 
 | |
|     setup(() => {
 | |
|       sandbox = sinon.sandbox.create();
 | |
|       element = fixture('basic');
 | |
|     });
 | |
| 
 | |
|     teardown(() => { sandbox.restore(); });
 | |
| 
 | |
|     test('loads logged-out', () => {
 | |
|       const changeNum = 1234;
 | |
| 
 | |
|       sandbox.stub(element.$.restAPI, 'getLoggedIn')
 | |
|           .returns(Promise.resolve(false));
 | |
|       sandbox.stub(element.$.restAPI, 'getDiffComments')
 | |
|           .returns(Promise.resolve({
 | |
|             'foo.c': [{id: '123', message: 'foo bar', in_reply_to: '321'}],
 | |
|           }));
 | |
|       sandbox.stub(element.$.restAPI, 'getDiffRobotComments')
 | |
|           .returns(Promise.resolve({'foo.c': [{id: '321', message: 'done'}]}));
 | |
|       sandbox.stub(element.$.restAPI, 'getDiffDrafts')
 | |
|           .returns(Promise.resolve({}));
 | |
| 
 | |
|       return element.loadAll(changeNum).then(() => {
 | |
|         assert.isTrue(element.$.restAPI.getDiffComments.calledWithExactly(
 | |
|             changeNum));
 | |
|         assert.isTrue(element.$.restAPI.getDiffRobotComments.calledWithExactly(
 | |
|             changeNum));
 | |
|         assert.isTrue(element.$.restAPI.getDiffDrafts.calledWithExactly(
 | |
|             changeNum));
 | |
|         assert.isOk(element._changeComments._comments);
 | |
|         assert.isOk(element._changeComments._robotComments);
 | |
|         assert.deepEqual(element._changeComments._drafts, {});
 | |
|       });
 | |
|     });
 | |
| 
 | |
|     test('loads logged-in', () => {
 | |
|       const changeNum = 1234;
 | |
| 
 | |
|       sandbox.stub(element.$.restAPI, 'getLoggedIn')
 | |
|           .returns(Promise.resolve(true));
 | |
|       sandbox.stub(element.$.restAPI, 'getDiffComments')
 | |
|           .returns(Promise.resolve({
 | |
|             'foo.c': [{id: '123', message: 'foo bar', in_reply_to: '321'}],
 | |
|           }));
 | |
|       sandbox.stub(element.$.restAPI, 'getDiffRobotComments')
 | |
|           .returns(Promise.resolve({'foo.c': [{id: '321', message: 'done'}]}));
 | |
|       sandbox.stub(element.$.restAPI, 'getDiffDrafts')
 | |
|           .returns(Promise.resolve({'foo.c': [{id: '555', message: 'ack'}]}));
 | |
| 
 | |
|       return element.loadAll(changeNum).then(() => {
 | |
|         assert.isTrue(element.$.restAPI.getDiffComments.calledWithExactly(
 | |
|             changeNum));
 | |
|         assert.isTrue(element.$.restAPI.getDiffRobotComments.calledWithExactly(
 | |
|             changeNum));
 | |
|         assert.isTrue(element.$.restAPI.getDiffDrafts.calledWithExactly(
 | |
|             changeNum));
 | |
|         assert.isOk(element._changeComments._comments);
 | |
|         assert.isOk(element._changeComments._robotComments);
 | |
|         assert.notDeepEqual(element._changeComments._drafts, {});
 | |
|       });
 | |
|     });
 | |
| 
 | |
|     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({}));
 | |
|       });
 | |
| 
 | |
|       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();
 | |
|         });
 | |
|       });
 | |
| 
 | |
|       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();
 | |
|         });
 | |
|       });
 | |
|     });
 | |
| 
 | |
|     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();
 | |
|         });
 | |
|       });
 | |
| 
 | |
|       test('_isInBaseOfPatchRange', () => {
 | |
|         const comment = {patch_set: 1};
 | |
|         const patchRange = {basePatchNum: 1, patchNum: 2};
 | |
|         assert.isTrue(element._changeComments._isInBaseOfPatchRange(comment,
 | |
|             patchRange));
 | |
| 
 | |
|         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('_isInRevisionOfPatchRange', () => {
 | |
|         const comment = {patch_set: 123};
 | |
|         const patchRange = {basePatchNum: 122, patchNum: 124};
 | |
|         assert.isFalse(element._changeComments._isInRevisionOfPatchRange(
 | |
|             comment, patchRange));
 | |
| 
 | |
|         patchRange.patchNum = 123;
 | |
|         assert.isTrue(element._changeComments._isInRevisionOfPatchRange(
 | |
|             comment, patchRange));
 | |
| 
 | |
|         comment.side = PARENT;
 | |
|         assert.isFalse(element._changeComments._isInRevisionOfPatchRange(
 | |
|             comment, patchRange));
 | |
|       });
 | |
| 
 | |
|       test('_isInPatchRange', () => {
 | |
|         const patchRange1 = {basePatchNum: 122, patchNum: 124};
 | |
|         const patchRange2 = {basePatchNum: 123, patchNum: 125};
 | |
|         const patchRange3 = {basePatchNum: 124, patchNum: 125};
 | |
| 
 | |
|         const isInBasePatchStub = sandbox.stub(element._changeComments,
 | |
|             '_isInBaseOfPatchRange');
 | |
|         const isInRevisionPatchStub = sandbox.stub(element._changeComments,
 | |
|             '_isInRevisionOfPatchRange');
 | |
| 
 | |
|         isInBasePatchStub.withArgs({}, patchRange1).returns(true);
 | |
|         isInBasePatchStub.withArgs({}, patchRange2).returns(false);
 | |
|         isInBasePatchStub.withArgs({}, patchRange3).returns(false);
 | |
| 
 | |
|         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);
 | |
|         });
 | |
|       });
 | |
|     });
 | |
|   });
 | |
| </script>
 |