Skip to content

Commit 9749ba1

Browse files
authoredSep 20, 2024··
refactor: make managed user's name required (#16678)
* refactor: make manageg user input name required * refactor: return managed user name in output * refactor: store provided user name * test: check managed user name in input and output * docs: update swagger
1 parent f52497f commit 9749ba1

File tree

7 files changed

+31
-30
lines changed

7 files changed

+31
-30
lines changed
 

‎apps/api/v2/src/modules/oauth-clients/controllers/oauth-client-users/oauth-client-users.controller.e2e-spec.ts

+15-19
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,9 @@ import { DEFAULT_EVENT_TYPES } from "@/ee/event-types/event-types_2024_04_15/con
44
import { HttpExceptionFilter } from "@/filters/http-exception.filter";
55
import { PrismaExceptionFilter } from "@/filters/prisma-exception.filter";
66
import { Locales } from "@/lib/enums/locales";
7-
import {
8-
CreateUserResponse,
9-
UserReturned,
10-
} from "@/modules/oauth-clients/controllers/oauth-client-users/oauth-client-users.controller";
7+
import { CreateManagedUserOutput } from "@/modules/oauth-clients/controllers/oauth-client-users/outputs/create-managed-user.output";
8+
import { GetManagedUserOutput } from "@/modules/oauth-clients/controllers/oauth-client-users/outputs/get-managed-user.output";
9+
import { GetManagedUsersOutput } from "@/modules/oauth-clients/controllers/oauth-client-users/outputs/get-managed-users.output";
1110
import { CreateManagedUserInput } from "@/modules/users/inputs/create-managed-user.input";
1211
import { UpdateManagedUserInput } from "@/modules/users/inputs/update-managed-user.input";
1312
import { UsersModule } from "@/modules/users/users.module";
@@ -81,7 +80,7 @@ describe("OAuth Client Users Endpoints", () => {
8180
let schedulesRepositoryFixture: SchedulesRepositoryFixture;
8281
let profilesRepositoryFixture: ProfileRepositoryFixture;
8382

84-
let postResponseData: CreateUserResponse;
83+
let postResponseData: CreateManagedUserOutput["data"];
8584

8685
const platformAdminEmail = "platform-sensei@mail.com";
8786
let platformAdmin: User;
@@ -150,6 +149,7 @@ describe("OAuth Client Users Endpoints", () => {
150149
const requestBody: CreateManagedUserInput = {
151150
email: userEmail,
152151
timeZone: "incorrect-time-zone",
152+
name: "Alice Smith",
153153
};
154154

155155
await request(app.getHttpServer())
@@ -166,6 +166,7 @@ describe("OAuth Client Users Endpoints", () => {
166166
weekStart: "Monday",
167167
timeFormat: 24,
168168
locale: Locales.FR,
169+
name: "Alice Smith",
169170
};
170171

171172
const response = await request(app.getHttpServer())
@@ -174,18 +175,15 @@ describe("OAuth Client Users Endpoints", () => {
174175
.send(requestBody)
175176
.expect(201);
176177

177-
const responseBody: ApiSuccessResponse<{
178-
user: Omit<User, "password">;
179-
accessToken: string;
180-
refreshToken: string;
181-
}> = response.body;
178+
const responseBody: CreateManagedUserOutput = response.body;
182179

183180
postResponseData = responseBody.data;
184181

185182
expect(responseBody.status).toEqual(SUCCESS_STATUS);
186183
expect(responseBody.data).toBeDefined();
187184
expect(responseBody.data.user.email).toEqual(getOAuthUserEmail(oAuthClient.id, requestBody.email));
188185
expect(responseBody.data.user.timeZone).toEqual(requestBody.timeZone);
186+
expect(responseBody.data.user.name).toEqual(requestBody.name);
189187
expect(responseBody.data.user.weekStart).toEqual(requestBody.weekStart);
190188
expect(responseBody.data.user.timeFormat).toEqual(requestBody.timeFormat);
191189
expect(responseBody.data.user.locale).toEqual(requestBody.locale);
@@ -242,12 +240,13 @@ describe("OAuth Client Users Endpoints", () => {
242240
.set("Origin", `${CLIENT_REDIRECT_URI}`)
243241
.expect(200);
244242

245-
const responseBody: ApiSuccessResponse<UserReturned[]> = response.body;
243+
const responseBody: GetManagedUsersOutput = response.body;
246244

247245
expect(responseBody.status).toEqual(SUCCESS_STATUS);
248246
expect(responseBody.data).toBeDefined();
249247
expect(responseBody.data?.length).toBeGreaterThan(0);
250248
expect(responseBody.data[0].email).toEqual(postResponseData.user.email);
249+
expect(responseBody.data[0].name).toEqual(postResponseData.user.name);
251250
});
252251

253252
it(`/GET/:id`, async () => {
@@ -257,7 +256,7 @@ describe("OAuth Client Users Endpoints", () => {
257256
.set("Origin", `${CLIENT_REDIRECT_URI}`)
258257
.expect(200);
259258

260-
const responseBody: ApiSuccessResponse<UserReturned> = response.body;
259+
const responseBody: GetManagedUserOutput = response.body;
261260

262261
expect(responseBody.status).toEqual(SUCCESS_STATUS);
263262
expect(responseBody.data).toBeDefined();
@@ -333,7 +332,7 @@ describe("OAuth Client Users Endpoints", () => {
333332
let eventTypesRepositoryFixture: EventTypesRepositoryFixture;
334333
let profileRepositoryFixture: ProfileRepositoryFixture;
335334

336-
let postResponseData: CreateUserResponse;
335+
let postResponseData: CreateManagedUserOutput["data"];
337336

338337
const userEmail = "oauth-client-users-user@gmail.com";
339338
const userTimeZone = "Europe/Rome";
@@ -479,6 +478,7 @@ describe("OAuth Client Users Endpoints", () => {
479478
weekStart: "Monday",
480479
timeFormat: 24,
481480
locale: Locales.FR,
481+
name: "Alice Smith",
482482
};
483483

484484
const response = await request(app.getHttpServer())
@@ -487,19 +487,15 @@ describe("OAuth Client Users Endpoints", () => {
487487
.send(requestBody)
488488
.expect(201);
489489

490-
const responseBody: ApiSuccessResponse<{
491-
user: Omit<User, "password">;
492-
accessToken: string;
493-
refreshToken: string;
494-
}> = response.body;
495-
490+
const responseBody: CreateManagedUserOutput = response.body;
496491
postResponseData = responseBody.data;
497492

498493
expect(responseBody.status).toEqual(SUCCESS_STATUS);
499494
expect(responseBody.data).toBeDefined();
500495

501496
await userHasCorrectEventTypes(responseBody.data.user.id);
502497
await teamHasCorrectEventTypes(team1.id);
498+
expect(responseBody.data.user.name).toEqual(requestBody.name);
503499
});
504500

505501
async function userHasCorrectEventTypes(userId: number) {

‎apps/api/v2/src/modules/oauth-clients/controllers/oauth-client-users/oauth-client-users.controller.ts

+1-4
Original file line numberDiff line numberDiff line change
@@ -188,6 +188,7 @@ export class OAuthClientUsersController {
188188
id: user.id,
189189
email: user.email,
190190
username: user.username,
191+
name: user.name,
191192
timeZone: user.timeZone,
192193
weekStart: user.weekStart,
193194
createdDate: user.createdDate,
@@ -197,7 +198,3 @@ export class OAuthClientUsersController {
197198
};
198199
}
199200
}
200-
201-
export type UserReturned = Pick<User, "id" | "email" | "username">;
202-
203-
export type CreateUserResponse = { user: UserReturned; accessToken: string; refreshToken: string };

‎apps/api/v2/src/modules/oauth-clients/controllers/oauth-client-users/outputs/managed-user.output.ts

+3
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,9 @@ export class ManagedUserOutput {
1313
@ApiProperty({ example: "alice" })
1414
username!: string | null;
1515

16+
@ApiProperty({ example: "alice" })
17+
name!: string | null;
18+
1619
@ApiProperty({ example: "America/New_York" })
1720
timeZone!: string;
1821

‎apps/api/v2/src/modules/oauth-clients/controllers/oauth-clients/oauth-clients.controller.ts

+1
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,7 @@ export class OAuthClientsController {
172172
id: user.id,
173173
email: user.email,
174174
username: user.username,
175+
name: user.name,
175176
timeZone: user.timeZone,
176177
weekStart: user.weekStart,
177178
createdDate: user.createdDate,

‎apps/api/v2/src/modules/oauth-clients/services/oauth-clients-users.service.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -62,10 +62,11 @@ export class OAuthClientUsersService {
6262
)[0];
6363
await this.userRepository.addToOAuthClient(user.id, oAuthClientId);
6464
const updatedUser = await this.userRepository.update(user.id, {
65-
name: body.name ?? user.username ?? undefined,
65+
name: body.name,
6666
locale: body.locale,
6767
});
6868
user.locale = updatedUser.locale;
69+
user.name = updatedUser.name;
6970
}
7071

7172
const { accessToken, refreshToken, accessTokenExpiresAt } = await this.tokensRepository.createOAuthTokens(

‎apps/api/v2/src/modules/users/inputs/create-managed-user.input.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@ export class CreateManagedUserInput {
1111
email!: string;
1212

1313
@IsString()
14-
@IsOptional()
15-
name?: string;
14+
@ApiProperty({ example: "Alice Smith", description: "Managed user's name is used in emails" })
15+
name!: string;
1616

1717
@IsOptional()
1818
@ApiProperty({ example: 12, enum: [12, 24], description: "Must be 12 or 24" })

‎apps/api/v2/swagger/documentation.json

+7-4
Original file line numberDiff line numberDiff line change
@@ -4904,6 +4904,11 @@
49044904
"type": "string",
49054905
"example": "alice@example.com"
49064906
},
4907+
"name": {
4908+
"type": "string",
4909+
"example": "Alice Smith",
4910+
"description": "Managed user's name is used in emails"
4911+
},
49074912
"timeFormat": {
49084913
"type": "number",
49094914
"example": 12,
@@ -4978,13 +4983,11 @@
49784983
],
49794984
"type": "string",
49804985
"example": "en"
4981-
},
4982-
"name": {
4983-
"type": "string"
49844986
}
49854987
},
49864988
"required": [
4987-
"email"
4989+
"email",
4990+
"name"
49884991
]
49894992
},
49904993
"CreateManagedUserData": {

0 commit comments

Comments
 (0)
Please sign in to comment.