Add robot comment count to patchset dropdown in findings tab
Screenshot : https://imgur.com/a/Sep83GD
Change-Id: Ia1501274ba873f18d0cdf1a902cefddb93dc2cdf
diff --git a/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view.js b/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view.js
index 8550a9d..929c214 100644
--- a/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view.js
+++ b/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view.js
@@ -332,7 +332,8 @@
_robotCommentsPatchSetDropdownItems: {
type: Array,
value() { return []; },
- computed: '_computeRobotCommentsPatchSetDropdownItems(_change)',
+ computed: '_computeRobotCommentsPatchSetDropdownItems(_change, ' +
+ '_commentThreads)',
},
_currentRobotCommentsPatchSet: {
type: Number,
@@ -631,13 +632,35 @@
return false;
}
- _computeRobotCommentsPatchSetDropdownItems(change) {
- if (!change.revisions) return [];
+ _robotCommentCountPerPatchSet(threads) {
+ return threads.reduce((robotCommentCountMap, thread) => {
+ const comments = thread.comments;
+ const robotCommentsCount = comments.reduce((acc, comment) =>
+ (comment.robot_id ? acc + 1 : acc), 0);
+ robotCommentCountMap[comments[0].patch_set] =
+ (robotCommentCountMap[comments[0].patch_set] || 0) +
+ robotCommentsCount;
+ return robotCommentCountMap;
+ }, {});
+ }
+
+ _computeText(patch, commentThreads) {
+ const commentCount = this._robotCommentCountPerPatchSet(commentThreads);
+ const commentCnt = commentCount[patch._number] || 0;
+ if (commentCnt === 0) return `Patchset ${patch._number}`;
+ const findingsText = commentCnt === 1 ? 'finding' : 'findings';
+ return `Patchset ${patch._number}`
+ + ` (${commentCnt} ${findingsText})`;
+ }
+
+ _computeRobotCommentsPatchSetDropdownItems(change, commentThreads) {
+ if (!change || !commentThreads || !change.revisions) return [];
+
return Object.values(change.revisions)
.filter(patch => patch._number !== 'edit')
.map(patch => {
return {
- text: 'Patchset ' + patch._number,
+ text: this._computeText(patch, commentThreads),
value: patch._number,
};
})
diff --git a/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view_test.html b/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view_test.html
index 9b40f3e..17a6921 100644
--- a/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view_test.html
+++ b/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view_test.html
@@ -80,6 +80,21 @@
name: 'user',
username: 'user',
},
+ patch_set: 2,
+ robot_id: 'rb1',
+ id: 'ecf9fa_fe1a5f62',
+ line: 5,
+ updated: '2018-02-08 18:49:18.000000000',
+ message: 'test',
+ unresolved: true,
+ },
+ {
+ __path: '/COMMIT_MSG',
+ author: {
+ _account_id: 1000000,
+ name: 'user',
+ username: 'user',
+ },
patch_set: 4,
id: 'ecf0b9fa_fe1a5f62',
line: 5,
@@ -110,6 +125,21 @@
{
comments: [
{
+ __path: '/COMMIT_MSG',
+ author: {
+ _account_id: 1000000,
+ name: 'user',
+ username: 'user',
+ },
+ patch_set: 3,
+ id: 'ecf0b9fa_fe5f62',
+ robot_id: 'rb2',
+ line: 5,
+ updated: '2018-02-08 18:49:18.000000000',
+ message: 'test',
+ unresolved: true,
+ },
+ {
__path: 'test.txt',
author: {
_account_id: 1000000,
@@ -735,6 +765,23 @@
done();
});
});
+
+ test('robot comments count per patchset', () => {
+ const count = element._robotCommentCountPerPatchSet(THREADS);
+ const expectedCount = {
+ 2: 1,
+ 3: 1,
+ 4: 2,
+ };
+ assert.deepEqual(count, expectedCount);
+ assert.equal(element._computeText({_number: 2}, THREADS),
+ 'Patchset 2 (1 finding)');
+ assert.equal(element._computeText({_number: 4}, THREADS),
+ 'Patchset 4 (2 findings)');
+ assert.equal(element._computeText({_number: 5}, THREADS),
+ 'Patchset 5');
+ });
+
test('only robot comments are rendered', () => {
assert.equal(element._robotCommentThreads.length, 2);
assert.equal(element._robotCommentThreads[0].comments[0].robot_id,
@@ -745,7 +792,7 @@
test('changing patchsets resets robot comments', done => {
element.set('_change.current_revision', 'rev3');
flush(() => {
- assert.equal(element._robotCommentThreads.length, 0);
+ assert.equal(element._robotCommentThreads.length, 1);
done();
});
});