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:
@@ -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();
|
||||
});
|
||||
});
|
||||
|
||||
@@ -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 })),
|
||||
|
||||
Reference in New Issue
Block a user