From 9749ba1cd09251375a9dbd8df168a8c859d10423 Mon Sep 17 00:00:00 2001 From: Lauris Skraucis Date: Fri, 20 Sep 2024 23:00:04 +0200 Subject: [PATCH] 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 --- .../oauth-client-users.controller.e2e-spec.ts | 34 ++++++++----------- .../oauth-client-users.controller.ts | 5 +-- .../outputs/managed-user.output.ts | 3 ++ .../oauth-clients/oauth-clients.controller.ts | 1 + .../services/oauth-clients-users.service.ts | 3 +- .../users/inputs/create-managed-user.input.ts | 4 +-- apps/api/v2/swagger/documentation.json | 11 +++--- 7 files changed, 31 insertions(+), 30 deletions(-) diff --git a/apps/api/v2/src/modules/oauth-clients/controllers/oauth-client-users/oauth-client-users.controller.e2e-spec.ts b/apps/api/v2/src/modules/oauth-clients/controllers/oauth-client-users/oauth-client-users.controller.e2e-spec.ts index 4665fa2896..033a4b86ea 100644 --- a/apps/api/v2/src/modules/oauth-clients/controllers/oauth-client-users/oauth-client-users.controller.e2e-spec.ts +++ b/apps/api/v2/src/modules/oauth-clients/controllers/oauth-client-users/oauth-client-users.controller.e2e-spec.ts @@ -4,10 +4,9 @@ import { DEFAULT_EVENT_TYPES } from "@/ee/event-types/event-types_2024_04_15/con import { HttpExceptionFilter } from "@/filters/http-exception.filter"; import { PrismaExceptionFilter } from "@/filters/prisma-exception.filter"; import { Locales } from "@/lib/enums/locales"; -import { - CreateUserResponse, - UserReturned, -} from "@/modules/oauth-clients/controllers/oauth-client-users/oauth-client-users.controller"; +import { CreateManagedUserOutput } from "@/modules/oauth-clients/controllers/oauth-client-users/outputs/create-managed-user.output"; +import { GetManagedUserOutput } from "@/modules/oauth-clients/controllers/oauth-client-users/outputs/get-managed-user.output"; +import { GetManagedUsersOutput } from "@/modules/oauth-clients/controllers/oauth-client-users/outputs/get-managed-users.output"; import { CreateManagedUserInput } from "@/modules/users/inputs/create-managed-user.input"; import { UpdateManagedUserInput } from "@/modules/users/inputs/update-managed-user.input"; import { UsersModule } from "@/modules/users/users.module"; @@ -81,7 +80,7 @@ describe("OAuth Client Users Endpoints", () => { let schedulesRepositoryFixture: SchedulesRepositoryFixture; let profilesRepositoryFixture: ProfileRepositoryFixture; - let postResponseData: CreateUserResponse; + let postResponseData: CreateManagedUserOutput["data"]; const platformAdminEmail = "platform-sensei@mail.com"; let platformAdmin: User; @@ -150,6 +149,7 @@ describe("OAuth Client Users Endpoints", () => { const requestBody: CreateManagedUserInput = { email: userEmail, timeZone: "incorrect-time-zone", + name: "Alice Smith", }; await request(app.getHttpServer()) @@ -166,6 +166,7 @@ describe("OAuth Client Users Endpoints", () => { weekStart: "Monday", timeFormat: 24, locale: Locales.FR, + name: "Alice Smith", }; const response = await request(app.getHttpServer()) @@ -174,11 +175,7 @@ describe("OAuth Client Users Endpoints", () => { .send(requestBody) .expect(201); - const responseBody: ApiSuccessResponse<{ - user: Omit; - accessToken: string; - refreshToken: string; - }> = response.body; + const responseBody: CreateManagedUserOutput = response.body; postResponseData = responseBody.data; @@ -186,6 +183,7 @@ describe("OAuth Client Users Endpoints", () => { expect(responseBody.data).toBeDefined(); expect(responseBody.data.user.email).toEqual(getOAuthUserEmail(oAuthClient.id, requestBody.email)); expect(responseBody.data.user.timeZone).toEqual(requestBody.timeZone); + expect(responseBody.data.user.name).toEqual(requestBody.name); expect(responseBody.data.user.weekStart).toEqual(requestBody.weekStart); expect(responseBody.data.user.timeFormat).toEqual(requestBody.timeFormat); expect(responseBody.data.user.locale).toEqual(requestBody.locale); @@ -242,12 +240,13 @@ describe("OAuth Client Users Endpoints", () => { .set("Origin", `${CLIENT_REDIRECT_URI}`) .expect(200); - const responseBody: ApiSuccessResponse = response.body; + const responseBody: GetManagedUsersOutput = response.body; expect(responseBody.status).toEqual(SUCCESS_STATUS); expect(responseBody.data).toBeDefined(); expect(responseBody.data?.length).toBeGreaterThan(0); expect(responseBody.data[0].email).toEqual(postResponseData.user.email); + expect(responseBody.data[0].name).toEqual(postResponseData.user.name); }); it(`/GET/:id`, async () => { @@ -257,7 +256,7 @@ describe("OAuth Client Users Endpoints", () => { .set("Origin", `${CLIENT_REDIRECT_URI}`) .expect(200); - const responseBody: ApiSuccessResponse = response.body; + const responseBody: GetManagedUserOutput = response.body; expect(responseBody.status).toEqual(SUCCESS_STATUS); expect(responseBody.data).toBeDefined(); @@ -333,7 +332,7 @@ describe("OAuth Client Users Endpoints", () => { let eventTypesRepositoryFixture: EventTypesRepositoryFixture; let profileRepositoryFixture: ProfileRepositoryFixture; - let postResponseData: CreateUserResponse; + let postResponseData: CreateManagedUserOutput["data"]; const userEmail = "oauth-client-users-user@gmail.com"; const userTimeZone = "Europe/Rome"; @@ -479,6 +478,7 @@ describe("OAuth Client Users Endpoints", () => { weekStart: "Monday", timeFormat: 24, locale: Locales.FR, + name: "Alice Smith", }; const response = await request(app.getHttpServer()) @@ -487,12 +487,7 @@ describe("OAuth Client Users Endpoints", () => { .send(requestBody) .expect(201); - const responseBody: ApiSuccessResponse<{ - user: Omit; - accessToken: string; - refreshToken: string; - }> = response.body; - + const responseBody: CreateManagedUserOutput = response.body; postResponseData = responseBody.data; expect(responseBody.status).toEqual(SUCCESS_STATUS); @@ -500,6 +495,7 @@ describe("OAuth Client Users Endpoints", () => { await userHasCorrectEventTypes(responseBody.data.user.id); await teamHasCorrectEventTypes(team1.id); + expect(responseBody.data.user.name).toEqual(requestBody.name); }); async function userHasCorrectEventTypes(userId: number) { diff --git a/apps/api/v2/src/modules/oauth-clients/controllers/oauth-client-users/oauth-client-users.controller.ts b/apps/api/v2/src/modules/oauth-clients/controllers/oauth-client-users/oauth-client-users.controller.ts index b92e22df12..58206f1fc4 100644 --- a/apps/api/v2/src/modules/oauth-clients/controllers/oauth-client-users/oauth-client-users.controller.ts +++ b/apps/api/v2/src/modules/oauth-clients/controllers/oauth-client-users/oauth-client-users.controller.ts @@ -188,6 +188,7 @@ export class OAuthClientUsersController { id: user.id, email: user.email, username: user.username, + name: user.name, timeZone: user.timeZone, weekStart: user.weekStart, createdDate: user.createdDate, @@ -197,7 +198,3 @@ export class OAuthClientUsersController { }; } } - -export type UserReturned = Pick; - -export type CreateUserResponse = { user: UserReturned; accessToken: string; refreshToken: string }; diff --git a/apps/api/v2/src/modules/oauth-clients/controllers/oauth-client-users/outputs/managed-user.output.ts b/apps/api/v2/src/modules/oauth-clients/controllers/oauth-client-users/outputs/managed-user.output.ts index 5dc46fd4a4..fee340c659 100644 --- a/apps/api/v2/src/modules/oauth-clients/controllers/oauth-client-users/outputs/managed-user.output.ts +++ b/apps/api/v2/src/modules/oauth-clients/controllers/oauth-client-users/outputs/managed-user.output.ts @@ -13,6 +13,9 @@ export class ManagedUserOutput { @ApiProperty({ example: "alice" }) username!: string | null; + @ApiProperty({ example: "alice" }) + name!: string | null; + @ApiProperty({ example: "America/New_York" }) timeZone!: string; diff --git a/apps/api/v2/src/modules/oauth-clients/controllers/oauth-clients/oauth-clients.controller.ts b/apps/api/v2/src/modules/oauth-clients/controllers/oauth-clients/oauth-clients.controller.ts index c3788b9a87..bc9d941288 100644 --- a/apps/api/v2/src/modules/oauth-clients/controllers/oauth-clients/oauth-clients.controller.ts +++ b/apps/api/v2/src/modules/oauth-clients/controllers/oauth-clients/oauth-clients.controller.ts @@ -172,6 +172,7 @@ export class OAuthClientsController { id: user.id, email: user.email, username: user.username, + name: user.name, timeZone: user.timeZone, weekStart: user.weekStart, createdDate: user.createdDate, diff --git a/apps/api/v2/src/modules/oauth-clients/services/oauth-clients-users.service.ts b/apps/api/v2/src/modules/oauth-clients/services/oauth-clients-users.service.ts index b2a421077f..c8ca87236c 100644 --- a/apps/api/v2/src/modules/oauth-clients/services/oauth-clients-users.service.ts +++ b/apps/api/v2/src/modules/oauth-clients/services/oauth-clients-users.service.ts @@ -62,10 +62,11 @@ export class OAuthClientUsersService { )[0]; await this.userRepository.addToOAuthClient(user.id, oAuthClientId); const updatedUser = await this.userRepository.update(user.id, { - name: body.name ?? user.username ?? undefined, + name: body.name, locale: body.locale, }); user.locale = updatedUser.locale; + user.name = updatedUser.name; } const { accessToken, refreshToken, accessTokenExpiresAt } = await this.tokensRepository.createOAuthTokens( diff --git a/apps/api/v2/src/modules/users/inputs/create-managed-user.input.ts b/apps/api/v2/src/modules/users/inputs/create-managed-user.input.ts index 2be466e15a..7424dfa287 100644 --- a/apps/api/v2/src/modules/users/inputs/create-managed-user.input.ts +++ b/apps/api/v2/src/modules/users/inputs/create-managed-user.input.ts @@ -11,8 +11,8 @@ export class CreateManagedUserInput { email!: string; @IsString() - @IsOptional() - name?: string; + @ApiProperty({ example: "Alice Smith", description: "Managed user's name is used in emails" }) + name!: string; @IsOptional() @ApiProperty({ example: 12, enum: [12, 24], description: "Must be 12 or 24" }) diff --git a/apps/api/v2/swagger/documentation.json b/apps/api/v2/swagger/documentation.json index 6fd37c188b..3f6e1df772 100644 --- a/apps/api/v2/swagger/documentation.json +++ b/apps/api/v2/swagger/documentation.json @@ -4904,6 +4904,11 @@ "type": "string", "example": "alice@example.com" }, + "name": { + "type": "string", + "example": "Alice Smith", + "description": "Managed user's name is used in emails" + }, "timeFormat": { "type": "number", "example": 12, @@ -4978,13 +4983,11 @@ ], "type": "string", "example": "en" - }, - "name": { - "type": "string" } }, "required": [ - "email" + "email", + "name" ] }, "CreateManagedUserData": {