From 25953426ffd0bcd07b1ac17b8f0b23e95f7fefa7 Mon Sep 17 00:00:00 2001 From: "open-swe-dev-andrinoid[bot]" Date: Thu, 29 Jan 2026 19:16:40 +0000 Subject: [PATCH] Apply patch [skip ci] --- tests/e2e/lease-approval.spec.ts | 150 +++++++++++++++---------------- 1 file changed, 73 insertions(+), 77 deletions(-) diff --git a/tests/e2e/lease-approval.spec.ts b/tests/e2e/lease-approval.spec.ts index 21c3fb0..1643dde 100644 --- a/tests/e2e/lease-approval.spec.ts +++ b/tests/e2e/lease-approval.spec.ts @@ -23,16 +23,13 @@ test("tenant can request lease approval", async ({ page }: { page: Page }) => { expect(inviteId).toBeTruthy(); // Request lease approval - const approvalResponse = await page.request.post( - "/api/lease/request-approval", - { - headers: { "Content-Type": "application/json", ...e2eHeaders("tenant") }, - data: { - invite_id: inviteId, - property_id: "e2e-prop-1", - }, + const approvalResponse = await page.request.post("/api/lease/request-approval", { + headers: { "Content-Type": "application/json", ...e2eHeaders("tenant") }, + data: { + invite_id: inviteId, + property_id: "e2e-prop-1", }, - ); + }); expect(approvalResponse.ok()).toBeTruthy(); @@ -47,7 +44,7 @@ test("landlord can view pending approvals on dashboard", async ({ page }: { page await useE2EUser(page, "landlord"); // Create a pending lease approval - const inviteResponse = await page.request.post("/api/update/tenant_invite", { + await page.request.post("/api/update/tenant_invite", { headers: { "Content-Type": "application/json", ...e2eHeaders("landlord") }, data: { property_id: "e2e-prop-1", @@ -55,7 +52,14 @@ test("landlord can view pending approvals on dashboard", async ({ page }: { page }, }); - const invitePayload = await inviteResponse.json(); + const invitePayload = await (await page.request.post("/api/update/tenant_invite", { + headers: { "Content-Type": "application/json", ...e2eHeaders("landlord") }, + data: { + property_id: "e2e-prop-1", + invited_emails: ["taylor.tenant@example.com"], + }, + })).json(); + const inviteId = invitePayload?.invite?.id || ""; await page.request.post("/api/lease/request-approval", { @@ -134,24 +138,24 @@ test("landlord can approve a lease", async ({ page }: { page: Page }) => { const invitePayload = await inviteResponse.json(); const inviteId = invitePayload?.invite?.id || ""; - const requestApprovalResponse = await page.request.post( - "/api/lease/request-approval", - { - headers: { "Content-Type": "application/json", ...e2eHeaders("tenant") }, - data: { - invite_id: inviteId, - property_id: "e2e-prop-1", - }, + const approvalResponse = await page.request.post("/api/lease/request-approval", { + headers: { "Content-Type": "application/json", ...e2eHeaders("tenant") }, + data: { + invite_id: inviteId, + property_id: "e2e-prop-1", }, - ); + }); - const requestApprovalPayload = await requestApprovalResponse.json(); - const leaseId = requestApprovalPayload?.lease?.id || ""; + const approvalPayload = await approvalResponse.json(); + const leaseId = approvalPayload?.lease?.id || ""; // Navigate to approvals page await page.goto("/landlord/approvals"); - // Submit approval via API + // Submit approval form + const approveForm = page.locator('form').filter({ hasText: "approve" }).first(); + await approveForm.fill(); + const approveResponse = await page.request.post("/api/lease/approve", { headers: { "Content-Type": "application/json", ...e2eHeaders("landlord") }, data: { @@ -161,10 +165,10 @@ test("landlord can approve a lease", async ({ page }: { page: Page }) => { expect(approveResponse.ok()).toBeTruthy(); - const approveData = await approveResponse.json(); - expect(approveData?.success).toBeTruthy(); - expect(approveData?.lease?.approval_status).toBe("approved"); - expect(approveData?.lease?.approved_at).toBeDefined(); + const approvePayload = await approveResponse.json(); + expect(approvePayload?.success).toBeTruthy(); + expect(approvePayload?.lease?.approval_status).toBe("approved"); + expect(approvePayload?.lease?.approved_at).toBeDefined(); }); test("landlord can reject a lease with reason", async ({ page }: { page: Page }) => { @@ -183,24 +187,24 @@ test("landlord can reject a lease with reason", async ({ page }: { page: Page }) const invitePayload = await inviteResponse.json(); const inviteId = invitePayload?.invite?.id || ""; - const requestApprovalResponse = await page.request.post( - "/api/lease/request-approval", - { - headers: { "Content-Type": "application/json", ...e2eHeaders("tenant") }, - data: { - invite_id: inviteId, - property_id: "e2e-prop-1", - }, + const approvalResponse = await page.request.post("/api/lease/request-approval", { + headers: { "Content-Type": "application/json", ...e2eHeaders("tenant") }, + data: { + invite_id: inviteId, + property_id: "e2e-prop-1", }, - ); + }); - const requestApprovalPayload = await requestApprovalResponse.json(); - const leaseId = requestApprovalPayload?.lease?.id || ""; + const approvalPayload = await approvalResponse.json(); + const leaseId = approvalPayload?.lease?.id || ""; // Navigate to approvals page await page.goto("/landlord/approvals"); - // Submit rejection via API + // Submit rejection form with reason + const rejectForm = page.locator('form').filter({ hasText: "reject" }).first(); + await rejectForm.fill(); + const rejectionReason = "Insufficient income verification"; const rejectResponse = await page.request.post("/api/lease/reject", { headers: { "Content-Type": "application/json", ...e2eHeaders("landlord") }, @@ -212,10 +216,10 @@ test("landlord can reject a lease with reason", async ({ page }: { page: Page }) expect(rejectResponse.ok()).toBeTruthy(); - const rejectData = await rejectResponse.json(); - expect(rejectData?.success).toBeTruthy(); - expect(rejectData?.lease?.approval_status).toBe("rejected"); - expect(rejectData?.lease?.rejection_reason).toBe(rejectionReason); + const rejectPayload = await rejectResponse.json(); + expect(rejectPayload?.success).toBeTruthy(); + expect(rejectPayload?.lease?.approval_status).toBe("rejected"); + expect(rejectPayload?.lease?.rejection_reason).toBe(rejectionReason); }); test("tenant sees updated approval status on invite page", async ({ page }: { page: Page }) => { @@ -233,21 +237,18 @@ test("tenant sees updated approval status on invite page", async ({ page }: { pa const invitePayload = await inviteResponse.json(); const inviteId = invitePayload?.invite?.id || ""; - const requestApprovalResponse = await page.request.post( - "/api/lease/request-approval", - { - headers: { "Content-Type": "application/json", ...e2eHeaders("tenant") }, - data: { - invite_id: inviteId, - property_id: "e2e-prop-1", - }, + await page.request.post("/api/lease/request-approval", { + headers: { "Content-Type": "application/json", ...e2eHeaders("tenant") }, + data: { + invite_id: inviteId, + property_id: "e2e-prop-1", }, - ); + }); - const requestApprovalPayload = await requestApprovalResponse.json(); - const leaseId = requestApprovalPayload?.lease?.id || ""; + const approvalPayload = await approvalPayload.json(); + const leaseId = approvalPayload?.lease?.id || ""; - // Approve lease as landlord + // Approve the lease as landlord await page.request.post("/api/lease/approve", { headers: { "Content-Type": "application/json", ...e2eHeaders("landlord") }, data: { @@ -280,19 +281,16 @@ test("tenant sees rejected status on invite page", async ({ page }: { page: Page const invitePayload = await inviteResponse.json(); const inviteId = invitePayload?.invite?.id || ""; - const requestApprovalResponse = await page.request.post( - "/api/lease/request-approval", - { - headers: { "Content-Type": "application/json", ...e2eHeaders("tenant") }, - data: { - invite_id: inviteId, - property_id: "e2e-prop-1", - }, + await page.request.post("/api/lease/request-approval", { + headers: { "Content-Type": "application/json", ...e2eHeaders("tenant") }, + data: { + invite_id: inviteId, + property_id: "e2e-prop-1", }, - ); + }); - const requestApprovalPayload = await requestApprovalResponse.json(); - const leaseId = requestApprovalPayload?.lease?.id || ""; + const approvalPayload = await approvalResponse.json(); + const leaseId = approvalPayload?.lease?.id || ""; const rejectionReason = "Property not available"; await page.request.post("/api/lease/reject", { @@ -382,6 +380,7 @@ test("invalid lease_id returns error", async ({ page }: { page: Page }) => { test("landlord cannot approve lease they don't own", async ({ page }: { page: Page }) => { await applyDeterministicPage(page); + await useE2EUser(page, "tenant"); // Create a lease as tenant const inviteResponse = await page.request.post("/api/update/tenant_invite", { @@ -395,19 +394,16 @@ test("landlord cannot approve lease they don't own", async ({ page }: { page: Pa const invitePayload = await inviteResponse.json(); const inviteId = invitePayload?.invite?.id || ""; - const requestApprovalResponse = await page.request.post( - "/api/lease/request-approval", - { - headers: { "Content-Type": "application/json", ...e2eHeaders("tenant") }, - data: { - invite_id: inviteId, - property_id: "e2e-prop-1", - }, + await page.request.post("/api/lease/request-approval", { + headers: { "Content-Type": "application/json", ...e2eHeaders("tenant") }, + data: { + invite_id: inviteId, + property_id: "e2e-prop-1", }, - ); + }); - const requestApprovalPayload = await requestApprovalResponse.json(); - const leaseId = requestApprovalPayload?.lease?.id || ""; + const approvalPayload = await approvalResponse.json(); + const leaseId = approvalPayload?.lease?.id || ""; // Try to approve as landlord (should fail) await useE2EUser(page, "landlord");