// SPDX-FileCopyrightText: 2024 Aravinth Manivannan // // SPDX-License-Identifier: AGPL-3.0-or-later import { test, expect } from "@playwright/test"; import * as config from "./config"; import User from "./user"; test("has title", async ({ page }) => { await page.goto(config.INSTANCE_URL.toString()); await expect(page).toHaveTitle("Forgejo: Beyond coding. We forge."); }); test("Go to explore page", async ({ page }) => { await page.goto(config.INSTANCE_URL.toString()); await page.getByRole("link", { name: "Explore" }).click(); await page.waitForURL("**/explore/repos"); await expect(page).toHaveTitle("Explore - Forgejo: Beyond coding. We forge."); }); test("Test registration error: password mismatch", async ({ page }) => { const user = new User("pwmismatch"); console.log(`running with user ${user.username}`); await page.goto(config.INSTANCE_URL.toString()); await page.getByRole("link", { name: "Register" }).click(); await page.waitForURL("**/user/sign_up"); await page.getByLabel("Username").fill(user.username); await page.getByLabel("Email Address").fill(user.email); await page.getByLabel("Password", { exact: true }).fill(user.password); // passwords don't match await page.getByLabel("Confirm Password").fill(user.username); await page.getByRole("button", { name: "Register Account" }).click(); await expect(page).toHaveTitle( "Register - Forgejo: Beyond coding. We forge." ); expect(page.locator(".negative > p:nth-child(1)")).toContainText( "passwords do not match" ); }); test("Test registration error: dupe user", async ({ page }) => { const user = new User("dupeuser"); // pre-register user for duplicate user test await user.register(page); await user.logout(page); await expect(page).toHaveTitle("Forgejo: Beyond coding. We forge."); await page.getByRole("link", { name: "Register" }).click(); await page.waitForURL("**/user/sign_up"); await page.getByLabel("Username").fill(user.username); await page.getByLabel("Email Address").fill(user.email); await page.getByLabel("Password", { exact: true }).fill(user.password); await page.getByLabel("Confirm Password").fill(user.password); await page.getByRole("button", { name: "Register Account" }).click(); await expect(page).toHaveTitle( "Register - Forgejo: Beyond coding. We forge." ); await page.locator(".negative > p:nth-child(1)").waitFor(); expect(page.locator(".negative > p:nth-child(1)")).toContainText( "The username is already taken." ); }); test("Test successful registration", async ({ page }) => { const user = new User("register"); console.log(`running with user ${user.username}`); await page.goto(config.INSTANCE_URL.toString()); // successful registration await user.register(page); await page.waitForURL(config.INSTANCE_URL.toString()); await expect(page).toHaveTitle( `${user.username} - Dashboard - Forgejo: Beyond coding. We forge.` ); expect(page.locator(".positive > p:nth-child(1)")).toContainText( "Account was successfully created. Welcome!" ); }); test("Test signout", async ({ page }) => { const user = new User("signout"); // successful registration await user.register(page); await user.logout(page); await expect(page).toHaveTitle("Forgejo: Beyond coding. We forge."); }); test("Test login", async ({ page }) => { const user = new User("login"); // successful registration await user.register(page); await user.logout(page); await user.login(page); await user.logout(page); // sign in with email await page.goto(config.INSTANCE_URL.toString()); await page.getByRole("link", { name: "Sign In" }).click(); await page.waitForURL("**/user/login**"); await page.getByLabel("Username").clear(); await page.getByLabel("Password", { exact: true }).clear(); await page.getByLabel("Username").fill(user.email); await page.getByLabel("Password", { exact: true }).fill(user.password); await page.getByRole("button", { name: "Sign In" }).click(); await expect(page).toHaveTitle( `${user.username} - Dashboard - Forgejo: Beyond coding. We forge.` ); });