* Enhance E2E Tests and Configuration - Updated `.gitignore` to exclude `.auth/` directory for cleaner test environment. - Added `test:fast` script in `package.json` for faster Playwright test execution. - Configured Playwright to include a setup project for initializing tests. - Introduced `AUTH_STATES` utility for managing authentication states in tests. - Created `auth.setup.ts` for user authentication tests, ensuring proper login flows. - Refactored various test files to utilize the new authentication state management, improving test reliability and maintainability. - Adjusted team and user billing tests to streamline setup and enhance clarity. - Refactored some dialogs
97 lines
2.7 KiB
TypeScript
97 lines
2.7 KiB
TypeScript
import { expect, test } from '@playwright/test';
|
|
|
|
import { AuthPageObject } from '../authentication/auth.po';
|
|
import { InvitationsPageObject } from '../invitations/invitations.po';
|
|
import { TeamAccountsPageObject } from './team-accounts.po';
|
|
|
|
test.describe('Team Invitation with MFA Flow', () => {
|
|
test('complete flow: test@makerkit.dev creates team, invites super-admin@makerkit.dev who accepts after MFA', async ({
|
|
page,
|
|
}) => {
|
|
const auth = new AuthPageObject(page);
|
|
const teamAccounts = new TeamAccountsPageObject(page);
|
|
const invitations = new InvitationsPageObject(page);
|
|
|
|
await auth.loginAsUser({
|
|
email: 'test@makerkit.dev',
|
|
});
|
|
|
|
const teamName = `test-team-${Math.random().toString(36).substring(2, 15)}`;
|
|
const teamSlug = teamName.toLowerCase().replace(/ /g, '-');
|
|
|
|
// Create a new team
|
|
await teamAccounts.createTeam({
|
|
teamName,
|
|
slug: teamSlug,
|
|
});
|
|
|
|
// Navigate to members section and invite super-admin
|
|
await invitations.navigateToMembers();
|
|
await invitations.openInviteForm();
|
|
|
|
await invitations.inviteMembers([
|
|
{
|
|
email: 'super-admin@makerkit.dev',
|
|
role: 'member',
|
|
},
|
|
]);
|
|
|
|
// Verify invitation was sent
|
|
await expect(invitations.getInvitations()).toHaveCount(1);
|
|
|
|
const invitationRow = invitations.getInvitationRow(
|
|
'super-admin@makerkit.dev',
|
|
);
|
|
|
|
await expect(invitationRow).toBeVisible();
|
|
|
|
await expect(async () => {
|
|
// Sign out test@makerkit.dev
|
|
await auth.signOut();
|
|
|
|
await page.waitForURL('/', {
|
|
timeout: 5_000,
|
|
});
|
|
}).toPass();
|
|
|
|
await auth.visitConfirmEmailLink('super-admin@makerkit.dev');
|
|
|
|
await page
|
|
.locator('[data-test="existing-account-hint"]')
|
|
.getByRole('link', { name: 'Already have an account?' })
|
|
.click();
|
|
|
|
await auth.signIn({
|
|
email: 'super-admin@makerkit.dev',
|
|
password: 'testingpassword',
|
|
});
|
|
|
|
// Complete MFA verification
|
|
await expect(async () => {
|
|
await auth.submitMFAVerification(AuthPageObject.MFA_KEY);
|
|
}).toPass({
|
|
intervals: [
|
|
500, 2500, 5000, 7500, 10_000, 15_000, 20_000, 25_000, 30_000, 35_000,
|
|
40_000, 45_000, 50_000,
|
|
],
|
|
});
|
|
|
|
// Step 3: Verify team invitation is visible and accept it
|
|
// Accept the team invitation
|
|
await invitations.acceptInvitation();
|
|
|
|
// Should be redirected to the team dashboard
|
|
await page.waitForURL(`/home/${teamSlug}`, {
|
|
timeout: 5_000,
|
|
});
|
|
|
|
// Step 4: Verify membership was successful
|
|
// Open account selector to verify team is available
|
|
await teamAccounts.openAccountsSelector();
|
|
|
|
const team = teamAccounts.getTeamFromSelector(teamName);
|
|
|
|
await expect(team).toBeVisible();
|
|
});
|
|
});
|