Apply patch [skip ci]
This commit is contained in:
parent
25953426ff
commit
19b42e993d
@ -18,8 +18,8 @@ test("tenant can request lease approval", async ({ page }: { page: Page }) => {
|
|||||||
});
|
});
|
||||||
expect(inviteResponse.ok()).toBeTruthy();
|
expect(inviteResponse.ok()).toBeTruthy();
|
||||||
|
|
||||||
const invitePayload = await inviteResponse.json();
|
const inviteData = await inviteResponse.json();
|
||||||
const inviteId = invitePayload?.invite?.id || "";
|
const inviteId = inviteData?.invite?.id || "";
|
||||||
expect(inviteId).toBeTruthy();
|
expect(inviteId).toBeTruthy();
|
||||||
|
|
||||||
// Request lease approval
|
// Request lease approval
|
||||||
@ -33,10 +33,10 @@ test("tenant can request lease approval", async ({ page }: { page: Page }) => {
|
|||||||
|
|
||||||
expect(approvalResponse.ok()).toBeTruthy();
|
expect(approvalResponse.ok()).toBeTruthy();
|
||||||
|
|
||||||
const approvalPayload = await approvalResponse.json();
|
const approvalData = await approvalResponse.json();
|
||||||
expect(approvalPayload?.success).toBeTruthy();
|
expect(approvalData?.success).toBeTruthy();
|
||||||
expect(approvalPayload?.lease).toBeDefined();
|
expect(approvalData?.lease).toBeDefined();
|
||||||
expect(approvalPayload?.lease?.approval_status).toBe("pending_approval");
|
expect(approvalData?.lease?.approval_status).toBe("pending_approval");
|
||||||
});
|
});
|
||||||
|
|
||||||
test("landlord can view pending approvals on dashboard", async ({ page }: { page: Page }) => {
|
test("landlord can view pending approvals on dashboard", async ({ page }: { page: Page }) => {
|
||||||
@ -44,7 +44,7 @@ test("landlord can view pending approvals on dashboard", async ({ page }: { page
|
|||||||
await useE2EUser(page, "landlord");
|
await useE2EUser(page, "landlord");
|
||||||
|
|
||||||
// Create a pending lease approval
|
// Create a pending lease approval
|
||||||
await page.request.post("/api/update/tenant_invite", {
|
const inviteResponse = await page.request.post("/api/update/tenant_invite", {
|
||||||
headers: { "Content-Type": "application/json", ...e2eHeaders("landlord") },
|
headers: { "Content-Type": "application/json", ...e2eHeaders("landlord") },
|
||||||
data: {
|
data: {
|
||||||
property_id: "e2e-prop-1",
|
property_id: "e2e-prop-1",
|
||||||
@ -52,15 +52,8 @@ test("landlord can view pending approvals on dashboard", async ({ page }: { page
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
const invitePayload = await (await page.request.post("/api/update/tenant_invite", {
|
const inviteData = await inviteResponse.json();
|
||||||
headers: { "Content-Type": "application/json", ...e2eHeaders("landlord") },
|
const inviteId = inviteData?.invite?.id || "";
|
||||||
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", {
|
await page.request.post("/api/lease/request-approval", {
|
||||||
headers: { "Content-Type": "application/json", ...e2eHeaders("tenant") },
|
headers: { "Content-Type": "application/json", ...e2eHeaders("tenant") },
|
||||||
@ -95,8 +88,8 @@ test("landlord can view pending approvals on dedicated page", async ({ page }: {
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
const invitePayload = await inviteResponse.json();
|
const inviteData = await inviteResponse.json();
|
||||||
const inviteId = invitePayload?.invite?.id || "";
|
const inviteId = inviteData?.invite?.id || "";
|
||||||
|
|
||||||
await page.request.post("/api/lease/request-approval", {
|
await page.request.post("/api/lease/request-approval", {
|
||||||
headers: { "Content-Type": "application/json", ...e2eHeaders("tenant") },
|
headers: { "Content-Type": "application/json", ...e2eHeaders("tenant") },
|
||||||
@ -135,10 +128,10 @@ test("landlord can approve a lease", async ({ page }: { page: Page }) => {
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
const invitePayload = await inviteResponse.json();
|
const inviteData = await inviteResponse.json();
|
||||||
const inviteId = invitePayload?.invite?.id || "";
|
const inviteId = inviteData?.invite?.id || "";
|
||||||
|
|
||||||
const approvalResponse = await page.request.post("/api/lease/request-approval", {
|
await page.request.post("/api/lease/request-approval", {
|
||||||
headers: { "Content-Type": "application/json", ...e2eHeaders("tenant") },
|
headers: { "Content-Type": "application/json", ...e2eHeaders("tenant") },
|
||||||
data: {
|
data: {
|
||||||
invite_id: inviteId,
|
invite_id: inviteId,
|
||||||
@ -146,15 +139,15 @@ test("landlord can approve a lease", async ({ page }: { page: Page }) => {
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
const approvalPayload = await approvalResponse.json();
|
const approvalData = await approvalResponse.json();
|
||||||
const leaseId = approvalPayload?.lease?.id || "";
|
const leaseId = approvalData?.lease?.id || "";
|
||||||
|
|
||||||
// Navigate to approvals page
|
// Navigate to approvals page
|
||||||
await page.goto("/landlord/approvals");
|
await page.goto("/landlord/approvals");
|
||||||
|
|
||||||
// Submit approval form
|
// Submit approval form
|
||||||
const approveForm = page.locator('form').filter({ hasText: "approve" }).first();
|
const approveForm = page.locator('form').filter({ hasText: "approve" }).first();
|
||||||
await approveForm.fill();
|
await approveForm.fill({});
|
||||||
|
|
||||||
const approveResponse = await page.request.post("/api/lease/approve", {
|
const approveResponse = await page.request.post("/api/lease/approve", {
|
||||||
headers: { "Content-Type": "application/json", ...e2eHeaders("landlord") },
|
headers: { "Content-Type": "application/json", ...e2eHeaders("landlord") },
|
||||||
@ -165,10 +158,10 @@ test("landlord can approve a lease", async ({ page }: { page: Page }) => {
|
|||||||
|
|
||||||
expect(approveResponse.ok()).toBeTruthy();
|
expect(approveResponse.ok()).toBeTruthy();
|
||||||
|
|
||||||
const approvePayload = await approveResponse.json();
|
const approveData = await approveResponse.json();
|
||||||
expect(approvePayload?.success).toBeTruthy();
|
expect(approveData?.success).toBeTruthy();
|
||||||
expect(approvePayload?.lease?.approval_status).toBe("approved");
|
expect(approveData?.lease?.approval_status).toBe("approved");
|
||||||
expect(approvePayload?.lease?.approved_at).toBeDefined();
|
expect(approveData?.lease?.approved_at).toBeDefined();
|
||||||
});
|
});
|
||||||
|
|
||||||
test("landlord can reject a lease with reason", async ({ page }: { page: Page }) => {
|
test("landlord can reject a lease with reason", async ({ page }: { page: Page }) => {
|
||||||
@ -184,10 +177,10 @@ test("landlord can reject a lease with reason", async ({ page }: { page: Page })
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
const invitePayload = await inviteResponse.json();
|
const inviteData = await inviteResponse.json();
|
||||||
const inviteId = invitePayload?.invite?.id || "";
|
const inviteId = inviteData?.invite?.id || "";
|
||||||
|
|
||||||
const approvalResponse = await page.request.post("/api/lease/request-approval", {
|
await page.request.post("/api/lease/request-approval", {
|
||||||
headers: { "Content-Type": "application/json", ...e2eHeaders("tenant") },
|
headers: { "Content-Type": "application/json", ...e2eHeaders("tenant") },
|
||||||
data: {
|
data: {
|
||||||
invite_id: inviteId,
|
invite_id: inviteId,
|
||||||
@ -195,15 +188,15 @@ test("landlord can reject a lease with reason", async ({ page }: { page: Page })
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
const approvalPayload = await approvalResponse.json();
|
const approvalData = await approvalResponse.json();
|
||||||
const leaseId = approvalPayload?.lease?.id || "";
|
const leaseId = approvalData?.lease?.id || "";
|
||||||
|
|
||||||
// Navigate to approvals page
|
// Navigate to approvals page
|
||||||
await page.goto("/landlord/approvals");
|
await page.goto("/landlord/approvals");
|
||||||
|
|
||||||
// Submit rejection form with reason
|
// Submit rejection form with reason
|
||||||
const rejectForm = page.locator('form').filter({ hasText: "reject" }).first();
|
const rejectForm = page.locator('form').filter({ hasText: "reject" }).first();
|
||||||
await rejectForm.fill();
|
await rejectForm.fill({});
|
||||||
|
|
||||||
const rejectionReason = "Insufficient income verification";
|
const rejectionReason = "Insufficient income verification";
|
||||||
const rejectResponse = await page.request.post("/api/lease/reject", {
|
const rejectResponse = await page.request.post("/api/lease/reject", {
|
||||||
@ -216,10 +209,10 @@ test("landlord can reject a lease with reason", async ({ page }: { page: Page })
|
|||||||
|
|
||||||
expect(rejectResponse.ok()).toBeTruthy();
|
expect(rejectResponse.ok()).toBeTruthy();
|
||||||
|
|
||||||
const rejectPayload = await rejectResponse.json();
|
const rejectData = await rejectResponse.json();
|
||||||
expect(rejectPayload?.success).toBeTruthy();
|
expect(rejectData?.success).toBeTruthy();
|
||||||
expect(rejectPayload?.lease?.approval_status).toBe("rejected");
|
expect(rejectData?.lease?.approval_status).toBe("rejected");
|
||||||
expect(rejectPayload?.lease?.rejection_reason).toBe(rejectionReason);
|
expect(rejectData?.lease?.rejection_reason).toBe(rejectionReason);
|
||||||
});
|
});
|
||||||
|
|
||||||
test("tenant sees updated approval status on invite page", async ({ page }: { page: Page }) => {
|
test("tenant sees updated approval status on invite page", async ({ page }: { page: Page }) => {
|
||||||
@ -234,8 +227,8 @@ test("tenant sees updated approval status on invite page", async ({ page }: { pa
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
const invitePayload = await inviteResponse.json();
|
const inviteData = await inviteResponse.json();
|
||||||
const inviteId = invitePayload?.invite?.id || "";
|
const inviteId = inviteData?.invite?.id || "";
|
||||||
|
|
||||||
await page.request.post("/api/lease/request-approval", {
|
await page.request.post("/api/lease/request-approval", {
|
||||||
headers: { "Content-Type": "application/json", ...e2eHeaders("tenant") },
|
headers: { "Content-Type": "application/json", ...e2eHeaders("tenant") },
|
||||||
@ -245,10 +238,10 @@ test("tenant sees updated approval status on invite page", async ({ page }: { pa
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
const approvalPayload = await approvalPayload.json();
|
const approvalData = await approvalResponse.json();
|
||||||
const leaseId = approvalPayload?.lease?.id || "";
|
const leaseId = approvalData?.lease?.id || "";
|
||||||
|
|
||||||
// Approve the lease as landlord
|
// Approve lease as landlord
|
||||||
await page.request.post("/api/lease/approve", {
|
await page.request.post("/api/lease/approve", {
|
||||||
headers: { "Content-Type": "application/json", ...e2eHeaders("landlord") },
|
headers: { "Content-Type": "application/json", ...e2eHeaders("landlord") },
|
||||||
data: {
|
data: {
|
||||||
@ -278,8 +271,8 @@ test("tenant sees rejected status on invite page", async ({ page }: { page: Page
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
const invitePayload = await inviteResponse.json();
|
const inviteData = await inviteResponse.json();
|
||||||
const inviteId = invitePayload?.invite?.id || "";
|
const inviteId = inviteData?.invite?.id || "";
|
||||||
|
|
||||||
await page.request.post("/api/lease/request-approval", {
|
await page.request.post("/api/lease/request-approval", {
|
||||||
headers: { "Content-Type": "application/json", ...e2eHeaders("tenant") },
|
headers: { "Content-Type": "application/json", ...e2eHeaders("tenant") },
|
||||||
@ -289,8 +282,8 @@ test("tenant sees rejected status on invite page", async ({ page }: { page: Page
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
const approvalPayload = await approvalResponse.json();
|
const approvalData = await approvalResponse.json();
|
||||||
const leaseId = approvalPayload?.lease?.id || "";
|
const leaseId = approvalData?.lease?.id || "";
|
||||||
|
|
||||||
const rejectionReason = "Property not available";
|
const rejectionReason = "Property not available";
|
||||||
await page.request.post("/api/lease/reject", {
|
await page.request.post("/api/lease/reject", {
|
||||||
@ -380,7 +373,6 @@ test("invalid lease_id returns error", async ({ page }: { page: Page }) => {
|
|||||||
|
|
||||||
test("landlord cannot approve lease they don't own", async ({ page }: { page: Page }) => {
|
test("landlord cannot approve lease they don't own", async ({ page }: { page: Page }) => {
|
||||||
await applyDeterministicPage(page);
|
await applyDeterministicPage(page);
|
||||||
await useE2EUser(page, "tenant");
|
|
||||||
|
|
||||||
// Create a lease as tenant
|
// Create a lease as tenant
|
||||||
const inviteResponse = await page.request.post("/api/update/tenant_invite", {
|
const inviteResponse = await page.request.post("/api/update/tenant_invite", {
|
||||||
@ -391,8 +383,8 @@ test("landlord cannot approve lease they don't own", async ({ page }: { page: Pa
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
const invitePayload = await inviteResponse.json();
|
const inviteData = await inviteResponse.json();
|
||||||
const inviteId = invitePayload?.invite?.id || "";
|
const inviteId = inviteData?.invite?.id || "";
|
||||||
|
|
||||||
await page.request.post("/api/lease/request-approval", {
|
await page.request.post("/api/lease/request-approval", {
|
||||||
headers: { "Content-Type": "application/json", ...e2eHeaders("tenant") },
|
headers: { "Content-Type": "application/json", ...e2eHeaders("tenant") },
|
||||||
@ -402,8 +394,8 @@ test("landlord cannot approve lease they don't own", async ({ page }: { page: Pa
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
const approvalPayload = await approvalResponse.json();
|
const approvalData = await approvalResponse.json();
|
||||||
const leaseId = approvalPayload?.lease?.id || "";
|
const leaseId = approvalData?.lease?.id || "";
|
||||||
|
|
||||||
// Try to approve as landlord (should fail)
|
// Try to approve as landlord (should fail)
|
||||||
await useE2EUser(page, "landlord");
|
await useE2EUser(page, "landlord");
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user