Filter existing reviewers when accessing mentionedUsers
When calculating the list of mentioned users we want to filter
out existing reviewers and CC(either added to the change already
or added manually in the reply dialog by the user).
Currently filtering was done when subscribing which means updates
to the reviewer/CC list is not reflected in the filter.
The filter was also called before the reviewerList.accounts was
populated making the filter currently obsolete.
Release-Notes: skip
Google-bug-id: b/236921879
Change-Id: Ie4acc90efa1a779cfe4c5165876a084538a3039e
diff --git a/polygerrit-ui/app/elements/change/gr-reply-dialog/gr-reply-dialog.ts b/polygerrit-ui/app/elements/change/gr-reply-dialog/gr-reply-dialog.ts
index 95805fa..e89b418 100644
--- a/polygerrit-ui/app/elements/change/gr-reply-dialog/gr-reply-dialog.ts
+++ b/polygerrit-ui/app/elements/change/gr-reply-dialog/gr-reply-dialog.ts
@@ -259,7 +259,10 @@
account?: AccountInfo;
get ccs() {
- return [...this._ccs, ...this.mentionedUsers];
+ return [
+ ...this._ccs,
+ ...this.mentionedUsers.filter(v => !this.isAlreadyReviewerOrCC(v)),
+ ];
}
/**
@@ -648,7 +651,7 @@
this,
() => this.getCommentsModel().mentionedUsersInDrafts$,
x => {
- this.mentionedUsers = x.filter(v => !this.isAlreadyReviewerOrCC(v));
+ this.mentionedUsers = x;
this.reviewersMutated =
this.reviewersMutated || this.mentionedUsers.length > 0;
}
diff --git a/polygerrit-ui/app/elements/change/gr-reply-dialog/gr-reply-dialog_test.ts b/polygerrit-ui/app/elements/change/gr-reply-dialog/gr-reply-dialog_test.ts
index 50c170c..000df94 100644
--- a/polygerrit-ui/app/elements/change/gr-reply-dialog/gr-reply-dialog_test.ts
+++ b/polygerrit-ui/app/elements/change/gr-reply-dialog/gr-reply-dialog_test.ts
@@ -2478,42 +2478,71 @@
});
test('mention user who is already CCed', async () => {
- element._ccs = [createAccountWithEmail('abcd@def.com')];
- element.draftCommentThreads = [
- createCommentThread([
- {
- ...createComment(),
- message: 'hey @abcd@def.com take a look at this',
- unresolved: true,
- },
- ]),
- ];
+ element.getCommentsModel().setState({
+ comments: {},
+ robotComments: {},
+ drafts: {
+ a: [
+ {
+ ...createDraft(),
+ message: 'hey @abcd@def.com take a look at this',
+ unresolved: true,
+ },
+ ],
+ },
+ portedComments: {},
+ portedDrafts: {},
+ discardedDrafts: [],
+ });
await element.updateComplete;
- assert.deepEqual(element.mentionedUsers, []);
- assert.deepEqual(element.ccs, [
- {
- email: 'abcd@def.com' as EmailAddress,
- },
+ assert.deepEqual(element.ccs, [{email: 'abcd@def.com' as EmailAddress}]);
+ assert.deepEqual(element.mentionedUsers, [
+ {email: 'abcd@def.com' as EmailAddress},
]);
+ element._ccs = [createAccountWithEmail('abcd@def.com')];
+
+ await element.updateComplete;
+
+ assert.deepEqual(element.mentionedUsers, [
+ {email: 'abcd@def.com' as EmailAddress},
+ ]);
+ assert.deepEqual(element.ccs, [{email: 'abcd@def.com' as EmailAddress}]);
});
test('mention user who is already a reviewer', async () => {
+ element.getCommentsModel().setState({
+ comments: {},
+ robotComments: {},
+ drafts: {
+ a: [
+ {
+ ...createDraft(),
+ message: 'hey @abcd@def.com take a look at this',
+ unresolved: true,
+ },
+ ],
+ },
+ portedComments: {},
+ portedDrafts: {},
+ discardedDrafts: [],
+ });
+ await element.updateComplete;
+ assert.deepEqual(element.mentionedUsers, [
+ {email: 'abcd@def.com' as EmailAddress},
+ ]);
+
+ // ensure updates to reviewers is reflected to mentionedUsers property
element.reviewers = [createAccountWithEmail('abcd@def.com')];
- element.draftCommentThreads = [
- createCommentThread([
- {
- ...createComment(),
- message: 'hey @abcd@def.com take a look at this',
- unresolved: true,
- },
- ]),
- ];
await element.updateComplete;
- assert.deepEqual(element.mentionedUsers, []);
+ // overall ccs is empty since we filter out existing reviewers
+ assert.deepEqual(element.ccs, []);
+ assert.deepEqual(element.mentionedUsers, [
+ {email: 'abcd@def.com' as EmailAddress},
+ ]);
assert.deepEqual(element.reviewers, [
{
email: 'abcd@def.com' as EmailAddress,