* refactor: move repositories from lib to features domain folders - Move HolidayRepository to features/holidays/repositories - Move PrismaTrackingRepository to features/bookings/repositories - Move PrismaBookingPaymentRepository to features/bookings/repositories - Move PrismaRoutingFormResponseRepository to features/routing-forms/repositories - Move PrismaAssignmentReasonRepository to features/assignment-reason/repositories - Move VerificationTokenRepository to features/auth/repositories - Move WorkspacePlatformRepository to features/workspace-platform/repositories - Move DTO files to their respective feature domains - Merge lib DestinationCalendarRepository into features version - Merge lib SelectedCalendarRepository into features version - Update all import paths across the codebase This follows the vertical slice architecture pattern by organizing repositories by domain rather than by technical layer. Co-Authored-By: benny@cal.com <sldisek783@gmail.com> * fix: update VerificationTokenService import path to new location Co-Authored-By: benny@cal.com <sldisek783@gmail.com> * fix: update test file imports to use new repository locations Co-Authored-By: benny@cal.com <sldisek783@gmail.com> * mv * fix structure * fix * refactor: merge unit tests for SelectedCalendarRepository into single file Co-Authored-By: benny@cal.com <sldisek783@gmail.com> --------- Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
96 lines
3.5 KiB
TypeScript
96 lines
3.5 KiB
TypeScript
import { describe, it, expect, beforeEach, vi } from "vitest";
|
|
|
|
import type { RoutingFormResponseRepositoryInterface } from "@calcom/features/routing-forms/repositories/RoutingFormResponseRepository.interface";
|
|
|
|
import { RoutingFormResponseDataFactory } from "./RoutingFormResponseDataFactory";
|
|
import { parseRoutingFormResponse } from "./responseData/parseRoutingFormResponse";
|
|
|
|
vi.mock("./responseData/parseRoutingFormResponse", () => ({
|
|
parseRoutingFormResponse: vi.fn(),
|
|
}));
|
|
|
|
const mockLogger = {
|
|
getSubLogger: () => ({
|
|
error: vi.fn(),
|
|
}),
|
|
};
|
|
|
|
const mockRoutingFormResponseRepo: RoutingFormResponseRepositoryInterface = {
|
|
findByBookingUidIncludeForm: vi.fn(),
|
|
findByIdIncludeForm: vi.fn(),
|
|
};
|
|
|
|
describe("RoutingFormResponseDataFactory", () => {
|
|
let factory: RoutingFormResponseDataFactory;
|
|
|
|
beforeEach(() => {
|
|
vi.clearAllMocks();
|
|
factory = new RoutingFormResponseDataFactory({
|
|
logger: mockLogger as any,
|
|
routingFormResponseRepo: mockRoutingFormResponseRepo,
|
|
});
|
|
});
|
|
|
|
describe("createWithBookingUid", () => {
|
|
it("should call parseRoutingFormResponse with correct data when form response is found", async () => {
|
|
const mockFormResponse = {
|
|
id: 1,
|
|
response: { name: "test" },
|
|
form: { fields: [{ label: "name", type: "text" }] },
|
|
};
|
|
const bookingUid = "test-uid";
|
|
vi.mocked(mockRoutingFormResponseRepo.findByBookingUidIncludeForm).mockResolvedValue(
|
|
mockFormResponse as any
|
|
);
|
|
|
|
const result = await factory.createWithBookingUid(bookingUid);
|
|
|
|
expect(mockRoutingFormResponseRepo.findByBookingUidIncludeForm).toHaveBeenCalledWith(bookingUid);
|
|
expect(parseRoutingFormResponse).toHaveBeenCalledWith(
|
|
mockFormResponse.response,
|
|
mockFormResponse.form.fields
|
|
);
|
|
});
|
|
|
|
it("should throw an error if form response is not found", async () => {
|
|
const bookingUid = "test-uid";
|
|
vi.mocked(mockRoutingFormResponseRepo.findByBookingUidIncludeForm).mockResolvedValue(null);
|
|
|
|
await expect(factory.createWithBookingUid(bookingUid)).rejects.toThrow("Form response not found");
|
|
|
|
expect(mockRoutingFormResponseRepo.findByBookingUidIncludeForm).toHaveBeenCalledWith(bookingUid);
|
|
expect(parseRoutingFormResponse).not.toHaveBeenCalled();
|
|
});
|
|
});
|
|
|
|
describe("createWithResponseId", () => {
|
|
it("should call parseRoutingFormResponse with correct data when form response is found", async () => {
|
|
const mockFormResponse = {
|
|
id: 1,
|
|
response: { email: "test@example.com" },
|
|
form: { fields: [{ label: "email", type: "email" }] },
|
|
};
|
|
const responseId = 1;
|
|
vi.mocked(mockRoutingFormResponseRepo.findByIdIncludeForm).mockResolvedValue(mockFormResponse as any);
|
|
|
|
const result = await factory.createWithResponseId(responseId);
|
|
|
|
expect(mockRoutingFormResponseRepo.findByIdIncludeForm).toHaveBeenCalledWith(responseId);
|
|
expect(parseRoutingFormResponse).toHaveBeenCalledWith(
|
|
mockFormResponse.response,
|
|
mockFormResponse.form.fields
|
|
);
|
|
});
|
|
|
|
it("should throw an error if form response is not found", async () => {
|
|
const responseId = 1;
|
|
vi.mocked(mockRoutingFormResponseRepo.findByIdIncludeForm).mockResolvedValue(null);
|
|
|
|
await expect(factory.createWithResponseId(responseId)).rejects.toThrow("Form response not found");
|
|
|
|
expect(mockRoutingFormResponseRepo.findByIdIncludeForm).toHaveBeenCalledWith(responseId);
|
|
expect(parseRoutingFormResponse).not.toHaveBeenCalled();
|
|
});
|
|
});
|
|
});
|