Use display name in account label

The display name can be set by the user in the preferences. But for each
host you can also set a default for what should happen, if that display
name is not set. Normally that default would be 'FULL_NAME'. Thus this
change will not yet change anything for any user, but for gerrit-review,
where the default was already changed to FIRST_NAME.

Screenshot of using FIRST_NAME: https://imgur.com/a/pQoJFHk

Change-Id: Ibc3bc74216c8d3d7e7add831aa553a825bd8a1ae
diff --git a/polygerrit-ui/app/behaviors/gr-display-name-behavior/gr-display-name-behavior.js b/polygerrit-ui/app/behaviors/gr-display-name-behavior/gr-display-name-behavior.js
index 2e7f5d4..af3ce64 100644
--- a/polygerrit-ui/app/behaviors/gr-display-name-behavior/gr-display-name-behavior.js
+++ b/polygerrit-ui/app/behaviors/gr-display-name-behavior/gr-display-name-behavior.js
@@ -29,6 +29,10 @@
       return GrDisplayNameUtils.getUserName(config, account);
     },
 
+    getDisplayName(config, account) {
+      return GrDisplayNameUtils.getDisplayName(config, account);
+    },
+
     getGroupDisplayName(group) {
       return GrDisplayNameUtils.getGroupDisplayName(group);
     },
diff --git a/polygerrit-ui/app/elements/shared/gr-account-label/gr-account-label.js b/polygerrit-ui/app/elements/shared/gr-account-label/gr-account-label.js
index d279563..145a2cc 100644
--- a/polygerrit-ui/app/elements/shared/gr-account-label/gr-account-label.js
+++ b/polygerrit-ui/app/elements/shared/gr-account-label/gr-account-label.js
@@ -69,7 +69,7 @@
   }
 
   _computeName(account, config) {
-    return this.getUserName(config, account);
+    return this.getDisplayName(config, account);
   }
 }
 
diff --git a/polygerrit-ui/app/scripts/gr-display-name-utils/gr-display-name-utils.js b/polygerrit-ui/app/scripts/gr-display-name-utils/gr-display-name-utils.js
index cefd254..20de3fb6 100644
--- a/polygerrit-ui/app/scripts/gr-display-name-utils/gr-display-name-utils.js
+++ b/polygerrit-ui/app/scripts/gr-display-name-utils/gr-display-name-utils.js
@@ -39,6 +39,24 @@
       return ANONYMOUS_NAME;
     }
 
+    static getDisplayName(config, account) {
+      if (account && account.display_name) {
+        return account.display_name;
+      }
+      if (!account || !account.name || !config || !config.accounts) {
+        return this.getUserName(config, account);
+      }
+      if (config.accounts.default_display_name === 'USERNAME'
+          && account.username) {
+        return account.username;
+      }
+      if (config.accounts.default_display_name === 'FIRST_NAME') {
+        return account.name.trim().split(' ')[0];
+      }
+      // Treat every other value as FULL_NAME.
+      return account.name;
+    }
+
     static getAccountDisplayName(config, account) {
       const reviewerName = this.getUserName(config, account);
       const reviewerEmail = this._accountEmail(account.email);
diff --git a/polygerrit-ui/app/scripts/gr-display-name-utils/gr-display-name-utils_test.html b/polygerrit-ui/app/scripts/gr-display-name-utils/gr-display-name-utils_test.html
index 262d53c..0ed5ec7 100644
--- a/polygerrit-ui/app/scripts/gr-display-name-utils/gr-display-name-utils_test.html
+++ b/polygerrit-ui/app/scripts/gr-display-name-utils/gr-display-name-utils_test.html
@@ -34,7 +34,77 @@
     },
   };
 
-  test('getUserName name only', () => {
+  test('getDisplayName name only', () => {
+    const account = {
+      name: 'test-name',
+    };
+    assert.equal(GrDisplayNameUtils.getDisplayName(config, account),
+        'test-name');
+  });
+
+  test('getDisplayName prefer displayName', () => {
+    const account = {
+      name: 'test-name',
+      display_name: 'better-name',
+    };
+    assert.equal(GrDisplayNameUtils.getDisplayName(config, account),
+        'better-name');
+  });
+
+  test('getDisplayName prefer username default', () => {
+    const account = {
+      name: 'test-name',
+      username: 'user-name',
+    };
+    const config = {
+      accounts: {
+        default_display_name: 'USERNAME',
+      },
+    };
+    assert.equal(GrDisplayNameUtils.getDisplayName(config, account),
+        'user-name');
+  });
+
+  test('getDisplayName prefer first name default', () => {
+    const account = {
+      name: 'firstname lastname',
+    };
+    const config = {
+      accounts: {
+        default_display_name: 'FIRST_NAME',
+      },
+    };
+    assert.equal(GrDisplayNameUtils.getDisplayName(config, account),
+        'firstname');
+  });
+
+  test('getDisplayName ignore leading whitespace for first name', () => {
+    const account = {
+      name: '   firstname lastname',
+    };
+    const config = {
+      accounts: {
+        default_display_name: 'FIRST_NAME',
+      },
+    };
+    assert.equal(GrDisplayNameUtils.getDisplayName(config, account),
+        'firstname');
+  });
+
+  test('getDisplayName full name default', () => {
+    const account = {
+      name: 'firstname lastname',
+    };
+    const config = {
+      accounts: {
+        default_display_name: 'FULL_NAME',
+      },
+    };
+    assert.equal(GrDisplayNameUtils.getDisplayName(config, account),
+        'firstname lastname');
+  });
+
+  test('getDisplayName name only', () => {
     const account = {
       name: 'test-name',
     };