From 07f14e4e14d4d5a1b3600c362e3a32ddedda03e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lucas=20V=C3=ADctor=20Ferreira=20de=20Ara=C3=BAjo?= <120221548+Lucas13032003@users.noreply.github.com> Date: Wed, 24 Jul 2024 09:29:09 -0300 Subject: [PATCH] test: test cases for POST selected-calendars (#15873) * test-selected_calendars * Update _post.test.ts --------- Co-authored-by: Anik Dhabal Babu <81948346+anikdhabal@users.noreply.github.com> --- .../test/lib/selected-calendars/_post.test.ts | 121 ++++++++++++++++++ 1 file changed, 121 insertions(+) create mode 100644 apps/api/v1/test/lib/selected-calendars/_post.test.ts diff --git a/apps/api/v1/test/lib/selected-calendars/_post.test.ts b/apps/api/v1/test/lib/selected-calendars/_post.test.ts new file mode 100644 index 0000000000..dea72fdaa5 --- /dev/null +++ b/apps/api/v1/test/lib/selected-calendars/_post.test.ts @@ -0,0 +1,121 @@ +import prismaMock from "../../../../../../tests/libs/__mocks__/prismaMock"; + +import type { Request, Response } from "express"; +import type { NextApiRequest, NextApiResponse } from "next"; +import { createMocks } from "node-mocks-http"; +import { describe, expect, test } from "vitest"; + +import { HttpError } from "@calcom/lib/http-error"; + +import handler from "../../../pages/api/selected-calendars/_post"; + +type CustomNextApiRequest = NextApiRequest & Request; +type CustomNextApiResponse = NextApiResponse & Response; + +describe("POST /api/selected-calendars", () => { + describe("Errors", () => { + test("Returns 403 if non-admin user tries to set userId in body", async () => { + const { req, res } = createMocks({ + method: "POST", + body: { + integration: "google", + externalId: "ext123", + userId: 444444, + }, + }); + + req.userId = 333333; + + try { + await handler(req, res); + } catch (e) { + expect(e).toBeInstanceOf(HttpError); + expect((e as HttpError).statusCode).toBe(403); + expect((e as HttpError).message).toBe("ADMIN required for userId"); + } + }); + + test("Returns 400 if request body is invalid", async () => { + const { req, res } = createMocks({ + method: "POST", + body: { + integration: "google", + }, + }); + + req.userId = 333333; + req.isSystemWideAdmin = true; + + await handler(req, res); + + expect(res.statusCode).toBe(400); + expect(JSON.parse(res._getData()).message).toBe("invalid_type in 'externalId': Required"); + }); + }); + + describe("Success", () => { + test("Creates selected calendar if user is admin and sets bodyUserId", async () => { + const { req, res } = createMocks({ + method: "POST", + query: { + apiKey: "validApiKey", + }, + body: { + integration: "google", + externalId: "ext123", + userId: 444444, + }, + }); + + req.userId = 333333; + req.isSystemWideAdmin = true; + + prismaMock.user.findFirstOrThrow.mockResolvedValue({ + id: 444444, + } as any); + + prismaMock.selectedCalendar.create.mockResolvedValue({ + credentialId: 1, + integration: "google", + externalId: "ext123", + userId: 444444, + }); + + await handler(req, res); + + expect(res.statusCode).toBe(200); + const responseData = JSON.parse(res._getData()); + expect(responseData.selected_calendar.credentialId).toBe(1); + expect(responseData.message).toBe("Selected Calendar created successfully"); + }); + + test("Creates selected calendar if user is non-admin and does not set bodyUserId", async () => { + const { req, res } = createMocks({ + method: "POST", + query: { + apiKey: "validApiKey", + }, + body: { + integration: "google", + externalId: "ext123", + }, + }); + + req.userId = 333333; + + prismaMock.selectedCalendar.create.mockResolvedValue({ + credentialId: 1, + integration: "google", + externalId: "ext123", + userId: 333333, + }); + + await handler(req, res); + + expect(res.statusCode).toBe(200); + const responseData = JSON.parse(res._getData()); + expect(responseData.selected_calendar.credentialId).toBe(1); + expect(responseData.message).toBe("Selected Calendar created successfully"); + }); + }); +});