feat: get activation link from maildev
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed
This commit is contained in:
parent
782cb765c5
commit
b09d5ce6c4
4 changed files with 57 additions and 5 deletions
|
@ -40,7 +40,7 @@ test("Test registration error: password mismatch", async ({ page }) => {
|
|||
"Register - Forgejo: Beyond coding. We forge."
|
||||
);
|
||||
expect(page.locator(".negative > p:nth-child(1)")).toContainText(
|
||||
"passwords do not match"
|
||||
"The passwords do not match"
|
||||
);
|
||||
});
|
||||
|
||||
|
@ -113,7 +113,7 @@ test("Test successful registration", async ({ page }) => {
|
|||
);
|
||||
|
||||
expect(page.locator(".positive > p:nth-child(1)")).toContainText(
|
||||
"Account was successfully created. Welcome!"
|
||||
"Account has been activated"
|
||||
);
|
||||
});
|
||||
|
||||
|
|
|
@ -3,4 +3,5 @@
|
|||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
export const INSTANCE_URL = new URL(process.env.INSTANCE_URL)
|
||||
export const MAILDEV_URL = new URL(process.env.MAILDEV_URL)
|
||||
export const ADMIN_USERNAME = "admin";
|
||||
|
|
27
tests/maildev.ts
Normal file
27
tests/maildev.ts
Normal file
|
@ -0,0 +1,27 @@
|
|||
import * as config from "./config";
|
||||
|
||||
export const getEmails = async (toAddr: string) => {
|
||||
const url = new URL(config.MAILDEV_URL);
|
||||
url.pathname = "/email";
|
||||
let res = await fetch(url);
|
||||
let data = await res.json();
|
||||
let mails = [];
|
||||
Array.from(data).forEach((mail: any) => {
|
||||
if (mail.to[0].address == toAddr) {
|
||||
mails.push(mail);
|
||||
}
|
||||
});
|
||||
return mails;
|
||||
};
|
||||
|
||||
export const getActivationLink = async (
|
||||
toAddr: string
|
||||
): Promise<string | void> => {
|
||||
let emails = await getEmails(toAddr);
|
||||
for (let i = 0; i < emails.length; i++) {
|
||||
let mail = emails[i];
|
||||
if (mail.subject.includes("Please activate your account")) {
|
||||
return mail.text.split('\n')[4]
|
||||
}
|
||||
}
|
||||
};
|
|
@ -1,6 +1,7 @@
|
|||
import { Page, expect } from "@playwright/test";
|
||||
import { getRandomString } from "./utils";
|
||||
import * as config from "./config";
|
||||
import { getActivationLink } from "./maildev";
|
||||
|
||||
export default class User {
|
||||
username: string;
|
||||
|
@ -78,14 +79,37 @@ export default class User {
|
|||
await page.getByLabel("Password", { exact: true }).fill(this.password);
|
||||
await page.getByLabel("Confirm Password").fill(this.password);
|
||||
await page.getByRole("button", { name: "Register Account" }).click();
|
||||
await page.waitForURL(config.INSTANCE_URL.toString());
|
||||
|
||||
await page.waitForURL("**/user/sign_up");
|
||||
|
||||
// account activation through email
|
||||
await expect(page.locator("h2.ui")).toContainText("Activate Your Account");
|
||||
await expect(
|
||||
page.locator("div.ui:nth-child(3) > p:nth-child(1)")
|
||||
).toContainText(this.email);
|
||||
|
||||
let activationEmail: String | null = null;
|
||||
while (true) {
|
||||
let x = await getActivationLink(this.email);
|
||||
if (typeof x === "string") {
|
||||
activationEmail = x;
|
||||
break;
|
||||
}
|
||||
}
|
||||
await page.goto(activationEmail.toString());
|
||||
// go to forgejo
|
||||
await page.waitForURL("**/user/activate**");
|
||||
await page.getByLabel("Password", { exact: true }).fill(this.password);
|
||||
// click verify account btn
|
||||
await page.getByRole("button", { name: "Confirm Password" }).click();
|
||||
|
||||
// registration successful
|
||||
await page.waitForURL(config.INSTANCE_URL.toString());
|
||||
await expect(page).toHaveTitle(
|
||||
`${this.username} - Dashboard - Forgejo: Beyond coding. We forge.`
|
||||
);
|
||||
|
||||
expect(page.locator(".positive > p:nth-child(1)")).toContainText(
|
||||
"Account was successfully created. Welcome!"
|
||||
"Account has been activated"
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue