| <!DOCTYPE html> |
| <!-- |
| 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-diff-comment-thread-group</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"/> |
| <script src="../../../scripts/util.js"></script> |
| |
| <link rel="import" href="gr-diff-comment-thread-group.html"> |
| |
| <script>void(0);</script> |
| |
| <test-fixture id="basic"> |
| <template> |
| <gr-diff-comment-thread-group></gr-diff-comment-thread-group> |
| </template> |
| </test-fixture> |
| |
| <script> |
| suite('gr-diff-comment-thread-group tests', () => { |
| let element; |
| let sandbox; |
| |
| setup(() => { |
| sandbox = sinon.sandbox.create(); |
| stub('gr-rest-api-interface', { |
| getLoggedIn() { return Promise.resolve(false); }, |
| }); |
| element = fixture('basic'); |
| }); |
| |
| teardown(() => { |
| sandbox.restore(); |
| }); |
| |
| test('_getThreads', () => { |
| element.patchForNewThreads = 3; |
| const comments = [ |
| { |
| id: 'sallys_confession', |
| message: 'i like you, jack', |
| updated: '2015-12-23 15:00:20.396000000', |
| __commentSide: 'left', |
| }, { |
| id: 'jacks_reply', |
| message: 'i like you, too', |
| updated: '2015-12-24 15:01:20.396000000', |
| __commentSide: 'left', |
| in_reply_to: 'sallys_confession', |
| }, |
| { |
| id: 'new_draft', |
| message: 'i do not like either of you', |
| __commentSide: 'left', |
| __draft: true, |
| updated: '2015-12-20 15:01:20.396000000', |
| }, |
| ]; |
| |
| let expectedThreadGroups = [ |
| { |
| start_datetime: '2015-12-23 15:00:20.396000000', |
| commentSide: 'left', |
| comments: [{ |
| id: 'sallys_confession', |
| message: 'i like you, jack', |
| updated: '2015-12-23 15:00:20.396000000', |
| __commentSide: 'left', |
| }, { |
| id: 'jacks_reply', |
| message: 'i like you, too', |
| updated: '2015-12-24 15:01:20.396000000', |
| __commentSide: 'left', |
| in_reply_to: 'sallys_confession', |
| }], |
| rootId: 'sallys_confession', |
| patchNum: 3, |
| }, |
| { |
| start_datetime: '2015-12-20 15:01:20.396000000', |
| commentSide: 'left', |
| comments: [ |
| { |
| id: 'new_draft', |
| message: 'i do not like either of you', |
| __commentSide: 'left', |
| __draft: true, |
| updated: '2015-12-20 15:01:20.396000000', |
| }, |
| ], |
| rootId: 'new_draft', |
| patchNum: 3, |
| }, |
| ]; |
| |
| assert.deepEqual(element._getThreads(comments), expectedThreadGroups); |
| |
| // Patch num should get inherited from comment rather |
| comments.push({ |
| id: 'betsys_confession', |
| message: 'i like you, jack', |
| updated: '2015-12-24 15:00:10.396000000', |
| range: { |
| start_line: 1, |
| start_character: 1, |
| end_line: 1, |
| end_character: 2, |
| }, |
| __commentSide: 'left', |
| }); |
| |
| expectedThreadGroups = [ |
| { |
| start_datetime: '2015-12-23 15:00:20.396000000', |
| commentSide: 'left', |
| comments: [{ |
| id: 'sallys_confession', |
| message: 'i like you, jack', |
| updated: '2015-12-23 15:00:20.396000000', |
| __commentSide: 'left', |
| }, { |
| id: 'jacks_reply', |
| in_reply_to: 'sallys_confession', |
| message: 'i like you, too', |
| updated: '2015-12-24 15:01:20.396000000', |
| __commentSide: 'left', |
| }], |
| patchNum: 3, |
| rootId: 'sallys_confession', |
| }, |
| { |
| start_datetime: '2015-12-24 15:00:10.396000000', |
| commentSide: 'left', |
| comments: [{ |
| id: 'betsys_confession', |
| message: 'i like you, jack', |
| updated: '2015-12-24 15:00:10.396000000', |
| range: { |
| start_line: 1, |
| start_character: 1, |
| end_line: 1, |
| end_character: 2, |
| }, |
| __commentSide: 'left', |
| }], |
| patchNum: 3, |
| rootId: 'betsys_confession', |
| range: { |
| start_line: 1, |
| start_character: 1, |
| end_line: 1, |
| end_character: 2, |
| }, |
| }, |
| { |
| start_datetime: '2015-12-20 15:01:20.396000000', |
| commentSide: 'left', |
| comments: [ |
| { |
| id: 'new_draft', |
| message: 'i do not like either of you', |
| __commentSide: 'left', |
| __draft: true, |
| updated: '2015-12-20 15:01:20.396000000', |
| }, |
| ], |
| rootId: 'new_draft', |
| patchNum: 3, |
| }, |
| ]; |
| |
| assert.deepEqual(element._getThreads(comments), expectedThreadGroups); |
| }); |
| |
| test('getThread', () => { |
| const range = { |
| start_line: 1, |
| start_character: 1, |
| end_line: 1, |
| end_character: 2, |
| }; |
| element.comments = [ |
| { |
| id: 'sallys_confession', |
| message: 'i like you, jack', |
| updated: '2015-12-23 15:00:20.396000000', |
| __commentSide: 'left', |
| }, { |
| id: 'jacks_reply', |
| message: 'i like you, too', |
| updated: '2015-12-24 15:01:20.396000000', |
| __commentSide: 'left', |
| in_reply_to: 'sallys_confession', |
| }, { |
| id: 'new_draft', |
| message: 'i do not like either of you', |
| __commentSide: 'left', |
| __draft: true, |
| in_reply_to: 'sallys_confession', |
| updated: '2015-12-20 15:01:20.396000000', |
| }, { |
| id: 'right_side_comment', |
| message: 'right side comment', |
| __commentSide: 'right', |
| __draft: true, |
| updated: '2015-12-20 15:01:20.396000000', |
| }, { |
| id: 'betsys_confession', |
| message: 'i like you more, jack', |
| updated: '2015-12-24 15:00:10.396000000', |
| range, |
| __commentSide: 'left', |
| }, |
| ]; |
| |
| flushAsynchronousOperations(); |
| assert.deepEqual(element.getThread('right').rootId, 'right_side_comment'); |
| assert.deepEqual(element.getThread('right').comments.length, 1); |
| assert.deepEqual(element.getThread('left').rootId, 'sallys_confession'); |
| assert.deepEqual(element.getThread('left').comments.length, 3); |
| assert.deepEqual(element.getThread('left', range).rootId, |
| 'betsys_confession'); |
| assert.deepEqual(element.getThread('left', range).comments.length, 1); |
| }); |
| |
| test('multiple comments at same location but not threaded', () => { |
| element.patchForNewThreads = 3; |
| const comments = [ |
| { |
| id: 'sallys_confession', |
| message: 'i like you, jack', |
| updated: '2015-12-23 15:00:20.396000000', |
| __commentSide: 'left', |
| }, { |
| id: 'jacks_reply', |
| message: 'i like you, too', |
| updated: '2015-12-24 15:01:20.396000000', |
| __commentSide: 'left', |
| }, |
| ]; |
| assert.equal(element._getThreads(comments).length, 2); |
| }); |
| |
| test('_sortByDate', () => { |
| let threadGroups = [ |
| { |
| start_datetime: '2015-12-23 15:00:20.396000000', |
| comments: [], |
| locationRange: 'line', |
| }, |
| { |
| start_datetime: '2015-12-22 15:00:10.396000000', |
| comments: [], |
| locationRange: 'range-1-1-1-2', |
| }, |
| ]; |
| |
| let expectedResult = [ |
| { |
| start_datetime: '2015-12-22 15:00:10.396000000', |
| comments: [], |
| locationRange: 'range-1-1-1-2', |
| }, { |
| start_datetime: '2015-12-23 15:00:20.396000000', |
| comments: [], |
| locationRange: 'line', |
| }, |
| ]; |
| |
| assert.deepEqual(element._sortByDate(threadGroups), expectedResult); |
| |
| // When a comment doesn't have a date, the one without the date should be |
| // last. |
| threadGroups = [ |
| { |
| start_datetime: '2015-12-23 15:00:20.396000000', |
| comments: [], |
| locationRange: 'line', |
| }, |
| { |
| comments: [], |
| locationRange: 'range-1-1-1-2', |
| }, |
| ]; |
| |
| expectedResult = [ |
| { |
| start_datetime: '2015-12-23 15:00:20.396000000', |
| comments: [], |
| locationRange: 'line', |
| }, |
| { |
| comments: [], |
| locationRange: 'range-1-1-1-2', |
| }, |
| ]; |
| |
| assert.deepEqual(element._sortByDate(threadGroups), expectedResult); |
| }); |
| |
| test('_calculateLocationRange', () => { |
| const comment = {__commentSide: 'left'}; |
| const range = { |
| start_line: 1, |
| start_character: 2, |
| end_line: 3, |
| end_character: 4, |
| }; |
| assert.equal( |
| element._calculateLocationRange(range, comment), |
| 'range-1-2-3-4-left'); |
| }); |
| |
| test('thread groups are updated when comments change', () => { |
| const commentsChangedStub = sandbox.stub(element, '_commentsChanged'); |
| element.comments = []; |
| element.comments.push({ |
| id: 'sallys_confession', |
| message: 'i like you, jack', |
| updated: '2015-12-23 15:00:20.396000000', |
| }); |
| assert(commentsChangedStub.called); |
| }); |
| |
| test('addNewThread', () => { |
| const locationRange = 'range-1-2-3-4'; |
| element._threads = [{locationRange: 'line'}]; |
| element.addNewThread(locationRange); |
| assert(element._threads.length, 2); |
| }); |
| |
| test('_getPatchNum', () => { |
| element.patchForNewThreads = 3; |
| const comment = { |
| id: 'sallys_confession', |
| message: 'i like you, jack', |
| updated: '2015-12-23 15:00:20.396000000', |
| }; |
| assert.equal(element._getPatchNum(comment), 3); |
| comment.patch_set = 4; |
| assert.equal(element._getPatchNum(comment), 4); |
| }); |
| |
| test('removeThread', () => { |
| const locationRange = 'range-1-2-3-4'; |
| element._threads = [ |
| {locationRange: 'range-1-2-3-4', comments: []}, |
| {locationRange: 'line', comments: []}, |
| ]; |
| flushAsynchronousOperations(); |
| element.removeThread(locationRange); |
| flushAsynchronousOperations(); |
| assert(element._threads.length, 1); |
| }); |
| |
| test('_rangesEqual', () => { |
| const range1 = |
| {startLine: 123, startChar: 345, endLine: 234, endChar: 456}; |
| const range2 = |
| {startLine: 1, startChar: 2, endLine: 3, endChar: 4}; |
| |
| assert.isTrue(element._rangesEqual(null, null)); |
| assert.isTrue(element._rangesEqual(null, undefined)); |
| assert.isTrue(element._rangesEqual(undefined, null)); |
| assert.isTrue(element._rangesEqual(undefined, undefined)); |
| |
| assert.isFalse(element._rangesEqual(range1, null)); |
| assert.isFalse(element._rangesEqual(null, range1)); |
| assert.isFalse(element._rangesEqual(range1, range2)); |
| |
| assert.isTrue(element._rangesEqual(range1, Object.assign({}, range1))); |
| }); |
| }); |
| </script> |