Files
98b6d63164 refactor: apply biome formatting to packages/features (#27844)
* refactor: apply biome formatting to packages/features (batch 1 - small subdirs)

Format small subdirectories in packages/features: di, flags, holidays, oauth,
settings, users, assignment-reason, selectedCalendar, hashedLink, host, form,
form-builder, availability, data-table, pbac, schedules, troubleshooter,
eventtypes, calendar-subscription, and root-level files.

Also includes straggler apps/web BookEventForm.tsx.

Co-Authored-By: Claude Opus 4.6 <[email protected]>

* refactor: apply biome formatting to packages/features (batch 2 - medium subdirs)

Format medium subdirectories in packages/features: auth, credentials,
calendars, routing-forms, routing-trace, attributes, watchlist, calAIPhone,
tasker, and webhooks.

Co-Authored-By: Claude Opus 4.6 <[email protected]>

* refactor: apply biome formatting to packages/features (batch 3 - bookings + insights)

Format bookings and insights subdirectories in packages/features.

Co-Authored-By: Claude Opus 4.6 <[email protected]>

* refactor: apply biome formatting to packages/features (batch 4 - ee)

Format packages/features/ee subdirectory covering billing, workflows,
organizations, teams, managed-event-types, round-robin, dsync,
integration-attribute-sync, and payments.

Co-Authored-By: Claude Opus 4.6 <[email protected]>

* refactor: apply biome formatting to packages/features (batch 5 - booking-audit part 1)

Format booking-audit di, actions, common, dto, repository, and types
subdirectories in packages/features/booking-audit.

Co-Authored-By: Claude Opus 4.6 <[email protected]>

* refactor: apply biome formatting to packages/features (batch 6 - booking-audit part 2)

Format booking-audit service subdirectory in packages/features/booking-audit.

Co-Authored-By: Claude Opus 4.6 <[email protected]>

---------

Co-authored-by: Claude Opus 4.6 <[email protected]>
2026-02-11 15:47:14 +01:00

326 lines
8.9 KiB
TypeScript

import prismaMock from "@calcom/testing/lib/__mocks__/prismaMock";
import { beforeEach, describe, expect, it, vi } from "vitest";
import { HolidayRepository } from "./HolidayRepository";
describe("HolidayRepository", () => {
beforeEach(() => {
vi.clearAllMocks();
});
describe("findUserSettings", () => {
it("should return user holiday settings when they exist", async () => {
const mockSettings = {
id: 1,
userId: 123,
countryCode: "US",
disabledIds: ["holiday_1", "holiday_2"],
createdAt: new Date(),
updatedAt: new Date(),
};
prismaMock.userHolidaySettings.findUnique.mockResolvedValue(mockSettings);
const result = await HolidayRepository.findUserSettings({ userId: 123 });
expect(prismaMock.userHolidaySettings.findUnique).toHaveBeenCalledWith({
where: { userId: 123 },
select: {
id: true,
userId: true,
countryCode: true,
disabledIds: true,
createdAt: true,
updatedAt: true,
},
});
expect(result).toEqual(mockSettings);
});
it("should return null when user has no holiday settings", async () => {
prismaMock.userHolidaySettings.findUnique.mockResolvedValue(null);
const result = await HolidayRepository.findUserSettings({ userId: 456 });
expect(prismaMock.userHolidaySettings.findUnique).toHaveBeenCalledWith({
where: { userId: 456 },
select: expect.any(Object),
});
expect(result).toBeNull();
});
});
describe("findUserSettingsSelect", () => {
it("should return user settings with custom select", async () => {
const mockSettings = {
countryCode: "GB",
disabledIds: [],
};
prismaMock.userHolidaySettings.findUnique.mockResolvedValue(mockSettings);
const result = await HolidayRepository.findUserSettingsSelect({
userId: 123,
select: {
countryCode: true,
disabledIds: true,
},
});
expect(prismaMock.userHolidaySettings.findUnique).toHaveBeenCalledWith({
where: { userId: 123 },
select: {
countryCode: true,
disabledIds: true,
},
});
expect(result).toEqual(mockSettings);
});
});
describe("upsertUserSettings", () => {
it("should create new settings when user has none", async () => {
const mockSettings = {
id: 1,
userId: 123,
countryCode: "US",
disabledIds: [],
createdAt: new Date(),
updatedAt: new Date(),
};
prismaMock.userHolidaySettings.upsert.mockResolvedValue(mockSettings);
const result = await HolidayRepository.upsertUserSettings({
userId: 123,
countryCode: "US",
});
expect(prismaMock.userHolidaySettings.upsert).toHaveBeenCalledWith({
where: { userId: 123 },
create: {
userId: 123,
countryCode: "US",
disabledIds: [],
},
update: {
countryCode: "US",
},
select: expect.any(Object),
});
expect(result).toEqual(mockSettings);
});
it("should reset disabled holidays when resetDisabledHolidays is true", async () => {
const mockSettings = {
id: 1,
userId: 123,
countryCode: "GB",
disabledIds: [],
createdAt: new Date(),
updatedAt: new Date(),
};
prismaMock.userHolidaySettings.upsert.mockResolvedValue(mockSettings);
const result = await HolidayRepository.upsertUserSettings({
userId: 123,
countryCode: "GB",
resetDisabledHolidays: true,
});
expect(prismaMock.userHolidaySettings.upsert).toHaveBeenCalledWith({
where: { userId: 123 },
create: {
userId: 123,
countryCode: "GB",
disabledIds: [],
},
update: {
countryCode: "GB",
disabledIds: [],
},
select: expect.any(Object),
});
expect(result).toEqual(mockSettings);
});
});
describe("updateDisabledIds", () => {
it("should update disabled holiday IDs", async () => {
const mockSettings = {
id: 1,
userId: 123,
countryCode: "US",
disabledIds: ["christmas_2025", "thanksgiving_2025"],
createdAt: new Date(),
updatedAt: new Date(),
};
prismaMock.userHolidaySettings.update.mockResolvedValue(mockSettings);
const result = await HolidayRepository.updateDisabledIds({
userId: 123,
disabledIds: ["christmas_2025", "thanksgiving_2025"],
});
expect(prismaMock.userHolidaySettings.update).toHaveBeenCalledWith({
where: { userId: 123 },
data: { disabledIds: ["christmas_2025", "thanksgiving_2025"] },
select: expect.any(Object),
});
expect(result).toEqual(mockSettings);
});
});
describe("findManyCachedHolidays", () => {
it("should return cached holidays for country and year", async () => {
const mockHolidays = [
{
id: "1",
countryCode: "US",
calendarId: "en.usa.official#[email protected]",
eventId: "new_years_day_2025",
name: "New Year's Day",
date: new Date("2025-01-01"),
year: 2025,
createdAt: new Date(),
updatedAt: new Date(),
},
{
id: "2",
countryCode: "US",
calendarId: "en.usa.official#[email protected]",
eventId: "christmas_2025",
name: "Christmas Day",
date: new Date("2025-12-25"),
year: 2025,
createdAt: new Date(),
updatedAt: new Date(),
},
];
prismaMock.holidayCache.findMany.mockResolvedValue(mockHolidays);
const result = await HolidayRepository.findManyCachedHolidays({
countryCode: "US",
year: 2025,
});
expect(prismaMock.holidayCache.findMany).toHaveBeenCalledWith({
where: {
countryCode: "US",
year: 2025,
},
orderBy: {
date: "asc",
},
select: expect.any(Object),
});
expect(result).toEqual(mockHolidays);
});
it("should return empty array when no holidays found", async () => {
prismaMock.holidayCache.findMany.mockResolvedValue([]);
const result = await HolidayRepository.findManyCachedHolidays({
countryCode: "XX",
year: 2025,
});
expect(result).toEqual([]);
});
});
describe("findFirstCacheEntry", () => {
it("should return first cache entry for staleness check", async () => {
const mockEntry = {
id: "1",
countryCode: "US",
calendarId: "en.usa.official#[email protected]",
eventId: "new_years_day_2025",
name: "New Year's Day",
date: new Date("2025-01-01"),
year: 2025,
createdAt: new Date(),
updatedAt: new Date("2025-01-15"),
};
prismaMock.holidayCache.findFirst.mockResolvedValue(mockEntry);
const result = await HolidayRepository.findFirstCacheEntry({
countryCode: "US",
year: 2025,
});
expect(prismaMock.holidayCache.findFirst).toHaveBeenCalledWith({
where: {
countryCode: "US",
year: 2025,
},
orderBy: {
updatedAt: "desc",
},
select: expect.any(Object),
});
expect(result).toEqual(mockEntry);
});
it("should return null when no cache entry exists", async () => {
prismaMock.holidayCache.findFirst.mockResolvedValue(null);
const result = await HolidayRepository.findFirstCacheEntry({
countryCode: "US",
year: 2030,
});
expect(result).toBeNull();
});
});
describe("findCachedHolidaysInRange", () => {
it("should return holidays within date range", async () => {
const mockHolidays = [
{
id: "1",
countryCode: "US",
calendarId: "en.usa.official#[email protected]",
eventId: "christmas_2025",
name: "Christmas Day",
date: new Date("2025-12-25"),
year: 2025,
createdAt: new Date(),
updatedAt: new Date(),
},
];
prismaMock.holidayCache.findMany.mockResolvedValue(mockHolidays);
const startDate = new Date("2025-12-01");
const endDate = new Date("2025-12-31");
const result = await HolidayRepository.findCachedHolidaysInRange({
countryCode: "US",
startDate,
endDate,
});
expect(prismaMock.holidayCache.findMany).toHaveBeenCalledWith({
where: {
countryCode: "US",
date: {
gte: startDate,
lte: endDate,
},
},
orderBy: {
date: "asc",
},
select: expect.any(Object),
});
expect(result).toEqual(mockHolidays);
});
});
});