mirror of
https://github.com/hanzoai/calendar.git
synced 2026-10-30 14:46:43 +00:00
* feat: Cal.diy — community-driven MIT-licensed fork of Cal.com This squashed commit contains all Cal.diy changes applied on top of calcom/cal.com main: - Rebrand Cal.com to Cal.diy across the entire codebase - Remove Enterprise Edition (EE) features, license checks, and AGPL restrictions - Switch license from AGPL-3.0 to MIT - Remove docs/ directory (migrated to Nextra at cal.diy) - Remove dead code: org tests, EE tips, platform nav, premium username, SAML/SSO, etc. - Clean up .env.example for self-hosted Cal.diy - Update Docker image references to calcom/cal.diy - Update README, CONTRIBUTING.md, and issue templates for Cal.diy community fork - Add PR welcome bot for Cal.diy contributors - Fix API v2 breaking changes oasdiff ignore entries - Replace Blacksmith CI runners with default GitHub Actions 3893 files changed, 20789 insertions(+), 411020 deletions(-) Co-Authored-By: [email protected] <[email protected]> * refactor: remove org-specific /organizations/:orgId endpoints from API v2 atoms controllers (#1701) Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> * fix: revert Cal.diy Inc to Cal.com, Inc. in license files, copyright notices, and package metadata (#1702) Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> * rip out org related comments in api v2 --------- Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
111 lines
3.2 KiB
TypeScript
111 lines
3.2 KiB
TypeScript
import dayjs from "@calcom/dayjs";
|
|
import { BookerLayouts } from "@calcom/prisma/zod-utils";
|
|
import type { RenderOptions } from "@testing-library/react";
|
|
import { render } from "@testing-library/react";
|
|
import React, { type ReactElement, type ReactNode } from "react";
|
|
import { vi } from "vitest";
|
|
import type { StoreApi } from "zustand";
|
|
import { BookerStoreContext } from "../BookerStoreProvider";
|
|
import type { BookerStore } from "../store";
|
|
|
|
interface CustomRenderOptions extends Omit<RenderOptions, "wrapper"> {
|
|
mockStore?: Partial<BookerStore>;
|
|
}
|
|
|
|
// biome-ignore lint/complexity/noExcessiveLinesPerFunction: mock store requires many properties
|
|
const createMockStore = (initialState?: Partial<BookerStore>): StoreApi<BookerStore> => {
|
|
let state: BookerStore = {
|
|
username: null,
|
|
eventSlug: null,
|
|
eventId: null,
|
|
verifiedEmail: null,
|
|
setVerifiedEmail: vi.fn(),
|
|
month: dayjs().format("YYYY-MM"),
|
|
setMonth: vi.fn(),
|
|
state: "loading",
|
|
setState: vi.fn(),
|
|
layout: BookerLayouts.MONTH_VIEW,
|
|
setLayout: vi.fn(),
|
|
selectedDate: null,
|
|
setSelectedDate: vi.fn(),
|
|
addToSelectedDate: vi.fn(),
|
|
selectedDatesAndTimes: null,
|
|
setSelectedDatesAndTimes: vi.fn(),
|
|
durationConfig: null,
|
|
selectedDuration: null,
|
|
setSelectedDuration: vi.fn(),
|
|
selectedTimeslot: null,
|
|
setSelectedTimeslot: vi.fn(),
|
|
tentativeSelectedTimeslots: [],
|
|
setTentativeSelectedTimeslots: vi.fn(),
|
|
recurringEventCount: null,
|
|
setRecurringEventCount: vi.fn(),
|
|
recurringEventCountQueryParam: null,
|
|
setRecurringEventCountQueryParam: vi.fn(),
|
|
dayCount: null,
|
|
setDayCount: vi.fn(),
|
|
rescheduleUid: null,
|
|
rescheduledBy: null,
|
|
bookingUid: null,
|
|
bookingData: null,
|
|
setBookingData: vi.fn(),
|
|
setRescheduleUid: vi.fn(),
|
|
initialize: vi.fn(),
|
|
formValues: {},
|
|
setFormValues: vi.fn(),
|
|
isTeamEvent: false,
|
|
seatedEventData: {},
|
|
setSeatedEventData: vi.fn(),
|
|
org: null,
|
|
setOrg: vi.fn(),
|
|
timezone: null,
|
|
setTimezone: vi.fn(),
|
|
teamMemberEmail: null,
|
|
crmOwnerRecordType: null,
|
|
crmAppSlug: null,
|
|
crmRecordId: null,
|
|
isPlatform: false,
|
|
allowUpdatingUrlParams: true,
|
|
verificationCode: null,
|
|
setVerificationCode: vi.fn(),
|
|
isSlotSelectionModalVisible: false,
|
|
setIsSlotSelectionModalVisible: vi.fn(),
|
|
...initialState,
|
|
};
|
|
|
|
state.setMonth = vi.fn((month: string | null) => {
|
|
state.month = month;
|
|
});
|
|
|
|
return {
|
|
getState: () => state,
|
|
setState: vi.fn((updater) => {
|
|
if (typeof updater === "function") {
|
|
const newState = updater(state);
|
|
state = { ...state, ...newState };
|
|
} else {
|
|
state = { ...state, ...updater };
|
|
}
|
|
}),
|
|
subscribe: vi.fn(),
|
|
destroy: vi.fn(),
|
|
} as unknown as StoreApi<BookerStore>;
|
|
};
|
|
|
|
export const renderWithBookerStore = (
|
|
ui: ReactElement,
|
|
options?: CustomRenderOptions
|
|
): ReturnType<typeof render> => {
|
|
const mockStore = createMockStore(options?.mockStore);
|
|
|
|
const Wrapper = ({ children }: { children: ReactNode }): ReactElement => (
|
|
<BookerStoreContext.Provider value={mockStore}>{children}</BookerStoreContext.Provider>
|
|
);
|
|
|
|
return render(ui, { wrapper: Wrapper, ...options });
|
|
};
|
|
|
|
export * from "@testing-library/react";
|
|
|
|
export { renderWithBookerStore as render };
|