Files
calendar/packages/app-store/routing-forms/lib/RoutingFormResponseDataFactory.test.ts
T
Benny JooGitHubDevin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
96bec9f7b9 refactor: Move repositories from @calcom/lib to @calcom/features domain folders (#27570)
* 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>
2026-02-09 08:41:04 -03:00

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();
});
});
});