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:
1 parent
f52497f181
commit
9749ba1cd0
7 files changed
+31
-30
No files matched your search
+15
-19
@@ -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) {
|
||||
|
||||
+1
-4
@@ -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 };
|
||||
+3
@@ -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;
|
||||
|
||||
|
||||
+1
@@ -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" })
|
||||
|
||||
@@ -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": {
|
||||
|
||||
Reference in new issue
Block a user