fix: consider sendToAll settings in routingForms response (#18226)
* update to consider sendToAll * added tests for team routingForms selectAllMembers cases * chore * chore * chore * updated test case in case of toggle off * tweak --------- Co-authored-by: Anik Dhabal Babu <81948346+anikdhabal@users.noreply.github.com> Co-authored-by: unknown <adhabal2002@gmail.com>
This commit is contained in:
co-authored by
Anik Dhabal Babu
unknown
parent
f6af6e34bd
commit
caade0850a
@@ -799,6 +799,7 @@ function SingleForm({ form, appUrl, Page, enrichedWithUserProfileForm }: SingleF
|
||||
{t("routing_forms_send_email_to")}
|
||||
</span>
|
||||
<AddMembersWithSwitch
|
||||
data-testid="routing-form-select-members"
|
||||
teamId={form.teamId}
|
||||
teamMembers={form.teamMembers.map((member) => ({
|
||||
value: member.id.toString(),
|
||||
|
||||
@@ -98,14 +98,13 @@ export const handleResponse = async ({
|
||||
|
||||
const settings = RoutingFormSettings.parse(form.settings);
|
||||
let userWithEmails: string[] = [];
|
||||
if (form.teamId && settings?.sendUpdatesTo?.length) {
|
||||
if (form.teamId && (settings?.sendToAll || settings?.sendUpdatesTo?.length)) {
|
||||
const whereClause: Prisma.MembershipWhereInput = { teamId: form.teamId };
|
||||
if (!settings?.sendToAll) {
|
||||
whereClause.userId = { in: settings.sendUpdatesTo };
|
||||
}
|
||||
const userEmails = await prisma.membership.findMany({
|
||||
where: {
|
||||
teamId: form.teamId,
|
||||
userId: {
|
||||
in: settings.sendUpdatesTo,
|
||||
},
|
||||
},
|
||||
where: whereClause,
|
||||
select: {
|
||||
user: {
|
||||
select: {
|
||||
|
||||
@@ -2,11 +2,11 @@ import type { Locator, Page } from "@playwright/test";
|
||||
import { expect } from "@playwright/test";
|
||||
|
||||
import { prisma } from "@calcom/prisma";
|
||||
import { AttributeType, SchedulingType } from "@calcom/prisma/enums";
|
||||
import { AttributeType, MembershipRole, SchedulingType } from "@calcom/prisma/enums";
|
||||
import type { Fixtures } from "@calcom/web/playwright/lib/fixtures";
|
||||
import { test } from "@calcom/web/playwright/lib/fixtures";
|
||||
import { selectInteractions } from "@calcom/web/playwright/lib/pageObject";
|
||||
import { gotoRoutingLink } from "@calcom/web/playwright/lib/testUtils";
|
||||
import { getEmailsReceivedByUser, gotoRoutingLink } from "@calcom/web/playwright/lib/testUtils";
|
||||
|
||||
import {
|
||||
addForm,
|
||||
@@ -614,6 +614,134 @@ test.describe("Routing Forms", () => {
|
||||
})();
|
||||
});
|
||||
});
|
||||
|
||||
test.describe("Team Routing Form", () => {
|
||||
test.afterEach(async ({ users }) => {
|
||||
await users.deleteAll();
|
||||
});
|
||||
|
||||
const createUserAndTeamRoutingForm = async ({
|
||||
users,
|
||||
page,
|
||||
}: {
|
||||
users: Fixtures["users"];
|
||||
page: Page;
|
||||
}) => {
|
||||
const owner = await users.create(
|
||||
{ username: "routing-forms" },
|
||||
{
|
||||
hasTeam: true,
|
||||
isOrg: true,
|
||||
hasSubteam: true,
|
||||
}
|
||||
);
|
||||
const { team } = await owner.getFirstTeamMembership();
|
||||
await owner.apiLogin();
|
||||
const formId = await addForm(page, {
|
||||
forTeam: true,
|
||||
});
|
||||
await addShortTextFieldAndSaveForm({
|
||||
page,
|
||||
formId,
|
||||
});
|
||||
await page.click('[href*="/route-builder/"]');
|
||||
await selectNewRoute(page);
|
||||
await selectOption({
|
||||
selector: {
|
||||
selector: ".data-testid-select-routing-action",
|
||||
nth: 0,
|
||||
},
|
||||
option: 2,
|
||||
page,
|
||||
});
|
||||
await page.fill("[name=externalRedirectUrl]", "https://cal.com");
|
||||
await saveCurrentForm(page);
|
||||
return {
|
||||
formId,
|
||||
teamId: team.id,
|
||||
owner,
|
||||
};
|
||||
};
|
||||
|
||||
const selectSendMailToAllMembers = async ({ page, formId }: { page: Page; formId: string }) => {
|
||||
await page.goto(`apps/routing-forms/form-edit/${formId}`);
|
||||
await page.click('[data-testid="assign-all-team-members-toggle"]');
|
||||
await saveCurrentForm(page);
|
||||
};
|
||||
|
||||
const selectSendMailToUser = async ({
|
||||
page,
|
||||
formId,
|
||||
text,
|
||||
}: {
|
||||
page: Page;
|
||||
formId: string;
|
||||
text: string;
|
||||
}) => {
|
||||
await page.goto(`apps/routing-forms/form-edit/${formId}`);
|
||||
await page.click('[data-testid="routing-form-select-members"]');
|
||||
await page.getByText(text).nth(1).click();
|
||||
await saveCurrentForm(page);
|
||||
};
|
||||
|
||||
const addNewUserToTeam = async ({ users, teamId }: { users: Fixtures["users"]; teamId: number }) => {
|
||||
const newUser = await users.create();
|
||||
await prisma.membership.create({
|
||||
data: {
|
||||
teamId: teamId,
|
||||
userId: newUser.id,
|
||||
role: MembershipRole.MEMBER,
|
||||
accepted: true,
|
||||
},
|
||||
});
|
||||
return newUser;
|
||||
};
|
||||
|
||||
const goToRoutingLinkAndSubmit = async ({ page, formId }: { page: Page; formId: string }) => {
|
||||
await gotoRoutingLink({ page, formId });
|
||||
await page.fill('[data-testid="form-field-short-text"]', "test");
|
||||
await page.click('button[type="submit"]');
|
||||
await page.waitForURL((url) => {
|
||||
return url.hostname.includes("cal.com");
|
||||
});
|
||||
};
|
||||
|
||||
test("newly added team member gets mail updates, when `Add all team members, including future members` switch is selected", async ({
|
||||
page,
|
||||
emails,
|
||||
users,
|
||||
}) => {
|
||||
const { formId, teamId, owner } = await createUserAndTeamRoutingForm({ users, page });
|
||||
await selectSendMailToAllMembers({ page, formId });
|
||||
const newUser = await addNewUserToTeam({ users, teamId });
|
||||
await goToRoutingLinkAndSubmit({ page, formId });
|
||||
|
||||
// eslint-disable-next-line playwright/no-wait-for-timeout
|
||||
await page.waitForTimeout(2000);
|
||||
const receivedEmailsOwner = await getEmailsReceivedByUser({ emails, userEmail: owner.email });
|
||||
expect(receivedEmailsOwner?.total).toBe(1);
|
||||
const receivedEmailsNewUser = await getEmailsReceivedByUser({ emails, userEmail: newUser.email });
|
||||
expect(receivedEmailsNewUser?.total).toBe(1);
|
||||
});
|
||||
|
||||
test("newly added team member Not gets mail updates, when `Add all team members, including future members` switch is Not selected", async ({
|
||||
page,
|
||||
emails,
|
||||
users,
|
||||
}) => {
|
||||
const { formId, teamId, owner } = await createUserAndTeamRoutingForm({ users, page });
|
||||
await selectSendMailToUser({ page, formId, text: owner.email as string });
|
||||
const newUser = await addNewUserToTeam({ users, teamId });
|
||||
await goToRoutingLinkAndSubmit({ page, formId });
|
||||
|
||||
// eslint-disable-next-line playwright/no-wait-for-timeout
|
||||
await page.waitForTimeout(2000);
|
||||
const receivedEmailsOwner = await getEmailsReceivedByUser({ emails, userEmail: owner.email });
|
||||
expect(receivedEmailsOwner?.total).toBe(1);
|
||||
const receivedEmailsNewUser = await getEmailsReceivedByUser({ emails, userEmail: newUser.email });
|
||||
expect(receivedEmailsNewUser?.total).toBe(0);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
async function disableForm(page: Page) {
|
||||
|
||||
Reference in New Issue
Block a user