Files
mygit/e2e/tests/admin/two-factor-auth.test.ts
DuckQ1u 93d1b7c3d3
Copilot Setup Steps / copilot-setup-steps (push) Has been cancelled
first commit
2026-04-22 19:51:20 +07:00

78 lines
3.0 KiB
TypeScript

import {AnalyticsOverviewPage, LoginPage, LoginVerifyPage} from '@/admin-pages';
import {EmailClient, EmailMessage, MailPit} from '@/helpers/services/email/mail-pit';
import {expect, test, withIsolatedPage} from '@/helpers/playwright';
test.describe('Two-Factor authentication', () => {
const emailClient: EmailClient = new MailPit();
function parseCodeFromMessageSubject(message: EmailMessage) {
const subject = message.Subject;
const match = subject.match(/\d+/);
if (!match) {
throw new Error(`No verification code found in subject: ${subject}`);
}
return match[0];
}
test.beforeEach(async ({page}) => {
const loginPage = new LoginPage(page);
await loginPage.goto();
});
test('authenticates with 2FA token', async ({browser, baseURL, ghostAccountOwner}) => {
await withIsolatedPage(browser, {baseURL}, async ({page: page}) => {
const {email, password} = ghostAccountOwner;
const adminLoginPage = new LoginPage(page);
await adminLoginPage.goto();
await adminLoginPage.signIn(email, password);
const messages = await emailClient.search({
subject: 'verification code',
to: ghostAccountOwner.email
});
const code = parseCodeFromMessageSubject(messages[0]);
const verifyPage = new LoginVerifyPage(page);
await verifyPage.twoFactorTokenField.fill(code);
await verifyPage.twoFactorVerifyButton.click();
const adminAnalyticsPage = new AnalyticsOverviewPage(page);
await expect(adminAnalyticsPage.header).toBeVisible();
});
});
test('authenticates with 2FA token that was resent', async ({browser, baseURL,ghostAccountOwner}) => {
await withIsolatedPage(browser, {baseURL}, async ({page: page}) => {
const {email, password} = ghostAccountOwner;
const adminLoginPage = new LoginPage(page);
await adminLoginPage.goto();
await adminLoginPage.signIn(email, password);
let messages = await emailClient.search({
subject: 'verification code',
to: ghostAccountOwner.email
});
expect(messages.length).toBe(1);
const verifyPage = new LoginVerifyPage(page);
await verifyPage.resendTwoFactorCodeButton.click();
messages = await emailClient.search({
subject: 'verification code',
to: ghostAccountOwner.email
}, {numberOfMessages: 2});
expect(messages.length).toBe(2);
const code = parseCodeFromMessageSubject(messages[0]);
await verifyPage.twoFactorTokenField.fill(code);
await verifyPage.twoFactorVerifyButton.click();
const adminAnalyticsPage = new AnalyticsOverviewPage(page);
await expect(adminAnalyticsPage.header).toBeVisible();
});
});
});