Skip to content

Commit 540bd47

Browse files
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
1 parent 9873e37 commit 540bd47

File tree

3 files changed

+70
-2
lines changed

3 files changed

+70
-2
lines changed

apps/web/playwright/fixtures/users.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@ const createTeamEventType = async (
9494
teamEventLength?: number;
9595
seatsPerTimeSlot?: number;
9696
managedEventUnlockedFields?: Record<string, boolean>;
97+
assignAllTeamMembers?: boolean;
9798
}
9899
) => {
99100
return await prisma.eventType.create({
@@ -138,6 +139,7 @@ const createTeamEventType = async (
138139
},
139140
}
140141
: undefined,
142+
assignAllTeamMembers: scenario?.assignAllTeamMembers,
141143
},
142144
});
143145
};
@@ -154,6 +156,7 @@ const createTeamAndAddUser = async (
154156
index,
155157
orgRequestedSlug,
156158
schedulingType,
159+
assignAllTeamMembersForSubTeamEvents,
157160
}: {
158161
user: { id: number; email: string; username: string | null; role?: MembershipRole };
159162
isUnpublished?: boolean;
@@ -165,6 +168,7 @@ const createTeamAndAddUser = async (
165168
index?: number;
166169
orgRequestedSlug?: string;
167170
schedulingType?: SchedulingType;
171+
assignAllTeamMembersForSubTeamEvents?: boolean;
168172
},
169173
workerInfo: WorkerInfo
170174
) => {
@@ -193,6 +197,7 @@ const createTeamAndAddUser = async (
193197
const team = await createTeamAndAddUser({ user }, workerInfo);
194198
await createTeamEventType(user, team, {
195199
schedulingType: schedulingType,
200+
assignAllTeamMembers: assignAllTeamMembersForSubTeamEvents,
196201
});
197202
await createTeamWorkflow(user, team);
198203
data.children = { connect: [{ id: team.id }] };
@@ -282,6 +287,8 @@ export const createUsersFixture = (
282287
addManagedEventToTeamMates?: boolean;
283288
managedEventUnlockedFields?: Record<string, boolean>;
284289
orgRequestedSlug?: string;
290+
assignAllTeamMembers?: boolean;
291+
assignAllTeamMembersForSubTeamEvents?: boolean;
285292
} = {}
286293
) => {
287294
const _user = await prisma.user.create({
@@ -537,6 +544,7 @@ export const createUsersFixture = (
537544
organizationId: opts?.organizationId,
538545
orgRequestedSlug: scenario.orgRequestedSlug,
539546
schedulingType: scenario.schedulingType,
547+
assignAllTeamMembersForSubTeamEvents: scenario.assignAllTeamMembersForSubTeamEvents,
540548
},
541549
workerInfo
542550
);

apps/web/playwright/team/team-invitation.e2e.ts

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
import { expect } from "@playwright/test";
22

33
import { WEBAPP_URL } from "@calcom/lib/constants";
4+
import { prisma } from "@calcom/prisma";
5+
import { MembershipRole, SchedulingType } from "@calcom/prisma/enums";
46

57
import { test } from "../lib/fixtures";
68
import { getInviteLink, localize } from "../lib/testUtils";
@@ -121,4 +123,60 @@ test.describe("Team", () => {
121123
).toHaveCount(1);
122124
});
123125
});
126+
127+
test("Invited member is assigned to existing managed event, after invitation is accepted", async ({
128+
page,
129+
users,
130+
}) => {
131+
const t = await localize("en");
132+
const teamEventSlugAndTitle = "managed-event-test";
133+
const teamMatesObj = [{ name: "teammate-1" }, { name: "teammate-2" }];
134+
const teamOwner = await users.create(
135+
{ name: `team-owner-${Date.now()}` },
136+
{
137+
hasTeam: true,
138+
teamRole: MembershipRole.ADMIN,
139+
teammates: teamMatesObj,
140+
schedulingType: SchedulingType.MANAGED,
141+
teamEventSlug: teamEventSlugAndTitle,
142+
teamEventTitle: teamEventSlugAndTitle,
143+
teamEventLength: 30,
144+
addManagedEventToTeamMates: true,
145+
assignAllTeamMembers: true,
146+
}
147+
);
148+
const invitedMember = await users.create({
149+
name: `invited-member-${Date.now()}`,
150+
email: `invited-member-${Date.now()}@example.com`,
151+
});
152+
const { team } = await teamOwner.getFirstTeamMembership();
153+
154+
await teamOwner.apiLogin();
155+
await page.goto(`/settings/teams/${team.id}/members`);
156+
await page.getByTestId("new-member-button").click();
157+
await page.locator('input[name="inviteUser"]').fill(invitedMember.email);
158+
await page.locator(`button:text("${t("send_invite")}")`).click();
159+
160+
await invitedMember.apiLogin();
161+
await page.goto(`/teams`);
162+
await page.getByTestId(`accept-invitation-${team.id}`).click();
163+
const response = await page.waitForResponse("/api/trpc/teams/acceptOrLeave?batch=1");
164+
expect(response.status()).toBe(200);
165+
await page.goto(`/event-types`);
166+
167+
//ensure managed event-type is created for the invited member
168+
await expect(page.locator(`text="${teamEventSlugAndTitle}"`)).toBeVisible();
169+
170+
//ensure the new event-type created for invited member is child of team event-type
171+
const parentEventType = await prisma.eventType.findFirst({
172+
where: {
173+
slug: teamEventSlugAndTitle,
174+
teamId: team.id,
175+
},
176+
select: {
177+
children: true,
178+
},
179+
});
180+
expect(parentEventType?.children.find((et) => et.userId === invitedMember.id)).toBeTruthy();
181+
});
124182
});

packages/lib/server/queries/teams/index.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -419,7 +419,9 @@ export async function updateNewTeamMemberEventTypes(userId: number, teamId: numb
419419
},
420420
});
421421

422-
const allManagedEventTypePropsZod = _EventTypeModel.pick(allManagedEventTypeProps);
422+
const allManagedEventTypePropsZod = _EventTypeModel.pick(allManagedEventTypeProps).extend({
423+
bookingFields: _EventTypeModel.shape.bookingFields.nullish(),
424+
});
423425

424426
eventTypesToAdd.length > 0 &&
425427
(await prisma.$transaction(
@@ -454,7 +456,7 @@ export async function updateNewTeamMemberEventTypes(userId: number, teamId: numb
454456
users: {
455457
connect: [{ id: userId }],
456458
},
457-
parentId: eventType.parentId,
459+
parentId: eventType.id,
458460
hidden: false,
459461
workflows: currentWorkflowIds && {
460462
create: currentWorkflowIds.map((wfId) => ({ workflowId: wfId })),

0 commit comments

Comments
 (0)