From dcc62c6db0b861ac865dc697311380ff4a0f05d4 Mon Sep 17 00:00:00 2001 From: Lauris Skraucis Date: Wed, 24 Jul 2024 14:52:42 +0200 Subject: [PATCH] fix: CreateAvailabilityInput_2024_04_15 Cannot read properties of undefined (#15885) --- .../schedules.controller.e2e-spec.ts | 31 +++++++++++++++++++ .../inputs/create-availability.input.ts | 12 ++++++- 2 files changed, 42 insertions(+), 1 deletion(-) diff --git a/apps/api/v2/src/ee/schedules/schedules_2024_04_15/controllers/schedules.controller.e2e-spec.ts b/apps/api/v2/src/ee/schedules/schedules_2024_04_15/controllers/schedules.controller.e2e-spec.ts index c20768bd0b..370cd14929 100644 --- a/apps/api/v2/src/ee/schedules/schedules_2024_04_15/controllers/schedules.controller.e2e-spec.ts +++ b/apps/api/v2/src/ee/schedules/schedules_2024_04_15/controllers/schedules.controller.e2e-spec.ts @@ -66,6 +66,37 @@ describe("Schedules Endpoints", () => { expect(user).toBeDefined(); }); + it("should not create an invalid schedule", async () => { + const scheduleName = "schedule-name"; + const scheduleTimeZone = "Europe/Rome"; + const isDefault = true; + + const body = { + name: scheduleName, + timeZone: scheduleTimeZone, + isDefault, + availabilities: [ + { + days: ["Monday"], + endTime: "11:15", + startTime: "10:00", + }, + ], + }; + + return request(app.getHttpServer()) + .post("/api/v2/schedules") + .set(CAL_API_VERSION_HEADER, VERSION_2024_04_15) + .send(body) + .expect(400) + .then(async (response) => { + expect(response.body.status).toEqual("error"); + expect(response.body.error.message).toEqual( + "Invalid datestring format. Expected format(ISO8061): 2025-04-12T13:17:56.324Z. Received: 11:15" + ); + }); + }); + it("should create a default schedule", async () => { const scheduleName = "schedule-name"; const scheduleTimeZone = "Europe/Rome"; diff --git a/apps/api/v2/src/ee/schedules/schedules_2024_04_15/inputs/create-availability.input.ts b/apps/api/v2/src/ee/schedules/schedules_2024_04_15/inputs/create-availability.input.ts index 2c3724c20c..f8346b83a8 100644 --- a/apps/api/v2/src/ee/schedules/schedules_2024_04_15/inputs/create-availability.input.ts +++ b/apps/api/v2/src/ee/schedules/schedules_2024_04_15/inputs/create-availability.input.ts @@ -19,8 +19,18 @@ export class CreateAvailabilityInput_2024_04_15 { } function transformStringToDate(value: string, key: string): Date { - // note(Lauris): incoming value is ISO8061 e.g. 2025-0412T13:17:56.324Z + if (!value) { + throw new BadRequestException( + `Missing ${key}. Expected value is in ISO8061 format e.g. 2025-0412T13:17:56.324Z` + ); + } + const dateTimeParts = value.split("T"); + if (dateTimeParts.length !== 2) { + throw new BadRequestException( + `Invalid datestring format. Expected format(ISO8061): 2025-04-12T13:17:56.324Z. Received: ${value}` + ); + } const timePart = dateTimeParts[1].split(".")[0]; // Removes milliseconds const parts = timePart.split(":");