diff --git a/tests/e2e/lease-creation.spec.ts b/tests/e2e/lease-creation.spec.ts new file mode 100644 index 0000000..3d40565 --- /dev/null +++ b/tests/e2e/lease-creation.spec.ts @@ -0,0 +1,40 @@ +import { expect, Page, test } from "@playwright/test"; +import { applyDeterministicPage, e2eHeaders, useE2EUser } from "./helpers.ts"; + +test("lease acceptance workflow (E2E fixtures)", async ({ page }: { page: Page }) => { + await applyDeterministicPage(page); + + // Landlord side: navigate to leased homes + await useE2EUser(page, "landlord"); + await page.goto("/landlord/dashboard"); + const link = page.getByRole("link", { name: /create new lease/i }); + if (await link.count()) { + await link.click(); + } else { + await page.goto("/leased-home"); + } + await expect(page.getByRole("heading", { name: /leased homes/i })).toBeVisible(); + + // Create an invite for an existing e2e lease (server-side fixture) + const inviteResp = await page.request.post("/api/update/lease_invite", { + headers: { "Content-Type": "application/json", ...e2eHeaders("landlord") }, + data: { lease_id: "e2e-lease-1" }, + }); + expect(inviteResp.ok()).toBeTruthy(); + + // Tenant accepts the lease + await useE2EUser(page, "tenant"); + const acceptResp = await page.request.post("/api/update/lease_accept", { + headers: { "Content-Type": "application/json", ...e2eHeaders("tenant") }, + data: { lease_id: "e2e-lease-1" }, + }); + expect(acceptResp.ok()).toBeTruthy(); + + const body = await acceptResp.json(); + expect(body?.success).toBeTruthy(); + // The response may include the updated lease; ensure status is active if present + const lease = body?.lease; + if (lease) { + expect(lease.lease_status === "active").toBeTruthy(); + } +});