import type { Page } from '@playwright/test'; import { expect } from '../fixtures'; export class AuthPage { constructor(private page: Page) {} async gotoLogin() { await this.page.goto('/login'); await expect(this.page.getByRole('heading')).toContainText('Sign In'); } async gotoRegister() { await this.page.goto('/register'); await expect(this.page.getByRole('heading')).toContainText('Sign Up'); } async register(email: string, password: string) { await this.gotoRegister(); await this.page.getByPlaceholder('user@acme.com').click(); await this.page.getByPlaceholder('user@acme.com').fill(email); await this.page.getByLabel('Password').click(); await this.page.getByLabel('Password').fill(password); await this.page.getByRole('button', { name: 'Sign Up' }).click(); } async login(email: string, password: string) { await this.gotoLogin(); await this.page.getByPlaceholder('user@acme.com').click(); await this.page.getByPlaceholder('user@acme.com').fill(email); await this.page.getByLabel('Password').click(); await this.page.getByLabel('Password').fill(password); await this.page.getByRole('button', { name: 'Sign In' }).click(); } async logout(email: string, password: string) { await this.login(email, password); await this.page.waitForURL('/'); await this.openSidebar(); const userNavButton = this.page.getByTestId('user-nav-button'); await expect(userNavButton).toBeVisible(); await userNavButton.click(); const userNavMenu = this.page.getByTestId('user-nav-menu'); await expect(userNavMenu).toBeVisible(); const authMenuItem = this.page.getByTestId('user-nav-item-auth'); await expect(authMenuItem).toContainText('Sign out'); await authMenuItem.click(); const userEmail = this.page.getByTestId('user-email'); await expect(userEmail).toContainText('Guest'); } async expectToastToContain(text: string) { await expect(this.page.getByTestId('toast')).toContainText(text); } async openSidebar() { const sidebarToggleButton = this.page.getByTestId('sidebar-toggle-button'); await sidebarToggleButton.click(); } }