-
Notifications
You must be signed in to change notification settings - Fork 8.5k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
a327dcf
commit 1ef9b76
Showing
3 changed files
with
218 additions
and
1 deletion.
There are no files selected for viewing
208 changes: 208 additions & 0 deletions
208
apps/web/test/lib/getSchedule/domain-wide-delegation.test.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,208 @@ | ||
import { | ||
getDate, | ||
createBookingScenario, | ||
Timezones, | ||
TestData, | ||
mockCalendar, | ||
createDwdCredential, | ||
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("Domain Wide Delegation", () => { | ||
test("correctly identifies unavailable slots using DWD 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: "[email protected]", | ||
id: 101, | ||
schedules: [TestData.schedules.IstWorkHours], | ||
selectedCalendars: [TestData.selectedCalendars.google], | ||
// User must be part of organization to be able to use that organization's DWD credential | ||
teams: payloadToMakePartOfOrganization, | ||
// No regular credentials provided | ||
credentials: [], | ||
}); | ||
|
||
await createDwdCredential(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 DWD 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: "[email protected]", | ||
id: 101, | ||
schedules: [TestData.schedules.IstWorkHours], | ||
selectedCalendars: [TestData.selectedCalendars.google], | ||
teams: payloadToMakePartOfDifferentOrganization, | ||
credentials: [], | ||
}); | ||
|
||
// Create DWD credential for the org user isn't part of | ||
await createDwdCredential(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 DWD credentials are available | ||
expect(scheduleForDayWithAGoogleCalendarBooking).toHaveTimeSlots( | ||
expectedSlotsForSchedule.IstWorkHours.interval["1hr"].allPossibleSlotsStartingAt430, | ||
{ | ||
dateString: plus2DateString, | ||
} | ||
); | ||
}); | ||
}); | ||
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters