30 lines
1.1 KiB
TypeScript
30 lines
1.1 KiB
TypeScript
import type { Page } from "@playwright/test";
|
|
import { expect } from "@playwright/test";
|
|
import { JSDOM } from "jsdom";
|
|
// eslint-disable-next-line no-restricted-imports
|
|
import type { Messages } from "mailhog";
|
|
import type { createEmailsFixture } from "playwright/fixtures/emails";
|
|
|
|
import { getEmailsReceivedByUser } from "../lib/testUtils";
|
|
|
|
export async function expectInvitationEmailToBeReceived(
|
|
page: Page,
|
|
emails: ReturnType<typeof createEmailsFixture>,
|
|
userEmail: string,
|
|
subject: string,
|
|
returnLink?: string
|
|
) {
|
|
if (!emails) return null;
|
|
// We need to wait for the email to go through, otherwise it will fail
|
|
// eslint-disable-next-line playwright/no-wait-for-timeout
|
|
await page.waitForTimeout(2000);
|
|
const receivedEmails = await getEmailsReceivedByUser({ emails, userEmail });
|
|
expect(receivedEmails?.total).toBe(1);
|
|
const [firstReceivedEmail] = (receivedEmails as Messages).items;
|
|
expect(firstReceivedEmail.subject).toBe(subject);
|
|
if (!returnLink) return;
|
|
const dom = new JSDOM(firstReceivedEmail.html);
|
|
const anchor = dom.window.document.querySelector(`a[href*="${returnLink}"]`);
|
|
return anchor?.getAttribute("href");
|
|
}
|