fix: issues in 'updateNewTeamMemberEventTypes' while adding new team member. (#17513)

* fix due to error in zod.parse while adding new member

* updated zod parsing

* fix the linking with parent

* update fixture to accomodate assignAllTeamMembers for team and org scenarios

* added e2e test

* nit
This commit is contained in:
Vijay
2024-11-07 10:33:25 +00:00
committed by GitHub
parent 9873e373dc
commit 540bd478dc
3 changed files with 70 additions and 2 deletions
+8
View File
@@ -94,6 +94,7 @@ const createTeamEventType = async (
teamEventLength?: number;
seatsPerTimeSlot?: number;
managedEventUnlockedFields?: Record<string, boolean>;
assignAllTeamMembers?: boolean;
}
) => {
return await prisma.eventType.create({
@@ -138,6 +139,7 @@ const createTeamEventType = async (
},
}
: undefined,
assignAllTeamMembers: scenario?.assignAllTeamMembers,
},
});
};
@@ -154,6 +156,7 @@ const createTeamAndAddUser = async (
index,
orgRequestedSlug,
schedulingType,
assignAllTeamMembersForSubTeamEvents,
}: {
user: { id: number; email: string; username: string | null; role?: MembershipRole };
isUnpublished?: boolean;
@@ -165,6 +168,7 @@ const createTeamAndAddUser = async (
index?: number;
orgRequestedSlug?: string;
schedulingType?: SchedulingType;
assignAllTeamMembersForSubTeamEvents?: boolean;
},
workerInfo: WorkerInfo
) => {
@@ -193,6 +197,7 @@ const createTeamAndAddUser = async (
const team = await createTeamAndAddUser({ user }, workerInfo);
await createTeamEventType(user, team, {
schedulingType: schedulingType,
assignAllTeamMembers: assignAllTeamMembersForSubTeamEvents,
});
await createTeamWorkflow(user, team);
data.children = { connect: [{ id: team.id }] };
@@ -282,6 +287,8 @@ export const createUsersFixture = (
addManagedEventToTeamMates?: boolean;
managedEventUnlockedFields?: Record<string, boolean>;
orgRequestedSlug?: string;
assignAllTeamMembers?: boolean;
assignAllTeamMembersForSubTeamEvents?: boolean;
} = {}
) => {
const _user = await prisma.user.create({
@@ -537,6 +544,7 @@ export const createUsersFixture = (
organizationId: opts?.organizationId,
orgRequestedSlug: scenario.orgRequestedSlug,
schedulingType: scenario.schedulingType,
assignAllTeamMembersForSubTeamEvents: scenario.assignAllTeamMembersForSubTeamEvents,
},
workerInfo
);
@@ -1,6 +1,8 @@
import { expect } from "@playwright/test";
import { WEBAPP_URL } from "@calcom/lib/constants";
import { prisma } from "@calcom/prisma";
import { MembershipRole, SchedulingType } from "@calcom/prisma/enums";
import { test } from "../lib/fixtures";
import { getInviteLink, localize } from "../lib/testUtils";
@@ -121,4 +123,60 @@ test.describe("Team", () => {
).toHaveCount(1);
});
});
test("Invited member is assigned to existing managed event, after invitation is accepted", async ({
page,
users,
}) => {
const t = await localize("en");
const teamEventSlugAndTitle = "managed-event-test";
const teamMatesObj = [{ name: "teammate-1" }, { name: "teammate-2" }];
const teamOwner = await users.create(
{ name: `team-owner-${Date.now()}` },
{
hasTeam: true,
teamRole: MembershipRole.ADMIN,
teammates: teamMatesObj,
schedulingType: SchedulingType.MANAGED,
teamEventSlug: teamEventSlugAndTitle,
teamEventTitle: teamEventSlugAndTitle,
teamEventLength: 30,
addManagedEventToTeamMates: true,
assignAllTeamMembers: true,
}
);
const invitedMember = await users.create({
name: `invited-member-${Date.now()}`,
email: `invited-member-${Date.now()}@example.com`,
});
const { team } = await teamOwner.getFirstTeamMembership();
await teamOwner.apiLogin();
await page.goto(`/settings/teams/${team.id}/members`);
await page.getByTestId("new-member-button").click();
await page.locator('input[name="inviteUser"]').fill(invitedMember.email);
await page.locator(`button:text("${t("send_invite")}")`).click();
await invitedMember.apiLogin();
await page.goto(`/teams`);
await page.getByTestId(`accept-invitation-${team.id}`).click();
const response = await page.waitForResponse("/api/trpc/teams/acceptOrLeave?batch=1");
expect(response.status()).toBe(200);
await page.goto(`/event-types`);
//ensure managed event-type is created for the invited member
await expect(page.locator(`text="${teamEventSlugAndTitle}"`)).toBeVisible();
//ensure the new event-type created for invited member is child of team event-type
const parentEventType = await prisma.eventType.findFirst({
where: {
slug: teamEventSlugAndTitle,
teamId: team.id,
},
select: {
children: true,
},
});
expect(parentEventType?.children.find((et) => et.userId === invitedMember.id)).toBeTruthy();
});
});
+4 -2
View File
@@ -419,7 +419,9 @@ export async function updateNewTeamMemberEventTypes(userId: number, teamId: numb
},
});
const allManagedEventTypePropsZod = _EventTypeModel.pick(allManagedEventTypeProps);
const allManagedEventTypePropsZod = _EventTypeModel.pick(allManagedEventTypeProps).extend({
bookingFields: _EventTypeModel.shape.bookingFields.nullish(),
});
eventTypesToAdd.length > 0 &&
(await prisma.$transaction(
@@ -454,7 +456,7 @@ export async function updateNewTeamMemberEventTypes(userId: number, teamId: numb
users: {
connect: [{ id: userId }],
},
parentId: eventType.parentId,
parentId: eventType.id,
hidden: false,
workflows: currentWorkflowIds && {
create: currentWorkflowIds.map((wfId) => ({ workflowId: wfId })),