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,