Files
myeasycms-v2/apps/e2e/tests/utils/mailbox.ts
giancarlo 311086d0e7 Update retries in playwright config and refactor account settings
This update changes the number of retries in the Playwright configuration. Additionally, solid improvements have been made in the account settings, including better data semantics for testing, changes to email confirmation, and adding a new E2E test suite for accounts. The sign-up flow was updated and problems with multi-language support logic were fixed.
2024-04-11 18:15:16 +08:00

74 lines
1.6 KiB
TypeScript

import { Page } from '@playwright/test';
import { parse } from 'node-html-parser';
export class Mailbox {
constructor(
private readonly page: Page
) {
}
async visitMailbox(email: string) {
const mailbox = email.split('@')[0];
console.log(`Visiting mailbox ${mailbox} ...`)
if (!mailbox) {
throw new Error('Invalid email');
}
const json = await this.getInviteEmail(mailbox);
if (!json.body) {
console.log(json);
throw new Error('Email body was not found');
}
const html = (json.body as { html: string }).html;
const el = parse(html);
const linkHref = el.querySelector('a')?.getAttribute('href');
if (!linkHref) {
throw new Error('No link found in email');
}
console.log(`Visiting ${linkHref} ...`);
return this.page.goto(linkHref);
}
async getInviteEmail(
mailbox: string,
params = {
deleteAfter: true
}
) {
const url = `http://localhost:54324/api/v1/mailbox/${mailbox}`;
const response = await fetch(url);
const json = (await response.json()) as Array<{ id: string }>;
if (!json || !json.length) {
return;
}
const messageId = json[0]?.id;
const messageUrl = `${url}/${messageId}`;
const messageResponse = await fetch(messageUrl);
if (!messageResponse.ok) {
throw new Error(`Failed to fetch email: ${messageResponse.statusText}`);
}
// delete message
if (params.deleteAfter) {
await fetch(messageUrl, {
method: 'DELETE'
});
}
return await messageResponse.json();
}
}