integratedhub/tests/e2e/tenant-dashboard.spec.ts
2026-01-20 09:02:26 -06:00

84 lines
2.9 KiB
TypeScript

import { expect, test } from "@playwright/test";
import { applyDeterministicPage, useE2EUser } from "./helpers.ts";
test("tenant dashboard shows lease summary and activity", async ({ 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 }) => {
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 }) => {
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 }) => {
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 }) => {
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/);
});