fix: duplicate event types (#14007)

* fix: duplicate event types

* test: add test for duplicate event type

* fix: type error

* chore: pass error message

---------

Co-authored-by: Erik <erik@erosemberg.com>
This commit is contained in:
Udit Takkar
2024-03-07 16:34:42 +00:00
committed by GitHub
co-authored by Erik
parent 5c8e0483b1
commit 7d497a621f
5 changed files with 31 additions and 7 deletions
@@ -217,7 +217,7 @@ export const EventAdvancedTab = ({ eventType, team }: Pick<EventTypeSetupProps,
placeholder={
selectedSecondaryEmailId === -1 && (
<span className="text-default min-w-0 overflow-hidden truncate whitespace-nowrap">
<Badge variant="blue">Default</Badge> {user?.email || ""}
<Badge variant="blue">{t("default")}</Badge> {user?.email || ""}
</span>
)
}
+4
View File
@@ -107,6 +107,10 @@ testBothFutureAndLegacyRoutes.describe("Event Types tests", () => {
expect(formTitle).toBe(firstTitle);
expect(formSlug).toContain(firstSlug);
const test = await page.getByTestId("continue").click();
const toast = await page.waitForSelector('[data-testid="toast-success"]');
expect(toast).toBeTruthy();
});
test("edit first event", async ({ page }) => {
@@ -131,6 +131,7 @@
"invitee_timezone": "Invitee Time Zone",
"time_left": "Time left",
"event_type": "Event Type",
"duplicate_event_type":"Duplicate Event Type",
"enter_meeting": "Enter Meeting",
"video_call_provider": "Video call provider",
"meeting_id": "Meeting ID",
@@ -2295,4 +2296,4 @@
"confirm_email_description": "We sent an email to <strong>{{email}}</strong>. Click the link in the email to verify this address.",
"send_event_details_to": "Send event details to",
"ADD_NEW_STRINGS_ABOVE_THIS_LINE_TO_PREVENT_MERGE_CONFLICTS": "↑↑↑↑↑↑↑↑↑↑↑↑↑ Add your new strings above here ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑"
}
}
@@ -95,7 +95,7 @@ const DuplicateDialog = () => {
<Dialog
name="duplicate"
clearQueryParamsOnClose={["description", "title", "length", "slug", "name", "id", "pageSlug"]}>
<DialogContent type="creation" className="overflow-y-auto" title="Duplicate Event Type">
<DialogContent type="creation" className="overflow-y-auto" title={t("duplicate_event_type")}>
<Form
form={form}
handleSubmit={(values) => {
@@ -161,7 +161,7 @@ const DuplicateDialog = () => {
</div>
<DialogFooter showDivider className="mt-10">
<DialogClose />
<Button type="submit" loading={duplicateMutation.isPending}>
<Button data-testid="continue" type="submit" loading={duplicateMutation.isPending}>
{t("continue")}
</Button>
</DialogFooter>
@@ -86,17 +86,18 @@ export const duplicateHandler = async ({ ctx, input }: DuplicateOptions) => {
// eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/ban-ts-comment
// @ts-ignore - descriptionAsSafeHTML is added on the fly using a prisma middleware it shouldn't be used to create event type. Such a property doesn't exist on schema
descriptionAsSafeHTML: _descriptionAsSafeHTML,
secondaryEmailId,
...rest
} = eventType;
const data: Prisma.EventTypeUncheckedCreateInput = {
const data: Prisma.EventTypeCreateInput = {
...rest,
title: newEventTitle,
slug: newSlug,
description: newDescription,
length: newLength,
locations: locations ?? undefined,
teamId: team ? team.id : undefined,
team: team ? { connect: { id: team.id } } : undefined,
users: users ? { connect: users.map((user) => ({ id: user.id })) } : undefined,
recurringEvent: recurringEvent || undefined,
bookingLimits: bookingLimits ?? undefined,
@@ -105,6 +106,24 @@ export const duplicateHandler = async ({ ctx, input }: DuplicateOptions) => {
bookingFields: eventType.bookingFields === null ? Prisma.DbNull : eventType.bookingFields,
};
// Validate the secondary email
if (!!secondaryEmailId) {
const secondaryEmail = await prisma.secondaryEmail.findUnique({
where: {
id: secondaryEmailId,
userId: ctx.user.id,
},
});
// Make sure the secondary email id belongs to the current user and its a verified one
if (secondaryEmail && secondaryEmail.emailVerified) {
data.secondaryEmail = {
connect: {
id: secondaryEmailId,
},
};
}
}
const newEventType = await EventTypeRepository.create(data);
// Create custom inputs
@@ -156,6 +175,6 @@ export const duplicateHandler = async ({ ctx, input }: DuplicateOptions) => {
eventType: newEventType,
};
} catch (error) {
throw new TRPCError({ code: "INTERNAL_SERVER_ERROR" });
throw new TRPCError({ code: "INTERNAL_SERVER_ERROR", message: `Error duplicating event type ${error}` });
}
};