mirror of
https://github.com/formbricks/formbricks.git
synced 2026-01-06 05:40:02 -06:00
111 lines
3.8 KiB
TypeScript
111 lines
3.8 KiB
TypeScript
import { mockContact } from "../../response/tests/__mocks__/data.mock";
|
|
import {
|
|
mockDisplay,
|
|
mockDisplayInput,
|
|
mockDisplayInputWithUserId,
|
|
mockDisplayWithPersonId,
|
|
mockEnvironment,
|
|
mockEnvironmentId,
|
|
mockSurveyId,
|
|
} from "./__mocks__/data.mock";
|
|
import { prisma } from "@/lib/__mocks__/database";
|
|
import { Prisma } from "@prisma/client";
|
|
import { afterEach, beforeEach, describe, expect, test, vi } from "vitest";
|
|
import { testInputValidation } from "vitestSetup";
|
|
import { PrismaErrorType } from "@formbricks/database/types/error";
|
|
import { DatabaseError } from "@formbricks/types/errors";
|
|
import { createDisplay } from "@/app/api/v1/client/[environmentId]/displays/lib/display";
|
|
import { deleteDisplay } from "../service";
|
|
|
|
beforeEach(() => {
|
|
vi.resetModules();
|
|
vi.resetAllMocks();
|
|
});
|
|
|
|
afterEach(() => {
|
|
vi.clearAllMocks();
|
|
});
|
|
|
|
beforeEach(() => {
|
|
prisma.contact.findFirst.mockResolvedValue(mockContact);
|
|
prisma.survey.findUnique.mockResolvedValue({
|
|
id: mockSurveyId,
|
|
name: "Test Survey",
|
|
environmentId: mockEnvironmentId,
|
|
} as any);
|
|
});
|
|
|
|
describe("Tests for createDisplay service", () => {
|
|
describe("Happy Path", () => {
|
|
test("Creates a new display when a userId exists", async () => {
|
|
prisma.environment.findUnique.mockResolvedValue(mockEnvironment as any);
|
|
prisma.display.create.mockResolvedValue(mockDisplayWithPersonId as any);
|
|
|
|
const display = await createDisplay(mockDisplayInputWithUserId);
|
|
expect(display).toEqual(mockDisplayWithPersonId);
|
|
});
|
|
|
|
test("Creates a new display when a userId does not exists", async () => {
|
|
prisma.display.create.mockResolvedValue(mockDisplay as any);
|
|
|
|
const display = await createDisplay(mockDisplayInput);
|
|
expect(display).toEqual(mockDisplay);
|
|
});
|
|
});
|
|
|
|
describe("Sad Path", () => {
|
|
testInputValidation(createDisplay, "123");
|
|
|
|
test("Throws DatabaseError on PrismaClientKnownRequestError occurrence", async () => {
|
|
const mockErrorMessage = "Mock error message";
|
|
prisma.environment.findUnique.mockResolvedValue(mockEnvironment as any);
|
|
const errToThrow = new Prisma.PrismaClientKnownRequestError(mockErrorMessage, {
|
|
code: PrismaErrorType.UniqueConstraintViolation,
|
|
clientVersion: "0.0.1",
|
|
});
|
|
|
|
prisma.display.create.mockRejectedValue(errToThrow);
|
|
|
|
await expect(createDisplay(mockDisplayInputWithUserId)).rejects.toThrow(DatabaseError);
|
|
});
|
|
|
|
test("Throws a generic Error for other exceptions", async () => {
|
|
const mockErrorMessage = "Mock error message";
|
|
prisma.display.create.mockRejectedValue(new Error(mockErrorMessage));
|
|
|
|
await expect(createDisplay(mockDisplayInput)).rejects.toThrow(Error);
|
|
});
|
|
});
|
|
});
|
|
|
|
describe("Tests for delete display service", () => {
|
|
describe("Happy Path", () => {
|
|
test("Deletes a display", async () => {
|
|
prisma.display.delete.mockResolvedValue(mockDisplay as any);
|
|
|
|
const display = await deleteDisplay(mockDisplay.id);
|
|
expect(display).toEqual(mockDisplay);
|
|
});
|
|
});
|
|
describe("Sad Path", () => {
|
|
test("Throws DatabaseError on PrismaClientKnownRequestError occurrence", async () => {
|
|
const mockErrorMessage = "Mock error message";
|
|
const errToThrow = new Prisma.PrismaClientKnownRequestError(mockErrorMessage, {
|
|
code: PrismaErrorType.UniqueConstraintViolation,
|
|
clientVersion: "0.0.1",
|
|
});
|
|
|
|
prisma.display.delete.mockRejectedValue(errToThrow);
|
|
|
|
await expect(deleteDisplay(mockDisplay.id)).rejects.toThrow(DatabaseError);
|
|
});
|
|
|
|
test("Throws a generic Error for other exceptions", async () => {
|
|
const mockErrorMessage = "Mock error message";
|
|
prisma.display.delete.mockRejectedValue(new Error(mockErrorMessage));
|
|
|
|
await expect(deleteDisplay(mockDisplay.id)).rejects.toThrow(Error);
|
|
});
|
|
});
|
|
});
|