diff --git a/client/cypress/e2e/posting-bills/posting-bills.cy.js b/client/cypress/e2e/posting-bills/posting-bills.cy.js index 3a4221432..3e3ca29aa 100644 --- a/client/cypress/e2e/posting-bills/posting-bills.cy.js +++ b/client/cypress/e2e/posting-bills/posting-bills.cy.js @@ -1,4 +1,5 @@ import job from "../../fixtures/jobs/job-3.json"; +import job2 from "../../fixtures/jobs/job-4.json"; import moment from "moment"; const uuid = () => Cypress._.random(0, 1e6); @@ -246,202 +247,242 @@ describe( } ); -// describe( -// "Validating and calculating bills", -// { -// defaultCommandTimeout: 5000, -// }, -// () => { -// beforeEach(() => { -// cy.visit("/manage"); +describe.only( + "Validating and calculating bills", + { + defaultCommandTimeout: 5000, + }, + () => { + const today = moment(new Date()).format("YYYY-MM-DD"); -// cy.get("body").then(($body) => { -// if ($body.text().includes("Login")) { -// // Log in -// cy.get('[data-cy="username"]').type("john@imex.dev"); -// cy.get('[data-cy="password"]').type("john123"); -// cy.get('[data-cy="sign-in-button"]').click(); -// } + beforeEach(() => { + cy.viewport(1280, 720); + cy.visit("/manage/jobs"); -// cy.get(".ant-table-tbody") -// .should("be.visible") -// .find("tr") -// .should("not.have.class", "ant-table-placeholder"); + cy.intercept("POST", Cypress.env("graphql_dev_endpoint"), (req) => { + if (req.body.operationName === "SEARCH_VENDOR_AUTOCOMPLETE") { + req.alias = "vendors"; + } + }); -// cy.get(".ant-table-row").contains("QBD261").click(); + cy.get('[data-cy="active-jobs-table"]') + .find(".ant-table-tbody") + .find("> tr:not(.ant-table-measure-row)") + .as("active-jobs-table") + .should("not.have.class", "ant-table-placeholder"); -// cy.url().should("include", "/manage/jobs"); + cy.get("@active-jobs-table") + .contains(job2.clm_no) + .first() + .parent() + .find('[data-cy="active-job-link"]') + .click(); -// // Go to repair data tab -// cy.get('[data-cy="tab-partssublet"]').should("be.visible").click(); -// }); -// }); + // Go to repair data tab + cy.get('[data-cy="tab-partssublet"]').should("be.visible").click(); + }); -// it("validates auto reconciliation through posting bill", () => { -// // Find the first row in the parts order -// cy.get('[data-cy="part-orders-table"]') -// .find(".ant-table-tbody") -// .find("> tr:not(.ant-table-measure-row)") -// .as("orders-table") -// .should("not.have.class", "ant-table-placeholder"); + it.only("validates auto reconciliation through posting bill", () => { + // Find the first row in the parts order + cy.get('[data-cy="part-orders-table"]') + .find(".ant-table-tbody") + .find("> tr:not(.ant-table-measure-row)") + .as("orders-table") + .should("not.have.class", "ant-table-placeholder"); -// cy.get("@orders-table") -// .first() -// .should("be.visible") -// .find('[data-cy="receive-bill-button"]') -// .click(); + cy.get("@orders-table") + .first() + .should("be.visible") + .find('[data-cy="receive-bill-button"]') + .click(); -// // fill out form -// cy.get('[data-cy="bill-form-invoice"]').type(uniqueId("1QBD261-0")); + // fill out form + cy.get('[data-cy="bill-form-invoice"]').type(uuid()); -// cy.get("#bill-form-date").click(); -// cy.get('[title="2023-07-06"]').should("be.visible").click(); + cy.get("#bill-form-date").click(); + cy.get(`[title="${today}"]`).should("be.visible").click(); -// cy.get('[data-cy="bill-form-bill-total"]').type("70.46"); -// cy.get('[data-cy="bill-line-actual-cost"]').type("67.10"); + cy.get('[data-cy="bill-line-table"]').each(($row) => { + // get retail amount + cy.wrap($row) + .find('[data-cy="bill-line-actual-price"]') + .as("retailPrice") + .click({ force: true, multiple: true }); + cy.wrap($row) + .find('[data-cy="bill-line-actual-cost"]') + .click({ multiple: true }); + }); -// cy.get("#bill-form-discrepancy").should("have.text", "$0.00"); + cy.get('[data-cy="bill-line-actual-cost"]').then((cells) => { + const totals = cells.toArray().map((el) => Number(el.value)); + const sum = Cypress._.sum(totals); -// // Click save -// cy.get('[data-cy="bill-form-save-button"]').click(); + cy.get('[data-cy="bill-form-bill-total"]').type(sum); -// cy.get("#retailtotal").should("have.text", "$83.87"); + // Get taxes add it to the sum + cy.get('[data-cy="bill-form-tax"]').then((taxes) => { + const subtotals = taxes + .toArray() + .map((el) => Number(el.innerText.substring(1))); + const totalTax = Cypress._.sum(subtotals); -// cy.get(".discrepancy").each(($statistic) => { -// cy.wrap($statistic).should("have.text", "$0.00"); -// }); -// }); + const billAmount = sum + totalTax; -// it("returning item and validating statistics", () => { -// cy.get('[data-cy="bills-table"]') -// .find(".ant-table-tbody") -// .find("> tr:not(.ant-table-measure-row)") -// .as("bills-table") -// .should("not.have.class", "ant-table-placeholder"); + cy.get('[data-cy="bill-form-bill-total"]') + .find("input") + .clear() + .type(billAmount); + }); + }); -// cy.get("@bills-table") -// .first() -// .should("not.be.disabled") -// .find('[data-cy="return-items-button"]') -// .click(); + cy.get("#bill-form-discrepancy").should("have.text", "$0.00"); -// cy.get('[data-cy="billline-checkbox"]').check(); -// cy.get('[data-cy="billline-return-items-ok-button"]').click(); + // Click save + // cy.get('[data-cy="bill-form-save-button"]').click(); -// cy.get("#order-quantity").type("1", { force: true, multiple: true }); -// cy.get('[data-cy="part-order-select-none"]').click({ -// multiple: true, -// force: true, -// }); -// cy.get('[data-cy="order-part-submit"]').click({ -// multiple: true, -// force: true, -// }); + cy.get("@retailPrice") + .invoke("val") + .then((val) => { + cy.get("#retailtotal").should("have.text", `$${val}`); + }); -// cy.get("#totalReturns").should("have.text", "$83.87"); -// cy.get("#calculatedcreditsnotreceived").should("have.text", "$83.87"); -// cy.get("#creditsnotreceived").should("have.text", "$83.87"); -// }); + // TODO get total of discrepancy -// it("receives credit memo without return part", () => { -// // Find the first row in the parts order -// cy.get('[data-cy="part-orders-table"]') -// .find(".ant-table-tbody") -// .find("> tr:not(.ant-table-measure-row)") -// .as("orders-table") -// .should("not.have.class", "ant-table-placeholder"); + // cy.get(".discrepancy").each(($statistic) => { + // cy.wrap($statistic).should("have.text", "$0.00"); + // }); + }); -// cy.get("@orders-table") -// .find('[data-cy="part-order-return-checkbox"]') -// .filter(":checked") -// .first() -// .parent() -// .parent() -// .parent() -// .parent() -// .find('[data-cy="receive-bill-button"]') -// .click(); + it("returning item and validating statistics", () => { + cy.get('[data-cy="bills-table"]') + .find(".ant-table-tbody") + .find("> tr:not(.ant-table-measure-row)") + .as("bills-table") + .should("not.have.class", "ant-table-placeholder"); -// // fill out form -// cy.get('[data-cy="bill-form-invoice"]').type(uniqueId("1QBD261-01-")); + cy.get("@bills-table") + .first() + .should("not.be.disabled") + .find('[data-cy="return-items-button"]') + .click(); -// cy.get("#bill-form-date").click(); -// cy.get('[title="2023-07-06"]').should("be.visible").click(); + cy.get('[data-cy="billline-checkbox"]').check(); + cy.get('[data-cy="billline-return-items-ok-button"]').click(); -// cy.get('[data-cy="bill-form-bill-total"]').type("70.46"); -// cy.get('[data-cy="bill-line-actual-cost"]').type("67.10"); + cy.get("#order-quantity").type("1", { force: true, multiple: true }); + cy.get('[data-cy="part-order-select-none"]').click({ + multiple: true, + force: true, + }); + cy.get('[data-cy="order-part-submit"]').click({ + multiple: true, + force: true, + }); -// cy.get("#bill-form-discrepancy").should("have.text", "$0.00"); + cy.get("#totalReturns").should("have.text", "$83.87"); + cy.get("#calculatedcreditsnotreceived").should("have.text", "$83.87"); + cy.get("#creditsnotreceived").should("have.text", "$83.87"); + }); -// // Click save -// cy.get('[data-cy="bill-form-save-button"]').click(); + it("receives credit memo without return part", () => { + // Find the first row in the parts order + cy.get('[data-cy="part-orders-table"]') + .find(".ant-table-tbody") + .find("> tr:not(.ant-table-measure-row)") + .as("orders-table") + .should("not.have.class", "ant-table-placeholder"); -// cy.get("#totalReturns").should("have.text", "$83.87"); -// cy.get("#calculatedcreditsnotreceived").should("have.text", "$0.00"); -// cy.get("#creditsnotreceived").should("have.text", "$83.87"); -// }); + cy.get("@orders-table") + .find('[data-cy="part-order-return-checkbox"]') + .filter(":checked") + .first() + .parent() + .parent() + .parent() + .parent() + .find('[data-cy="receive-bill-button"]') + .click(); -// it("receives credit memo with return part", () => { -// // Find the first row in the parts order -// cy.get('[data-cy="part-orders-table"]') -// .find(".ant-table-tbody") -// .find("> tr:not(.ant-table-measure-row)") -// .as("orders-table") -// .should("not.have.class", "ant-table-placeholder"); + // fill out form + cy.get('[data-cy="bill-form-invoice"]').type(uuid()); -// cy.get("@orders-table") -// .find('[data-cy="part-order-return-checkbox"]') -// .filter(":checked") -// .first() -// .parent() -// .parent() -// .parent() -// .parent() -// .find('[data-cy="receive-bill-button"]') -// .click(); + cy.get("#bill-form-date").click(); + cy.get('[title="2023-07-06"]').should("be.visible").click(); -// // fill out form -// cy.get('[data-cy="bill-form-invoice"]').type(uniqueId("1QBD261-02-")); + cy.get('[data-cy="bill-form-bill-total"]').type("70.46"); + cy.get('[data-cy="bill-line-actual-cost"]').type("67.10"); -// cy.get("#bill-form-date").click(); -// cy.get('[title="2023-07-06"]').should("be.visible").click(); + cy.get("#bill-form-discrepancy").should("have.text", "$0.00"); -// cy.get('[data-cy="bill-form-bill-total"]').type("70.46"); -// cy.get('[data-cy="bill-line-actual-cost"]').type("67.10"); + // Click save + cy.get('[data-cy="bill-form-save-button"]').click(); -// cy.get("#bill-form-discrepancy").should("have.text", "$0.00"); + cy.get("#totalReturns").should("have.text", "$83.87"); + cy.get("#calculatedcreditsnotreceived").should("have.text", "$0.00"); + cy.get("#creditsnotreceived").should("have.text", "$83.87"); + }); -// cy.get('[data-cy="mark-as-received-checkbox"]').check(); + it("receives credit memo with return part", () => { + // Find the first row in the parts order + cy.get('[data-cy="part-orders-table"]') + .find(".ant-table-tbody") + .find("> tr:not(.ant-table-measure-row)") + .as("orders-table") + .should("not.have.class", "ant-table-placeholder"); -// // Click save -// cy.get('[data-cy="bill-form-save-button"]').click(); + cy.get("@orders-table") + .find('[data-cy="part-order-return-checkbox"]') + .filter(":checked") + .first() + .parent() + .parent() + .parent() + .parent() + .find('[data-cy="receive-bill-button"]') + .click(); -// cy.get("#totalReturns").should("have.text", "$83.87"); -// cy.get("#calculatedcreditsnotreceived").should("have.text", "$0.00"); -// cy.get("#creditsnotreceived").should("have.text", "$0.00"); -// }); + // fill out form + cy.get('[data-cy="bill-form-invoice"]').type(uuid()); -// it("views the row expander if it has the order and bill", () => { -// cy.get('[data-cy="tab-repairdata"]').should("be.visible").click(); + cy.get("#bill-form-date").click(); + cy.get('[title="2023-07-06"]').should("be.visible").click(); -// cy.get('[data-cy="filter-parts-button"]') -// .should("not.be.disabled") -// .click(); + cy.get('[data-cy="bill-form-bill-total"]').type("70.46"); + cy.get('[data-cy="bill-line-actual-cost"]').type("67.10"); -// cy.get('[data-cy="repair-data-table"]') -// .find(".ant-table-tbody") -// .find("> tr:not(.ant-table-measure-row)") -// .first() -// .next() -// .find("td") -// .first() -// .click(); + cy.get("#bill-form-discrepancy").should("have.text", "$0.00"); -// cy.get('[data-cy="parts-bills-order"]') -// .should("be.visible") -// .find("li") -// .first() -// .should("not.have.text", "This part has not yet been ordered."); -// }); -// } -// ); + cy.get('[data-cy="mark-as-received-checkbox"]').check(); + + // Click save + cy.get('[data-cy="bill-form-save-button"]').click(); + + cy.get("#totalReturns").should("have.text", "$83.87"); + cy.get("#calculatedcreditsnotreceived").should("have.text", "$0.00"); + cy.get("#creditsnotreceived").should("have.text", "$0.00"); + }); + + it("views the row expander if it has the order and bill", () => { + cy.get('[data-cy="tab-repairdata"]').should("be.visible").click(); + + cy.get('[data-cy="filter-parts-button"]') + .should("not.be.disabled") + .click(); + + cy.get('[data-cy="repair-data-table"]') + .find(".ant-table-tbody") + .find("> tr:not(.ant-table-measure-row)") + .first() + .next() + .find("td") + .first() + .click(); + + cy.get('[data-cy="parts-bills-order"]') + .should("be.visible") + .find("li") + .first() + .should("not.have.text", "This part has not yet been ordered."); + }); + } +);