import { type APIRequestContext, expect, test } from "@playwright/test"; import { e2eHeaders } from "./helpers.ts"; test("lease document API supports create, retrieve, and delete", async ({ request }: { request: APIRequestContext }) => { const createResponse = await request.post("/api/create/lease_document", { headers: { ...e2eHeaders("landlord"), "Content-Type": "application/json", }, data: { lease_id: "e2e-lease-1", document_type: "addendum", file_url: "/static/addendum-test.pdf", file_name: "addendum-test.pdf", }, }); expect(createResponse.ok()).toBeTruthy(); const createData = await createResponse.json(); expect(createData.success).toBeTruthy(); const created = createData.document; expect(created.document_type).toBe("addendum"); const listResponse = await request.get( "/api/retrieve/lease_documents?lease_id=e2e-lease-1&document_type=addendum", { headers: e2eHeaders("landlord") }, ); expect(listResponse.ok()).toBeTruthy(); const listData = await listResponse.json(); expect(listData.success).toBeTruthy(); expect( listData.documents.some((doc: { id: string }) => doc.id === created.id), ).toBeTruthy(); const fetchResponse = await request.get( `/api/retrieve/lease_documents?id=${created.id}`, { headers: e2eHeaders("landlord") }, ); expect(fetchResponse.ok()).toBeTruthy(); const fetchData = await fetchResponse.json(); expect(fetchData.success).toBeTruthy(); expect(fetchData.document?.id).toBe(created.id); const deleteResponse = await request.post("/api/delete/lease_document", { headers: { ...e2eHeaders("landlord"), "Content-Type": "application/json", }, data: { id: created.id }, }); expect(deleteResponse.ok()).toBeTruthy(); const deleteData = await deleteResponse.json(); expect(deleteData.success).toBeTruthy(); expect(deleteData.deleted?.id).toBe(created.id); const afterResponse = await request.get( `/api/retrieve/lease_documents?id=${created.id}`, { headers: e2eHeaders("landlord") }, ); expect(afterResponse.ok()).toBeTruthy(); const afterData = await afterResponse.json(); expect(afterData.success).toBeTruthy(); expect(afterData.document).toBeNull(); }); test("lease document API returns main document and signing status", async ({ request }: { request: APIRequestContext }) => { const createResponse = await request.post("/api/create/lease_document", { headers: { ...e2eHeaders("landlord"), "Content-Type": "application/json", }, data: { lease_id: "e2e-lease-1", document_type: "lease", file_url: "/static/lease-main-test.pdf", file_name: "lease-main-test.pdf", }, }); expect(createResponse.ok()).toBeTruthy(); const createData = await createResponse.json(); const created = createData.document; const mainResponse = await request.get( "/api/retrieve/lease_documents?lease_id=e2e-lease-1&main_only=true", { headers: e2eHeaders("landlord") }, ); expect(mainResponse.ok()).toBeTruthy(); const mainData = await mainResponse.json(); expect(mainData.success).toBeTruthy(); expect(mainData.main_document?.id).toBe(created.id); const statusResponse = await request.get( "/api/retrieve/lease_documents?lease_id=e2e-lease-1&signing_status=true", { headers: e2eHeaders("landlord") }, ); expect(statusResponse.ok()).toBeTruthy(); const statusData = await statusResponse.json(); expect(statusData.success).toBeTruthy(); expect(statusData.signing_status.has_lease_document).toBeTruthy(); expect(statusData.signing_status.landlord_signed).toBe(false); expect(statusData.signing_status.tenant_signed).toBe(false); expect(statusData.signing_status.fully_signed).toBe(false); });