PolyGerrit: If your account does not have a name use a default name

When you create an account with no name it is very hard to go to
settings to change the name as the dropdown will be hidden. Lets do
what gwtui does and provide a fake name so that dropdown works.

Change-Id: I7a6cb6fadff6e12f02611af4020781eb7191e0f6
diff --git a/polygerrit-ui/app/elements/core/gr-account-dropdown/gr-account-dropdown.html b/polygerrit-ui/app/elements/core/gr-account-dropdown/gr-account-dropdown.html
index 015cfc5..7e358fd 100644
--- a/polygerrit-ui/app/elements/core/gr-account-dropdown/gr-account-dropdown.html
+++ b/polygerrit-ui/app/elements/core/gr-account-dropdown/gr-account-dropdown.html
@@ -39,7 +39,7 @@
         items=[[links]]
         top-content=[[topContent]]
         horizontal-align="right">
-        <span hidden$="[[_hasAvatars]]" hidden>[[account.name]]</span>
+        <span hidden$="[[_hasAvatars]]" hidden>[[_accountName(account, _anonymousName)]]</span>
         <gr-avatar account="[[account]]" hidden$="[[!_hasAvatars]]" hidden
             image-size="56" aria-label="Account avatar"></gr-avatar>
     </gr-dropdown>
diff --git a/polygerrit-ui/app/elements/core/gr-account-dropdown/gr-account-dropdown.js b/polygerrit-ui/app/elements/core/gr-account-dropdown/gr-account-dropdown.js
index cbd0e19..318794f 100644
--- a/polygerrit-ui/app/elements/core/gr-account-dropdown/gr-account-dropdown.js
+++ b/polygerrit-ui/app/elements/core/gr-account-dropdown/gr-account-dropdown.js
@@ -16,18 +16,24 @@
 
   const INTERPOLATE_URL_PATTERN = /\$\{([\w]+)\}/g;
 
+  const ANONYMOUS_NAME = 'Anonymous';
+
   Polymer({
     is: 'gr-account-dropdown',
 
     properties: {
       account: Object,
+      _anonymousName: {
+        type: String,
+        value: ANONYMOUS_NAME,
+      },
       links: {
         type: Array,
         computed: '_getLinks(_switchAccountUrl, _path)',
       },
       topContent: {
         type: Array,
-        computed: '_getTopContent(account)',
+        computed: '_getTopContent(account, _anonymousName)',
       },
       _path: {
         type: String,
@@ -47,6 +53,12 @@
           this._switchAccountUrl = null;
         }
         this._hasAvatars = !!(cfg && cfg.plugin && cfg.plugin.has_avatars);
+
+        if (cfg && cfg.user &&
+            cfg.user.anonymous_coward_name &&
+            cfg.user.anonymous_coward_name !== 'Anonymous Coward') {
+          this._anonymousName = cfg.user.anonymous_coward_name;
+        }
       });
     },
 
@@ -65,11 +77,10 @@
       return links;
     },
 
-    _getTopContent(account) {
-      // if (!account) { return []; }
+    _getTopContent(account, _anonymousName) {
       return [
-        {text: account.name, bold: true},
-        {text: account.email},
+        {text: this._accountName(account, _anonymousName), bold: true},
+        {text: account.email ? account.email : ''},
       ];
     },
 
@@ -85,5 +96,14 @@
         return replacements[p1] || '';
       });
     },
+
+    _accountName(account, _anonymousName) {
+      if (account && account.name) {
+        return account.name;
+      } else if (account && account.email) {
+        return account.email;
+      }
+      return _anonymousName;
+    },
   });
 })();
diff --git a/polygerrit-ui/app/elements/core/gr-account-dropdown/gr-account-dropdown_test.html b/polygerrit-ui/app/elements/core/gr-account-dropdown/gr-account-dropdown_test.html
index 0d1a295..d75856c 100644
--- a/polygerrit-ui/app/elements/core/gr-account-dropdown/gr-account-dropdown_test.html
+++ b/polygerrit-ui/app/elements/core/gr-account-dropdown/gr-account-dropdown_test.html
@@ -49,6 +49,26 @@
           [{text: 'John Doe', bold: true}, {text: 'john@doe.com'}]);
     });
 
+    test('test for account without a name', () => {
+      element.account = {id: '0001'};
+      assert.deepEqual(element.topContent,
+          [{text: 'Anonymous', bold: true}, {text: ''}]);
+    });
+
+   test('test for account without a name but using config', () => {
+      element._anonymousName = 'WikiGerrit';
+      element.account = {id: '0001'};
+      assert.deepEqual(element.topContent,
+          [{text: 'WikiGerrit', bold: true}, {text: ''}]);
+    });
+
+   test('test for account name as an email', () => {
+      element._anonymousName = 'WikiGerrit';
+      element.account = {email: 'john@doe.com'};
+      assert.deepEqual(element.topContent,
+          [{text: 'john@doe.com', bold: true}, {text: 'john@doe.com'}]);
+    });
+
     test('switch account', () => {
       // No switch account link.
       assert.equal(element._getLinks(null).length, 2);