blob: 4ce95ef05e23cfeed081b3c40deaf055d2a045f8 [file] [log] [blame]
/**
* @license
* Copyright (C) 2020 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.
*/
import '../test/common-test-setup-karma.js';
import {
isUnresolved, getPatchRangeForCommentUrl, createCommentThreads, sortComments,
} from './comment-util.js';
import {createComment} from '../test/test-data-generators.js';
import {CommentSide, Side} from '../constants/constants.js';
import {ParentPatchSetNum} from '../types/common.js';
suite('comment-util', () => {
test('isUnresolved', () => {
assert.isFalse(isUnresolved(undefined));
assert.isFalse(isUnresolved({comments: []}));
assert.isTrue(isUnresolved({comments: [{unresolved: true}]}));
assert.isFalse(isUnresolved({comments: [{unresolved: false}]}));
assert.isTrue(isUnresolved(
{comments: [{unresolved: false}, {unresolved: true}]}));
assert.isFalse(isUnresolved(
{comments: [{unresolved: true}, {unresolved: false}]}));
});
test('getPatchRangeForCommentUrl', () => {
test('comment created with side=PARENT does not navigate to latest ps',
() => {
const comment = {
...createComment(),
id: 'c4',
line: 10,
patch_set: 4,
side: CommentSide.PARENT,
path: '/COMMIT_MSG',
};
assert.deepEqual(getPatchRangeForCommentUrl(comment, 11), {
basePatchNum: ParentPatchSetNum,
patchNum: 4,
});
});
});
test('comments sorting', () => {
const comments = [
{
id: 'new_draft',
message: 'i do not like either of you',
diffSide: Side.LEFT,
__draft: true,
updated: '2015-12-20 15:01:20.396000000',
},
{
id: 'sallys_confession',
message: 'i like you, jack',
updated: '2015-12-23 15:00:20.396000000',
line: 1,
diffSide: Side.LEFT,
}, {
id: 'jacks_reply',
message: 'i like you, too',
updated: '2015-12-24 15:01:20.396000000',
diffSide: Side.LEFT,
line: 1,
in_reply_to: 'sallys_confession',
},
];
const sortedComments = sortComments(comments);
assert.equal(sortedComments[0], comments[1]);
assert.equal(sortedComments[1], comments[2]);
assert.equal(sortedComments[2], comments[0]);
});
suite('createCommentThreads', () => {
test('creates threads from individual comments', () => {
const comments = [
{
id: 'sallys_confession',
message: 'i like you, jack',
updated: '2015-12-23 15:00:20.396000000',
line: 1,
patch_set: 1,
path: 'some/path',
}, {
id: 'jacks_reply',
message: 'i like you, too',
updated: '2015-12-24 15:01:20.396000000',
line: 1,
in_reply_to: 'sallys_confession',
patch_set: 1,
path: 'some/path',
},
{
id: 'new_draft',
message: 'i do not like either of you',
__draft: true,
updated: '2015-12-20 15:01:20.396000000',
patch_set: 1,
path: 'some/path',
},
];
const actualThreads = createCommentThreads(comments,
{basePatchNum: 1, patchNum: 4});
assert.equal(actualThreads.length, 2);
assert.equal(actualThreads[0].diffSide, Side.LEFT);
assert.equal(actualThreads[0].comments.length, 2);
assert.deepEqual(actualThreads[0].comments[0], comments[0]);
assert.deepEqual(actualThreads[0].comments[1], comments[1]);
assert.equal(actualThreads[0].patchNum, 1);
assert.equal(actualThreads[0].line, 1);
assert.equal(actualThreads[1].diffSide, Side.LEFT);
assert.equal(actualThreads[1].comments.length, 1);
assert.deepEqual(actualThreads[1].comments[0], comments[2]);
assert.equal(actualThreads[1].patchNum, 1);
assert.equal(actualThreads[1].line, 'FILE');
});
test('derives patchNum and range', () => {
const 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,
},
patch_set: 5,
path: '/p',
line: 1,
}];
const expectedThreads = [
{
diffSide: Side.LEFT,
commentSide: CommentSide.REVISION,
path: '/p',
rootId: 'betsys_confession',
mergeParentNum: undefined,
comments: [{
id: 'betsys_confession',
path: '/p',
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,
},
patch_set: 5,
line: 1,
}],
patchNum: 5,
range: {
start_line: 1,
start_character: 1,
end_line: 1,
end_character: 2,
},
line: 1,
},
];
assert.deepEqual(
createCommentThreads(comments, {basePatchNum: 5, patchNum: 10}),
expectedThreads);
});
test('does not thread unrelated comments at same location', () => {
const comments = [
{
id: 'sallys_confession',
message: 'i like you, jack',
updated: '2015-12-23 15:00:20.396000000',
diffSide: Side.LEFT,
path: '/p',
}, {
id: 'jacks_reply',
message: 'i like you, too',
updated: '2015-12-24 15:01:20.396000000',
diffSide: Side.LEFT,
path: '/p',
},
];
assert.equal(createCommentThreads(comments).length, 2);
});
});
});