From 3be7fb9dd85dd5eae45b870d63433dd463936e91 Mon Sep 17 00:00:00 2001 From: Lauris Skraucis Date: Mon, 29 Sep 2025 13:12:18 +0200 Subject: [PATCH] fix: v2 create org user with time zone (#24133) * fix: tzdata undefined import * refactor: capitalize org user timezone * test: org user creation with time zone --- .../users/index/controllers/organizations-users.e2e-spec.ts | 2 ++ apps/api/v2/src/modules/users/inputs/create-user.input.ts | 2 ++ apps/api/v2/src/modules/users/validators/timeZoneValidator.ts | 2 +- 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/apps/api/v2/src/modules/organizations/users/index/controllers/organizations-users.e2e-spec.ts b/apps/api/v2/src/modules/organizations/users/index/controllers/organizations-users.e2e-spec.ts index c65af6da3a..ed6f364dc4 100644 --- a/apps/api/v2/src/modules/organizations/users/index/controllers/organizations-users.e2e-spec.ts +++ b/apps/api/v2/src/modules/organizations/users/index/controllers/organizations-users.e2e-spec.ts @@ -351,6 +351,7 @@ describe("Organizations Users Endpoints", () => { email: `organizations-users-new-member-${randomString()}@api.com`, bio, metadata, + timeZone: "Europe/Rome", }; const emailSpy = jest @@ -367,6 +368,7 @@ describe("Organizations Users Endpoints", () => { expect(userData.email).toBe(newOrgUser.email); expect(userData.bio).toBe(newOrgUser.bio); expect(userData.metadata).toEqual(newOrgUser.metadata); + expect(userData.timeZone).toBe(newOrgUser.timeZone); expect(emailSpy).toHaveBeenCalledWith({ usernameOrEmail: newOrgUser.email, orgName: org.name, diff --git a/apps/api/v2/src/modules/users/inputs/create-user.input.ts b/apps/api/v2/src/modules/users/inputs/create-user.input.ts index 7bcd9d504c..93c0de0132 100644 --- a/apps/api/v2/src/modules/users/inputs/create-user.input.ts +++ b/apps/api/v2/src/modules/users/inputs/create-user.input.ts @@ -1,3 +1,4 @@ +import { CapitalizeTimeZone } from "@/lib/inputs/capitalize-timezone"; import { ApiProperty, ApiPropertyOptional } from "@nestjs/swagger"; import { Expose, Transform } from "class-transformer"; import { @@ -112,6 +113,7 @@ export class CreateUserInput { @ApiProperty({ type: String, required: false, description: "Time zone", example: "America/New_York" }) @IsOptional() @IsString() + @CapitalizeTimeZone() @Validate(TimeZoneValidator) @Expose() timeZone?: string; diff --git a/apps/api/v2/src/modules/users/validators/timeZoneValidator.ts b/apps/api/v2/src/modules/users/validators/timeZoneValidator.ts index 448d79f0d0..dcd2c14745 100644 --- a/apps/api/v2/src/modules/users/validators/timeZoneValidator.ts +++ b/apps/api/v2/src/modules/users/validators/timeZoneValidator.ts @@ -1,6 +1,6 @@ import type { ValidatorConstraintInterface } from "class-validator"; import { ValidatorConstraint } from "class-validator"; -import tzdata from "tzdata"; +import * as tzdata from "tzdata"; @ValidatorConstraint({ name: "timezoneValidator", async: false }) export class TimeZoneValidator implements ValidatorConstraintInterface {