Merge "Fix some reviewers emails showing as undefined"
diff --git a/polygerrit-ui/app/elements/change/gr-account-entry/gr-account-entry.js b/polygerrit-ui/app/elements/change/gr-account-entry/gr-account-entry.js
index 86e3903..715ddc0 100644
--- a/polygerrit-ui/app/elements/change/gr-account-entry/gr-account-entry.js
+++ b/polygerrit-ui/app/elements/change/gr-account-entry/gr-account-entry.js
@@ -126,13 +126,15 @@
       let name;
       let value;
       const generateStatusStr = function(account) {
-        return account.status ? ' (' + account.status + ')' : '';
+        return account.status ? '(' + account.status + ')' : '';
       };
       if (reviewer.account) {
         // Reviewer is an account suggestion from getChangeSuggestedReviewers.
         const reviewerName = this._accountOrAnon(reviewer.account);
-        name = reviewerName + ' <' + reviewer.account.email + '>' +
-            generateStatusStr(reviewer.account);
+        const reviewerEmail = this._reviewerEmail(reviewer.account.email);
+        const reviewerStatus = generateStatusStr(reviewer.account);
+        name = [reviewerName, reviewerEmail, reviewerStatus]
+            .filter(p => p.length > 0).join(' ');
         value = reviewer;
       } else if (reviewer.group) {
         // Reviewer is a group suggestion from getChangeSuggestedReviewers.
@@ -141,8 +143,10 @@
       } else if (reviewer._account_id) {
         // Reviewer is an account suggestion from getSuggestedAccounts.
         const reviewerName = this._accountOrAnon(reviewer);
-        name = reviewerName + ' <' + reviewer.email + '>' +
-            generateStatusStr(reviewer);
+        const reviewerEmail = this._reviewerEmail(reviewer.email);
+        const reviewerStatus = generateStatusStr(reviewer);
+        name = [reviewerName, reviewerEmail, reviewerStatus]
+            .filter(p => p.length > 0).join(' ');
         value = {account: reviewer, count: 1};
       }
       return {name, value};
@@ -168,5 +172,13 @@
             .map(this._makeSuggestion.bind(this));
       });
     },
+
+    _reviewerEmail(email) {
+      if (typeof email !== 'undefined') {
+        return '<' + email + '>';
+      }
+
+      return '';
+    },
   });
 })();
diff --git a/polygerrit-ui/app/elements/change/gr-account-entry/gr-account-entry_test.html b/polygerrit-ui/app/elements/change/gr-account-entry/gr-account-entry_test.html
index 03a0be8..20d127d 100644
--- a/polygerrit-ui/app/elements/change/gr-account-entry/gr-account-entry_test.html
+++ b/polygerrit-ui/app/elements/change/gr-account-entry/gr-account-entry_test.html
@@ -56,6 +56,15 @@
         status: opt_status,
       };
     };
+    let _nextAccountId3 = 0;
+    const makeAccount3 = function(opt_status) {
+      const accountId3 = ++_nextAccountId3;
+      return {
+        _account_id: accountId3,
+        name: 'name ' + accountId3,
+        status: opt_status,
+      };
+    };
 
     let owner;
     let existingReviewer1;
@@ -115,6 +124,7 @@
       test('_makeSuggestion formats account or group accordingly', () => {
         let account = makeAccount();
         const account2 = makeAccount2();
+        const account3 = makeAccount3();
         let suggestion = element._makeSuggestion({account});
         assert.deepEqual(suggestion, {
           name: account.name + ' <' + account.email + '>',
@@ -154,6 +164,22 @@
           name: account.name + ' <' + account.email + '> (OOO)',
           value: {account, count: 1},
         });
+
+        sandbox.stub(element, '_reviewerEmail',
+            () => { return ''; });
+
+        suggestion = element._makeSuggestion(account3);
+        assert.deepEqual(suggestion, {
+          name: account3.name,
+          value: {account: account3, count: 1},
+        });
+      });
+
+      test('_reviewerEmail', () => {
+        assert.equal(
+            element._reviewerEmail('email@gerritreview.com'),
+            '<email@gerritreview.com>');
+        assert.equal(element._reviewerEmail(undefined), '');
       });
 
       test('_getReviewerSuggestions excludes owner+reviewers', done => {