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
This commit is contained in:
Lauris Skraucis authored and GitHub committed 2024-09-20 21:00:04 +00:00
1 parent f52497f181
commit 9749ba1cd0
7 files changed
+31 -30

No files matched your search

@@ -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<User, "password">;
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<UserReturned[]> = 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<UserReturned> = 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<User, "password">;
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) {
@@ -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<User, "id" | "email" | "username">;
export type CreateUserResponse = { user: UserReturned; accessToken: string; refreshToken: string };
@@ -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;
@@ -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,
@@ -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(
@@ -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" })
+7 -4
View File
@@ -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": {