--- /dev/null
+// Copyright (C) The Arvados Authors. All rights reserved.
+//
+// SPDX-License-Identifier: AGPL-3.0
+
+import { User, getUserDisplayName } from './user';
+
+describe('User', () => {
+
+ beforeEach(() => {
+ });
+
+ it('gets the user display name', () => {
+ type UserCase = {
+ caseName: string;
+ user: User;
+ expect: string;
+ };
+ const testCases: UserCase[] = [
+ {
+ caseName: 'Full data available',
+ user: {
+ email: 'someuser@example.com', username: 'someuser',
+ firstName: 'Some', lastName: 'User',
+ uuid: 'zzzzz-tpzed-someusersuuid',
+ ownerUuid: 'zzzzz-tpzed-someusersowneruuid',
+ prefs: {}, isAdmin: false, isActive: true
+ },
+ expect: 'Some User'
+ },
+ {
+ caseName: 'Missing first name',
+ user: {
+ email: 'someuser@example.com', username: 'someuser',
+ firstName: '', lastName: 'User',
+ uuid: 'zzzzz-tpzed-someusersuuid',
+ ownerUuid: 'zzzzz-tpzed-someusersowneruuid',
+ prefs: {}, isAdmin: false, isActive: true
+ },
+ expect: 'someuser@example.com'
+ },
+ {
+ caseName: 'Missing last name',
+ user: {
+ email: 'someuser@example.com', username: 'someuser',
+ firstName: 'Some', lastName: '',
+ uuid: 'zzzzz-tpzed-someusersuuid',
+ ownerUuid: 'zzzzz-tpzed-someusersowneruuid',
+ prefs: {}, isAdmin: false, isActive: true
+ },
+ expect: 'someuser@example.com'
+ },
+ {
+ caseName: 'Missing first & last names',
+ user: {
+ email: 'someuser@example.com', username: 'someuser',
+ firstName: '', lastName: '',
+ uuid: 'zzzzz-tpzed-someusersuuid',
+ ownerUuid: 'zzzzz-tpzed-someusersowneruuid',
+ prefs: {}, isAdmin: false, isActive: true
+ },
+ expect: 'someuser@example.com'
+ },
+ {
+ caseName: 'Missing first & last names, and email address',
+ user: {
+ email: '', username: 'someuser',
+ firstName: '', lastName: '',
+ uuid: 'zzzzz-tpzed-someusersuuid',
+ ownerUuid: 'zzzzz-tpzed-someusersowneruuid',
+ prefs: {}, isAdmin: false, isActive: true
+ },
+ expect: 'someuser'
+ },
+ {
+ caseName: 'Missing all data (should not happen)',
+ user: {
+ email: '', username: '',
+ firstName: '', lastName: '',
+ uuid: 'zzzzz-tpzed-someusersuuid',
+ ownerUuid: 'zzzzz-tpzed-someusersowneruuid',
+ prefs: {}, isAdmin: false, isActive: true
+ },
+ expect: 'zzzzz-tpzed-someusersuuid'
+ },
+ ];
+ testCases.forEach(c => {
+ const dispName = getUserDisplayName(c.user);
+ expect(dispName).toEqual(c.expect);
+ })
+ });
+});
import { RootState } from "~/store/store";
import { ServiceRepository, createServices, setAuthorizationHeader } from "~/services/services";
import Axios from "axios";
-import { getUserFullname, User } from "~/models/user";
+import { User, getUserDisplayName } from "~/models/user";
import { authActions } from "~/store/auth/auth-action";
import {
Config, ClusterConfigJSON, CLUSTER_CONFIG_PATH, DISCOVERY_DOC_PATH,
session.token = token;
session.email = user.email;
session.uuid = user.uuid;
- session.name = getUserFullname(user);
+ session.name = getUserDisplayName(user);
session.loggedIn = true;
session.apiRevision = apiRevision;
};
status: SessionStatus.VALIDATED,
active: false,
email: user.email,
- name: getUserFullname(user),
+ name: getUserDisplayName(user),
uuid: user.uuid,
baseUrl: config.baseUrl,
clusterId: config.uuidPrefix,
import * as React from "react";
import { MenuItem, Divider } from "@material-ui/core";
import { StyleRulesCallback, WithStyles, withStyles } from '@material-ui/core/styles';
-import { User, getUserFullname } from "~/models/user";
+import { User, getUserDisplayName } from "~/models/user";
import { DropdownMenu } from "~/components/dropdown-menu/dropdown-menu";
import { UserPanelIcon } from "~/components/icon/icon";
import { DispatchProp, connect } from 'react-redux';
title="Account Management"
key={currentRoute}>
<MenuItem disabled>
- {getUserFullname(user)} {user.uuid.substr(0, 5) !== localCluster && `(${user.uuid.substr(0, 5)})`}
+ {getUserDisplayName(user)} {user.uuid.substr(0, 5) !== localCluster && `(${user.uuid.substr(0, 5)})`}
</MenuItem>
{user.isActive ? <>
<MenuItem onClick={() => dispatch(openUserVirtualMachines())}>Virtual Machines</MenuItem>