Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions apps/backend/src/datasources/postgres/records.ts
Original file line number Diff line number Diff line change
Expand Up @@ -265,7 +265,7 @@ export interface UserRecord {
readonly user_title: string;
readonly firstname: string;
readonly lastname: string;
readonly preferredname: string;
readonly preferredname: string | null;
readonly oidc_sub: string | null;
readonly oauth_refresh_token: string | null;
readonly oauth_issuer: string | null;
Expand Down Expand Up @@ -985,7 +985,7 @@ export const createUserObject = (user: UserRecord) => {
user.user_title,
user.firstname,
user.lastname,
user.preferredname,
user.preferredname || user.firstname,
user.oidc_sub,
user.oauth_refresh_token,
user.oauth_issuer,
Expand All @@ -1004,7 +1004,7 @@ export const createBasicUserObject = (
user.user_id,
user.firstname,
user.lastname,
user.preferredname,
user.preferredname || user.firstname,
user.institution,
user.institution_id,
user.created_at,
Expand Down
45 changes: 44 additions & 1 deletion apps/backend/src/datasources/stfc/StfcUserDataSource.spec.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
import { Role, Roles } from '../../models/Role';
import { dummyUser } from '../mockups/UserDataSource';
import { StfcUserDataSource } from './StfcUserDataSource';
import {
StfcUserDataSource,
StfcBasicPersonDetails,
toEssBasicUserDetails,
} from './StfcUserDataSource';

jest.mock('../postgres/UserDataSource.ts');
jest.mock('../../utils/Cache');
Expand Down Expand Up @@ -302,3 +306,42 @@ describe('Searchable user tests', () => {
expect(result).toBe(false);
});
});

describe('toEssBasicUserDetails preferredname fallback', () => {
const baseStfcUser: StfcBasicPersonDetails = {
userNumber: 'fake',
givenName: 'fake',
familyName: 'fake',
firstNameKnownAs: 'fake',
email: 'fake',
country: 'fake',
orgName: 'fake',
orgId: 1,
title: 'fake',
deptName: 'fake',
displayName: 'fake',
establishmentId: 'fake',
fullName: 'fake',
initials: 'fake',
};

test('uses firstNameKnownAs when set', () => {
const user = toEssBasicUserDetails({
...baseStfcUser,
firstNameKnownAs: 'fake',
givenName: 'fake2',
});

expect(user.preferredname).toBe('fake');
});

test('falls back to givenName when firstNameKnownAs is empty', () => {
const user = toEssBasicUserDetails({
...baseStfcUser,
firstNameKnownAs: '',
givenName: 'fake',
});

expect(user.preferredname).toBe('fake');
});
});
4 changes: 2 additions & 2 deletions apps/backend/src/datasources/stfc/StfcUserDataSource.ts
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ export function toEssBasicUserDetails(
Number(stfcUser.userNumber),
stfcUser.givenName ?? '',
stfcUser.familyName ?? '',
stfcUser.firstNameKnownAs ?? stfcUser.givenName,
stfcUser.firstNameKnownAs || stfcUser.givenName,
stfcUser.orgName ?? '',
stfcUser.orgId ?? 1,
new Date(),
Expand All @@ -110,7 +110,7 @@ function toEssUser(stfcUser: StfcBasicPersonDetails): User {
stfcUser.title ?? '',
stfcUser.givenName ?? '',
stfcUser.familyName ?? '',
stfcUser.firstNameKnownAs ?? stfcUser.givenName,
stfcUser.firstNameKnownAs || stfcUser.givenName,
'',
'',
'',
Expand Down
2 changes: 1 addition & 1 deletion apps/backend/src/models/User.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ export class User {
public userTitle: string,
public firstname: string,
public lastname: string,
public preferredname: string | undefined,
public preferredname: string,
public oidcSub: string | null,
public oauthRefreshToken: string | null,
public oauthIssuer: string | null,
Expand Down
4 changes: 2 additions & 2 deletions apps/backend/src/resolvers/types/BasicUserDetails.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,8 @@ export class BasicUserDetails implements Partial<BasicUserDetailsOrigin> {
@Field()
public lastname: string;

@Field(() => String, { nullable: true })
public preferredname: string | undefined;
@Field(() => String)
public preferredname: string;

@Field()
public institution: string;
Expand Down
4 changes: 2 additions & 2 deletions apps/backend/src/resolvers/types/User.ts
Original file line number Diff line number Diff line change
Expand Up @@ -60,8 +60,8 @@ export class User implements Partial<UserOrigin> {
@Field()
public lastname: string;

@Field(() => String, { nullable: true })
public preferredname: string | undefined;
@Field(() => String)
public preferredname: string;

@Field(() => String, { nullable: true })
public oidcSub: string | null;
Expand Down
4 changes: 2 additions & 2 deletions apps/backend/src/resolvers/types/UserJWT.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,8 @@ export class UserJWT implements Partial<UserJWTOrigin> {
@Field()
public lastname: string;

@Field(() => String, { nullable: true })
public preferredname: string | undefined;
@Field(() => String)
public preferredname: string;

@Field()
public email: string;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,7 @@ const memberRole = (member: FapAssignedMember) => `${member.role?.title}`;
const columns = [
{
title: 'Name',
render: (rowData: FapAssignedMember) =>
rowData.preferredname ? rowData.preferredname : rowData.firstname,
render: (rowData: FapAssignedMember) => rowData.preferredname,
},
{ title: 'Surname', field: 'lastname' },
{ title: 'Proposal Count', field: 'proposalsCountByCall' },
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ export const MultiRankAssignmentDialog = ({
}}
>
<TableCell component="th" scope="row">
{row.preferredname ? row.preferredname : row.firstname}
{row.preferredname}
</TableCell>
<TableCell align="left">{row.lastname}</TableCell>
<TableCell align="right">
Expand Down
48 changes: 13 additions & 35 deletions apps/frontend/src/utils/user.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,55 +6,33 @@ export const getFullUserName = (
): string => (user ? `${user.firstname} ${user.lastname}` : 'None');

export const getFullUserNameWithEmail = (
user?: Pick<
BasicUserDetails,
'preferredname' | 'lastname' | 'email' | 'firstname'
> | null
user?: Pick<BasicUserDetails, 'preferredname' | 'lastname' | 'email'> | null
): string =>
user
? user.preferredname
? `${user.preferredname} ${user.lastname} ${
user.email ? `(${user.email})` : ''
}`
: `${user.firstname} ${user.lastname} ${
user.email ? `(${user.email})` : ''
}`
? `${user.preferredname} ${user.lastname} ${
user.email ? `(${user.email})` : ''
}`
: 'None';

export const getFullUserNameWithInstitution = (
user?: BasicUserData | null
): string =>
user
? user.preferredname
? `${user.preferredname} ${user.lastname}; ${
user.institution ? `${user.institution}` : ''
}`
: `${user.firstname} ${user.lastname}; ${
user.institution ? `${user.institution}` : ''
}`
? `${user.preferredname} ${user.lastname}; ${
user.institution ? `${user.institution}` : ''
}`
: 'None';

export const getFullUserNameWithBasicDetails = (
user?: Pick<
BasicUserDetails,
| 'preferredname'
| 'lastname'
| 'email'
| 'firstname'
| 'institution'
| 'country'
'preferredname' | 'lastname' | 'email' | 'institution' | 'country'
> | null
): string =>
user
? user.preferredname
? `${user.preferredname} ${user.lastname} ${
user.email ? `(${user.email})` : ''
} ${user.institution ? `(${user.institution})` : ''} ${
user.country ? `(${user.country})` : ''
}`
: `${user.firstname} ${user.lastname} ${
user.email ? `(${user.email})` : ''
} ${user.institution ? `(${user.institution})` : ''} ${
user.country ? `(${user.country})` : ''
}`
? `${user.preferredname} ${user.lastname} ${
user.email ? `(${user.email})` : ''
} ${user.institution ? `(${user.institution})` : ''} ${
user.country ? `(${user.country})` : ''
}`
: 'None';
Loading