import { expect, test, type Page } from "@playwright/test"; import { applyDeterministicPage, useE2EUser } from "./helpers.ts"; test("tenant dashboard shows lease summary and activity", async ({ page }: { page: Page }) => { await applyDeterministicPage(page); await useE2EUser(page, "tenant"); await page.goto("/tenant/dashboard"); await expect(page.getByRole("heading", { name: /tenant portal/i })) .toBeVisible(); await expect(page.getByText("456 Maple St")).toBeVisible(); await expect(page.getByRole("heading", { name: /recent payments/i })) .toBeVisible(); await expect(page.getByRole("cell", { name: "ach" }).first()).toBeVisible(); }); test("tenant maintenance list includes active requests", async ({ page }: { page: Page }) => { await applyDeterministicPage(page); await useE2EUser(page, "tenant"); await page.goto("/tenant/maintenance"); await expect(page.getByRole("heading", { name: /maintenance requests/i })) .toBeVisible(); await expect( page.getByRole("heading", { name: /kitchen sink is leaking/i }), ).toBeVisible(); }); test("tenant can submit a maintenance request", async ({ page }: { page: Page }) => { await applyDeterministicPage(page); await useE2EUser(page, "tenant"); await page.goto("/tenant/maintenance/new"); await page.locator("#title").fill("HVAC filter replacement"); await page.locator("#category").selectOption("hvac"); await page.locator("#priority").selectOption("high"); await page.locator("#description").fill( "The air filter needs to be replaced before next week.", ); await page.getByRole("button", { name: /submit request/i }).click(); await expect(page).toHaveURL(/\/tenant\/maintenance\?success=true/); await expect(page.getByText(/submitted successfully/i)).toBeVisible(); }); test("tenant messages list shows landlord communication", async ({ page }: { page: Page }) => { await applyDeterministicPage(page); await useE2EUser(page, "tenant"); await page.goto("/tenant/messages"); await expect(page.getByRole("heading", { name: /messages/i })).toBeVisible(); await expect(page.getByText(/inspection scheduled/i)).toBeVisible(); const unreadMessage = page.getByRole("listitem").filter({ hasText: /leaking kitchen faucet/i, }).first(); await expect(unreadMessage).toBeVisible(); const markReadButton = unreadMessage.getByRole("button", { name: /mark as read/i, }); if (await markReadButton.count()) { await expect(markReadButton).toBeVisible(); } }); test("tenant rent pay flow accepts payment method", async ({ page }: { page: Page }) => { await applyDeterministicPage(page); await useE2EUser(page, "tenant"); await page.goto("/tenant/rent/pay"); await expect(page.getByRole("heading", { name: /pay rent/i })).toBeVisible(); await page.getByLabel(/payment method/i).selectOption("e2e-pay-method-1"); const submitButton = page.locator("button[type='submit']"); await submitButton.scrollIntoViewIfNeeded(); await submitButton.click(); await expect(page).toHaveURL(/\/tenant\/rent\/confirmation\?success=true/); });