fix: require confirmation cal video bug (#16376)

* fix: require confirmation cal video bug

* chore: update location

* fix: tests

* chore

* test: add confirm booking test

* chore: add location in test

* fix: types
This commit is contained in:
Udit Takkar
2024-08-27 22:40:00 +00:00
committed by GitHub
parent 6a90518231
commit d938e67e65
3 changed files with 123 additions and 7 deletions
+12 -6
View File
@@ -186,9 +186,12 @@ export default class EventManager {
result.type = result.createdEvent.type;
//responses data is later sent to webhook
if (evt.location && evt.responses) {
evt.responses["location"].value = {
optionValue: "",
value: evt.location,
evt.responses["location"] = {
...(evt.responses["location"] ?? {}),
value: {
optionValue: "",
value: evt.location,
},
};
}
}
@@ -256,9 +259,12 @@ export default class EventManager {
result.type = result.createdEvent.type;
//responses data is later sent to webhook
if (evt.location && evt.responses) {
evt.responses["location"].value = {
optionValue: "",
value: evt.location,
evt.responses["location"] = {
...(evt.responses["location"] ?? {}),
value: {
optionValue: "",
value: evt.location,
},
};
}
}
+1 -1
View File
@@ -31,7 +31,7 @@ export default function generateIcsFile({
if (
role !== GenerateIcsRole.ATTENDEE &&
calEvent.destinationCalendar &&
calEvent.destinationCalendar[0].integration === "office365_calendar"
calEvent.destinationCalendar[0]?.integration === "office365_calendar"
)
return null;
@@ -0,0 +1,110 @@
import {
createBookingScenario,
TestData,
getOrganizer,
getScenarioData,
mockSuccessfulVideoMeetingCreation,
getDate,
} from "@calcom/web/test/utils/bookingScenario/bookingScenario";
import { setupAndTeardown } from "@calcom/web/test/utils/bookingScenario/setupAndTeardown";
import { describe, it, beforeEach, vi, expect } from "vitest";
import { BookingStatus } from "@calcom/prisma/enums";
import type { TrpcSessionUser } from "../../../trpc";
import { confirmHandler } from "./confirm.handler";
describe("confirmHandler", () => {
setupAndTeardown();
beforeEach(() => {
// Reset all mocks before each test
vi.clearAllMocks();
});
it("should successfully confirm booking when event type doesn't have any default location", async () => {
const attendeeUser = getOrganizer({
email: "test@example.com",
name: "test name",
id: 102,
schedules: [TestData.schedules.IstWorkHours],
});
const organizer = getOrganizer({
name: "Organizer",
email: "organizer@example.com",
id: 101,
schedules: [TestData.schedules.IstWorkHours],
});
const uidOfBooking = "n5Wv3eHgconAED2j4gcVhP";
const iCalUID = `${uidOfBooking}@Cal.com`;
const { dateString: plus1DateString } = getDate({ dateIncrement: 1 });
await createBookingScenario(
getScenarioData({
webhooks: [
{
userId: organizer.id,
eventTriggers: ["BOOKING_CREATED"],
subscriberUrl: "http://my-webhook.example.com",
active: true,
eventTypeId: 1,
appId: null,
},
],
eventTypes: [
{
id: 1,
slotInterval: 15,
length: 15,
locations: [],
users: [
{
id: 101,
},
],
},
],
bookings: [
{
id: 101,
uid: uidOfBooking,
eventTypeId: 1,
status: BookingStatus.PENDING,
startTime: `${plus1DateString}T05:00:00.000Z`,
endTime: `${plus1DateString}T05:15:00.000Z`,
references: [],
iCalUID,
location: "integrations:daily",
attendees: [attendeeUser],
responses: { name: attendeeUser.name, email: attendeeUser.email, guests: [] },
},
],
organizer,
apps: [TestData.apps["daily-video"]],
})
);
mockSuccessfulVideoMeetingCreation({
metadataLookupKey: "dailyvideo",
});
const ctx = {
user: {
id: organizer.id,
name: organizer.name,
timeZone: organizer.timeZone,
username: organizer.username,
} as NonNullable<TrpcSessionUser>,
};
const res = await confirmHandler({
ctx,
input: { bookingId: 101, confirmed: true, reason: "" },
});
expect(res?.status).toBe(BookingStatus.ACCEPTED);
});
});