* Revert "Revert "chore: rename DWD to DelegationCredential (#19703)" (#19734)"
This reverts commit 340b5ab061.
* chore: fix schema and types for now
* fix: domainWideDelegationCredentialId error type
209 lines
6.0 KiB
TypeScript
209 lines
6.0 KiB
TypeScript
import {
|
|
getDate,
|
|
createBookingScenario,
|
|
Timezones,
|
|
TestData,
|
|
mockCalendar,
|
|
createDelegationCredential,
|
|
createOrganization,
|
|
getOrganizer,
|
|
} from "../../utils/bookingScenario/bookingScenario";
|
|
import { expectNoAttemptToGetAvailability } from "../../utils/bookingScenario/expects";
|
|
|
|
import { describe, test } from "vitest";
|
|
|
|
import { MembershipRole } from "@calcom/prisma/enums";
|
|
import { getAvailableSlots as getSchedule } from "@calcom/trpc/server/routers/viewer/slots/util";
|
|
|
|
import { expect, expectedSlotsForSchedule } from "./expects";
|
|
import { setupAndTeardown } from "./setupAndTeardown";
|
|
|
|
describe("getSchedule", () => {
|
|
setupAndTeardown();
|
|
describe("Delegation Credential", () => {
|
|
test("correctly identifies unavailable slots using DelegationCredential credentials", async () => {
|
|
const { dateString: plus1DateString } = getDate({ dateIncrement: 1 });
|
|
const { dateString: plus2DateString } = getDate({ dateIncrement: 2 });
|
|
|
|
const org = await createOrganization({
|
|
name: "Test Org",
|
|
slug: "testorg",
|
|
});
|
|
|
|
const payloadToMakePartOfOrganization = [
|
|
{
|
|
membership: {
|
|
accepted: true,
|
|
role: MembershipRole.ADMIN,
|
|
},
|
|
team: {
|
|
id: org.id,
|
|
name: "Test Org",
|
|
slug: "testorg",
|
|
},
|
|
},
|
|
];
|
|
|
|
const organizer = getOrganizer({
|
|
name: "Organizer",
|
|
email: "organizer@example.com",
|
|
id: 101,
|
|
schedules: [TestData.schedules.IstWorkHours],
|
|
selectedCalendars: [TestData.selectedCalendars.google],
|
|
// User must be part of organization to be able to use that organization's Delegation credential
|
|
teams: payloadToMakePartOfOrganization,
|
|
// No regular credentials provided
|
|
credentials: [],
|
|
});
|
|
|
|
await createDelegationCredential(org.id);
|
|
|
|
const googleCalendarMock = mockCalendar("googlecalendar", {
|
|
create: {
|
|
uid: "MOCK_ID",
|
|
iCalUID: "MOCKED_GOOGLE_CALENDAR_ICS_ID",
|
|
},
|
|
busySlots: [
|
|
{
|
|
start: `${plus2DateString}T04:45:00.000Z`,
|
|
end: `${plus2DateString}T23:00:00.000Z`,
|
|
},
|
|
],
|
|
});
|
|
|
|
const scenarioData = {
|
|
eventTypes: [
|
|
{
|
|
id: 1,
|
|
slotInterval: 45,
|
|
length: 45,
|
|
users: [
|
|
{
|
|
id: organizer.id,
|
|
},
|
|
],
|
|
},
|
|
],
|
|
users: [organizer],
|
|
apps: [TestData.apps["google-calendar"]],
|
|
};
|
|
|
|
await createBookingScenario(scenarioData);
|
|
|
|
const scheduleForDayWithAGoogleCalendarBooking = await getSchedule({
|
|
input: {
|
|
eventTypeId: 1,
|
|
eventTypeSlug: "",
|
|
startTime: `${plus1DateString}T18:30:00.000Z`,
|
|
endTime: `${plus2DateString}T18:29:59.999Z`,
|
|
timeZone: Timezones["+5:30"],
|
|
isTeamEvent: false,
|
|
orgSlug: null,
|
|
},
|
|
});
|
|
|
|
// As per Google Calendar Availability, only 4PM(4-4:45PM) GMT slot would be available
|
|
expect(scheduleForDayWithAGoogleCalendarBooking).toHaveTimeSlots([`04:00:00.000Z`], {
|
|
dateString: plus2DateString,
|
|
});
|
|
});
|
|
|
|
test("fails to get schedule when user isn't part of the organization with Delegation credential", async () => {
|
|
const { dateString: plus1DateString } = getDate({ dateIncrement: 1 });
|
|
const { dateString: plus2DateString } = getDate({ dateIncrement: 2 });
|
|
|
|
const org = await createOrganization({
|
|
name: "Test Org",
|
|
slug: "testorg",
|
|
});
|
|
|
|
const anotherOrg = await createOrganization({
|
|
name: "Another Org",
|
|
slug: "anotherorg",
|
|
});
|
|
|
|
// User is part of a different org
|
|
const payloadToMakePartOfDifferentOrganization = [
|
|
{
|
|
membership: {
|
|
accepted: true,
|
|
role: MembershipRole.ADMIN,
|
|
},
|
|
team: {
|
|
id: anotherOrg.id,
|
|
name: "Another Org",
|
|
slug: "anotherorg",
|
|
},
|
|
},
|
|
];
|
|
|
|
const organizer = getOrganizer({
|
|
name: "Organizer",
|
|
email: "organizer@example.com",
|
|
id: 101,
|
|
schedules: [TestData.schedules.IstWorkHours],
|
|
selectedCalendars: [TestData.selectedCalendars.google],
|
|
teams: payloadToMakePartOfDifferentOrganization,
|
|
credentials: [],
|
|
});
|
|
|
|
// Create Delegation credential for the org user isn't part of
|
|
await createDelegationCredential(org.id);
|
|
|
|
const googleCalendarMock = mockCalendar("googlecalendar", {
|
|
create: {
|
|
uid: "MOCK_ID",
|
|
iCalUID: "MOCKED_GOOGLE_CALENDAR_ICS_ID",
|
|
},
|
|
busySlots: [
|
|
{
|
|
start: `${plus2DateString}T04:45:00.000Z`,
|
|
end: `${plus2DateString}T23:00:00.000Z`,
|
|
},
|
|
],
|
|
});
|
|
|
|
const scenarioData = {
|
|
eventTypes: [
|
|
{
|
|
id: 1,
|
|
slotInterval: 60,
|
|
length: 60,
|
|
users: [
|
|
{
|
|
id: organizer.id,
|
|
},
|
|
],
|
|
},
|
|
],
|
|
users: [organizer],
|
|
apps: [TestData.apps["google-calendar"]],
|
|
};
|
|
|
|
await createBookingScenario(scenarioData);
|
|
|
|
const scheduleForDayWithAGoogleCalendarBooking = await getSchedule({
|
|
input: {
|
|
eventTypeId: 1,
|
|
eventTypeSlug: "",
|
|
startTime: `${plus1DateString}T18:30:00.000Z`,
|
|
endTime: `${plus2DateString}T18:29:59.999Z`,
|
|
timeZone: Timezones["+5:30"],
|
|
isTeamEvent: false,
|
|
orgSlug: null,
|
|
},
|
|
});
|
|
|
|
expectNoAttemptToGetAvailability(googleCalendarMock);
|
|
|
|
// All slots would be available as no DelegationCredential credentials are available
|
|
expect(scheduleForDayWithAGoogleCalendarBooking).toHaveTimeSlots(
|
|
expectedSlotsForSchedule.IstWorkHours.interval["1hr"].allPossibleSlotsStartingAt430,
|
|
{
|
|
dateString: plus2DateString,
|
|
}
|
|
);
|
|
});
|
|
});
|
|
});
|