* WIP restored from .git cache * fix exports * sortable row model * feat column visibility component * wip filters with nuqs * pull in unique values from table into filters * correctly assign filters via v/f * inital selection bar refactor * data-table selection bar + optmistic update of delete * dynamic link * migrate member list table to new data-table * total list shows filtered value > db valuie * add filters for attributes * type errors * make content bigger on lg * add mb-6 to teams user datatable to match spacing spec * correctly render multi-badge * fix: masss asignment optimistic UI * fix type errors * remove log * fix toolbar type error * chore: Remove debug artifact * type errors * Update apps/web/public/static/locales/en/common.json * use max-w-fit * chore: Remove unused translation now we don't specify 'mass' in assign * perf: fix: use the onBlur event to prevent focus loss whilst the list is rerendering * Move the data-table exports together in the main barrel, then import * fix exports that were lost in a merge * fix exports that were lost in a merge * fix groupteammapping/availbilityslider * fix overflow problems * add scrollbar-thin class * fix type error * user serverside values for faceted filters * pass filters to serverside * filter serverside * fix team server side filter * add loaded x of y * attributes icon change * correct implementation for text/input attr optimistic * type check fixes * fix platform checks * fix types again * fix types again * fix types again * add use client * add use client * fix-types * fix: Add missing translation in EN * fix e2e tests via testid * fix e2e tests via testid * fix: Member invite popup not popping up * Update copyInviteLink to new-member-button testid * Hopefully fix test ids this time * fix: Use the right buttons on the right pages --------- Co-authored-by: Alex van Andel <me@alexvanandel.com> Co-authored-by: Peer Richelsen <peeroke@gmail.com> Co-authored-by: Udit Takkar <53316345+Udit-takkar@users.noreply.github.com>
58 lines
1.6 KiB
TypeScript
58 lines
1.6 KiB
TypeScript
import type { Page } from "@playwright/test";
|
|
import type { createUsersFixture } from "playwright/fixtures/users";
|
|
|
|
import { submitAndWaitForResponse } from "../../lib/testUtils";
|
|
|
|
export const inviteUserToOrganization = async ({
|
|
page,
|
|
organizationId,
|
|
email,
|
|
usersFixture,
|
|
}: {
|
|
page: Page;
|
|
organizationId: number;
|
|
email: string;
|
|
usersFixture: ReturnType<typeof createUsersFixture>;
|
|
}) => {
|
|
await page.goto("/settings/organizations/members");
|
|
const invitedUserEmail = usersFixture.trackEmail({
|
|
username: email.split("@")[0],
|
|
domain: email.split("@")[1],
|
|
});
|
|
await inviteAnEmail(page, invitedUserEmail);
|
|
return { invitedUserEmail };
|
|
};
|
|
|
|
export const inviteExistingUserToOrganization = async ({
|
|
page,
|
|
organizationId,
|
|
user,
|
|
usersFixture,
|
|
}: {
|
|
page: Page;
|
|
organizationId: number;
|
|
user: {
|
|
email: string;
|
|
};
|
|
usersFixture: ReturnType<typeof createUsersFixture>;
|
|
}) => {
|
|
await page.goto("/settings/organizations/members");
|
|
await inviteAnEmail(page, user.email);
|
|
return { invitedUserEmail: user.email };
|
|
};
|
|
|
|
export async function acceptTeamOrOrgInvite(page: Page) {
|
|
await page.goto("/settings/teams");
|
|
await submitAndWaitForResponse(page, "/api/trpc/teams/acceptOrLeave?batch=1", {
|
|
action: () => page.click('[data-testid^="accept-invitation"]'),
|
|
});
|
|
}
|
|
|
|
async function inviteAnEmail(page: Page, invitedUserEmail: string) {
|
|
await page.getByTestId("new-organization-member-button").click();
|
|
await page.locator('input[name="inviteUser"]').fill(invitedUserEmail);
|
|
await submitAndWaitForResponse(page, "/api/trpc/teams/inviteMember?batch=1", {
|
|
action: () => page.locator('button:text("Send invite")').click(),
|
|
});
|
|
}
|