mirror of
https://github.com/Hestia-Homes/assessment-model.git
synced 2026-06-30 12:55:02 +00:00
100 lines
3.3 KiB
JavaScript
100 lines
3.3 KiB
JavaScript
/**
|
|
* Live Tracking — PIBI dates editor (issue #252)
|
|
*
|
|
* Verifies the write-role flow on the PIBI section of the property detail
|
|
* drawer: a `write` user can pick PIBI order and completion dates, hit
|
|
* Save, and the chosen dates are still reflected after the page is
|
|
* reloaded (i.e. the values were persisted server-side).
|
|
*
|
|
* The spec assumes an authenticated `write` session can be reused (or the
|
|
* test harness logs in via the same flow as the rest of the suite). The
|
|
* target portfolio slug + a deal id with PIBI fields editable for the
|
|
* write user are read from Cypress env vars so the spec stays portable.
|
|
*/
|
|
|
|
const PORTFOLIO_SLUG = Cypress.env("LIVE_PORTFOLIO_SLUG");
|
|
const TARGET_DEAL_NAME = Cypress.env("LIVE_PIBI_DEAL_NAME");
|
|
|
|
const ORDER_DATE = "2025-03-12";
|
|
const COMPLETED_DATE = "2025-04-02";
|
|
|
|
describe("PIBI dates editor — write user flow", function () {
|
|
before(function () {
|
|
if (!PORTFOLIO_SLUG) {
|
|
cy.log(
|
|
"LIVE_PORTFOLIO_SLUG env var not set — skipping live tracking specs",
|
|
);
|
|
this.skip();
|
|
}
|
|
});
|
|
|
|
function openDrawerForTargetDeal() {
|
|
cy.visit(`/portfolio/${PORTFOLIO_SLUG}/your-projects/live`);
|
|
|
|
// Switch to the Measures tab — the easiest way into the drawer.
|
|
cy.contains("button, [role=tab]", "Measures").click();
|
|
|
|
if (TARGET_DEAL_NAME) {
|
|
cy.contains("[data-testid=measures-row]", TARGET_DEAL_NAME).click();
|
|
} else {
|
|
cy.get("[data-testid=measures-row]").first().click();
|
|
}
|
|
|
|
cy.get("[data-testid=property-detail-drawer]").should("be.visible");
|
|
// Navigate to the PIBI tab (drawer opens on Works tab from Measures row click).
|
|
cy.get("[data-testid=drawer-tab-pibi]").click();
|
|
cy.get("[data-testid=drawer-section-pibi]").should("exist");
|
|
}
|
|
|
|
it("lets a write user set PIBI order + completion dates and persists them across reload", () => {
|
|
openDrawerForTargetDeal();
|
|
|
|
// Both date inputs render for write+ users.
|
|
cy.get("[data-testid=pibi-order-date-input]").should("be.visible");
|
|
cy.get("[data-testid=pibi-completed-date-input]").should("be.visible");
|
|
|
|
cy.get("[data-testid=pibi-order-date-input]")
|
|
.clear()
|
|
.type(ORDER_DATE);
|
|
cy.get("[data-testid=pibi-completed-date-input]")
|
|
.clear()
|
|
.type(COMPLETED_DATE);
|
|
|
|
// Save button should be enabled once values change.
|
|
cy.get("[data-testid=pibi-save-button]")
|
|
.should("not.be.disabled")
|
|
.click();
|
|
|
|
// Saving completes — the button label flips back from "Saving…" to
|
|
// "Save PIBI Dates" and no error banner is shown.
|
|
cy.get("[data-testid=pibi-save-button]").should(
|
|
"contain.text",
|
|
"Save PIBI Dates",
|
|
);
|
|
cy.get("[data-testid=pibi-error]").should("not.exist");
|
|
|
|
// Optimistic update — the inputs already reflect the new values.
|
|
cy.get("[data-testid=pibi-order-date-input]").should(
|
|
"have.value",
|
|
ORDER_DATE,
|
|
);
|
|
cy.get("[data-testid=pibi-completed-date-input]").should(
|
|
"have.value",
|
|
COMPLETED_DATE,
|
|
);
|
|
|
|
// Reload the page and reopen the drawer — the persisted values must
|
|
// still be there.
|
|
cy.reload();
|
|
openDrawerForTargetDeal();
|
|
|
|
cy.get("[data-testid=pibi-order-date-input]").should(
|
|
"have.value",
|
|
ORDER_DATE,
|
|
);
|
|
cy.get("[data-testid=pibi-completed-date-input]").should(
|
|
"have.value",
|
|
COMPLETED_DATE,
|
|
);
|
|
});
|
|
});
|