diff --git a/.github/workflows/frontend-qa.yml b/.github/workflows/frontend-qa.yml index f607760564..2029de1497 100644 --- a/.github/workflows/frontend-qa.yml +++ b/.github/workflows/frontend-qa.yml @@ -51,7 +51,7 @@ jobs: submodules: recursive - name: Run OpenELS image - run: docker-compose -f build.docker-compose.yml up -d + run: docker compose -f build.docker-compose.yml up -d - name: Sleep for 2 minutes run: sleep 2m diff --git a/frontend/cypress.config.js b/frontend/cypress.config.js index ee50118896..0755f9764e 100755 --- a/frontend/cypress.config.js +++ b/frontend/cypress.config.js @@ -14,6 +14,7 @@ module.exports = defineConfig({ "cypress/e2e/workplan.cy.js", "cypress/e2e/nonConform.cy.js", "cypress/e2e/modifyOrder.cy.js", + "cypress/e2e/batchOrderEntry.cy.js", ]; return config; }, diff --git a/frontend/cypress/e2e/batchOrderEntry.cy.js b/frontend/cypress/e2e/batchOrderEntry.cy.js new file mode 100644 index 0000000000..5ade8134b6 --- /dev/null +++ b/frontend/cypress/e2e/batchOrderEntry.cy.js @@ -0,0 +1,112 @@ +import LoginPage from "../pages/LoginPage"; + +let homePage = null; +let loginPage = null; +let batchOrder = null; + +const navigateToBatchOrderEntryPage = () => { + homePage = loginPage.goToHomePage(); + batchOrder = homePage.goToBatchOrderEntry(); +}; + +before(() => { + cy.fixture("BatchOrder").as("batchOrderData"); +}); + +before("login", () => { + loginPage = new LoginPage(); + loginPage.visit(); +}); + +describe("Batch Order Entry On Demand", function () { + before("navigate to Batch Order Entry Page", function () { + navigateToBatchOrderEntryPage(); + }); + + it("User visits Batch Order Entry Setup Page", function () { + batchOrder.visitSetupPage(); + batchOrder.checkNextButtonDisabled(); + }); + + it("Should Select Form And Samples", function () { + cy.fixture("BatchOrder").then((batchOrderData) => { + batchOrder.selectForm(batchOrderData.formTypeRoutine); + batchOrder.selectSampleType(batchOrderData.sampleType); + batchOrder.selectPanel(3); + }); + }); + + it("Should Select Methods, Site Name and Move to Next Page", function () { + cy.fixture("BatchOrder").then((batchOrderData) => { + batchOrder.selectMethod(batchOrderData.methodOnDemand); + batchOrder.checkFacilityCheckbox(); + batchOrder.enterSiteName(batchOrderData.siteName); + batchOrder.checkNextButtonEnabled(); + }); + }); + + it("Should Visit Batch Order Entry Page", function () { + batchOrder.visitBatchOrderEntryPage(); + }); + + it("Should Validate Fields And Generate BarCode", function () { + cy.fixture("BatchOrder").then((batchOrderData) => { + batchOrder.validateField("#tag-54", batchOrderData.sampleType); + batchOrder.validateField("#tag-56", batchOrderData.panel); + batchOrder.validateField("#tag-58", batchOrderData.facility); + batchOrder.checkNextLabel().should("be.disabled"); + batchOrder.clickGenerateAndSaveBarcode(); + batchOrder.checkNextLabel().should("be.visible"); + }); + }); +}); + +describe("Batch Order Entry Pre Printed", function () { + before("navigate to Batch Order Entry Page", function () { + navigateToBatchOrderEntryPage(); + }); + + it("User visits Batch Order Entry Setup Page", function () { + batchOrder.visitSetupPage(); + batchOrder.checkNextButtonDisabled(); + }); + + it("Should Select Form And Samples", function () { + cy.fixture("BatchOrder").then((batchOrderData) => { + batchOrder.selectForm(batchOrderData.formTypeRoutine); + batchOrder.selectSampleType(batchOrderData.sampleType); + batchOrder.selectPanel(3); + }); + }); + + it("Should Select Methods, Site Name and Move to Next Page", function () { + cy.fixture("BatchOrder").then((batchOrderData) => { + batchOrder.selectMethod(batchOrderData.methodPrePrinted); + batchOrder.checkFacilityCheckbox(); + batchOrder.checkPatientCheckbox(); + batchOrder.enterSiteName(batchOrderData.siteName); + batchOrder.checkNextButtonEnabled(); + }); + }); + + it("Should Visit Batch Order Entry Page", function () { + batchOrder.visitBatchOrderEntryPage(); + }); + + it("Should Validate Fields", function () { + cy.fixture("BatchOrder").then((batchOrderData) => { + batchOrder.validateField("#tag-58", batchOrderData.sampleType); + batchOrder.validateField("#tag-60", batchOrderData.panel); + batchOrder.validateField("#tag-62", batchOrderData.facility); + }); + }); + + it("Should Search For Patient And Generate Barcode", function () { + batchOrder.selectPatientGender(2); + batchOrder.clickSearchPatient(); + batchOrder.selectPatient(1); + + batchOrder.clickGenerateButton(); + batchOrder.saveOrder(); + }); +}); diff --git a/frontend/cypress/fixtures/BatchOrder.json b/frontend/cypress/fixtures/BatchOrder.json new file mode 100644 index 0000000000..44c205d392 --- /dev/null +++ b/frontend/cypress/fixtures/BatchOrder.json @@ -0,0 +1,9 @@ +{ + "formTypeRoutine": "Routine", + "sampleType": "Serum", + "methodOnDemand": "On Demand", + "methodPrePrinted": "Pre-Printed", + "siteName": "CAMES", + "panel": "Western blot HIV", + "facility": "279 - CAMES MAN" +} diff --git a/frontend/cypress/pages/BatchOrderEntryPage.js b/frontend/cypress/pages/BatchOrderEntryPage.js new file mode 100644 index 0000000000..56ef31f75a --- /dev/null +++ b/frontend/cypress/pages/BatchOrderEntryPage.js @@ -0,0 +1,86 @@ +class BatchOrderEntry { + visitSetupPage() { + cy.get("h2").should("contain.text", "Batch Order Entry Setup"); + } + + checkNextButtonDisabled() { + cy.get(":nth-child(12) > .cds--btn").should("be.disabled"); + } + + selectForm(formType) { + cy.get("#form-dropdown").select(formType); + } + + selectSampleType(sampleType) { + cy.get("#selectSampleType").should("be.visible").select(sampleType); + } + + selectPanel(panelIndex) { + cy.get( + `:nth-child(${panelIndex}) > :nth-child(5) > .cds--checkbox-label`, + ).click(); + } + + checkNextLabel() { + return cy.get(":nth-child(8) > .cds--btn"); + } + + clickGenerateButton() { + cy.get(":nth-child(2) > .cds--link").click(); + } + + selectMethod(method) { + cy.get("#method-dropdown").select(method); + } + + checkFacilityCheckbox() { + cy.get(":nth-child(5) > .cds--form-item > .cds--checkbox-label").click(); + } + + checkPatientCheckbox() { + cy.get(":nth-child(6) > .cds--form-item > .cds--checkbox-label").click(); + } + + enterSiteName(siteName) { + cy.get("#siteName").type(siteName); + cy.get(".suggestion-active").should("be.visible").click(); + } + + checkNextButtonEnabled() { + cy.get(":nth-child(12) > .cds--btn").should("not.be.disabled").click(); + } + + visitBatchOrderEntryPage() { + cy.get("h2").should("contain.text", "Batch Order Entry"); + } + + validateField(tagId, expectedText) { + cy.get(tagId).should("contain.text", expectedText); + } + + clickGenerateAndSaveBarcode() { + cy.get(".cds--link > p").click(); + } + + saveOrder() { + cy.get(":nth-child(6) > .cds--btn").click(); + } + + checkNextButtonVisible() { + cy.get(":nth-child(8) > .cds--btn").should("be.visible"); + } + + selectPatientGender(genderIndex) { + cy.get(`:nth-child(${genderIndex}) > .cds--radio-button__label`).click(); // 2 for male, 3 for female + } + + clickSearchPatient() { + cy.get("#local_search").click(); + } + + selectPatient(rowIndex) { + cy.get(`tbody > :nth-child(${rowIndex}) > :nth-child(1)`).click(); + } +} + +export default BatchOrderEntry; diff --git a/frontend/cypress/pages/HomePage.js b/frontend/cypress/pages/HomePage.js index c6cbcd5470..4175ff4691 100755 --- a/frontend/cypress/pages/HomePage.js +++ b/frontend/cypress/pages/HomePage.js @@ -4,6 +4,7 @@ import OrderEntityPage from "./OrderEntityPage"; import ModifyOrderPage from "./ModifyOrderPage"; import WorkPlan from "./WorkPlan"; import NonConform from "./NonConformPage"; +import BatchOrderEntry from "./BatchOrderEntryPage"; class HomePage { constructor() {} @@ -29,6 +30,13 @@ class HomePage { }).click(); } + goToBatchOrderEntry() { + this.openNavigationMenu(); + cy.get("#menu_sample").click(); + cy.get("#menu_sample_batch_entry").click(); + return new BatchOrderEntry(); + } + goToPatientEntry() { this.openNavigationMenu(); cy.get("#menu_patient").click(); diff --git a/frontend/src/components/batchOrderEntry/SampleBatchEntry.js b/frontend/src/components/batchOrderEntry/SampleBatchEntry.js index a50f43e37b..7bd5fe6468 100644 --- a/frontend/src/components/batchOrderEntry/SampleBatchEntry.js +++ b/frontend/src/components/batchOrderEntry/SampleBatchEntry.js @@ -490,7 +490,9 @@ const SampleBatchEntry = (props) => { )}