From aacc180811c9c2502d13c3be60d6da896158c325 Mon Sep 17 00:00:00 2001 From: Binal Patel Date: Thu, 2 Apr 2026 16:20:02 -0700 Subject: [PATCH 01/19] Add auto test --- .../test/tests/onprc_ehr/ONPRC_EHRTest.java | 299 ++++++++++++++++++ 1 file changed, 299 insertions(+) diff --git a/onprc_ehr/test/src/org/labkey/test/tests/onprc_ehr/ONPRC_EHRTest.java b/onprc_ehr/test/src/org/labkey/test/tests/onprc_ehr/ONPRC_EHRTest.java index bdf812dd0..0bb13663e 100644 --- a/onprc_ehr/test/src/org/labkey/test/tests/onprc_ehr/ONPRC_EHRTest.java +++ b/onprc_ehr/test/src/org/labkey/test/tests/onprc_ehr/ONPRC_EHRTest.java @@ -557,6 +557,57 @@ public void testArrivalApi() throws Exception Assert.assertEquals(1, demographicsSelect.execute(getApiHelper().getConnection(), getContainerPath()).getRowCount().intValue()); } + @Test + public void testSubmitButtonsDisabledDuringValidation() throws Exception + { + List arrivalIds = createSequentialAnimalIds("71", 30); + List birthIds = createSequentialAnimalIds("81", 30); + List allIds = new ArrayList<>(arrivalIds); + allIds.addAll(birthIds); + Date today = DateUtils.truncate(new Date(), Calendar.DATE); + + log("Create 30 animals through the Arrival form"); + _helper.goToTaskForm("Arrival", "Submit Final", false); + enableDataEntryFormIfNeeded(); + bulkAddIdsToForm(_helper.getExt4GridForFormSection("Arrivals"), arrivalIds); + populateArrivalBulkEdit(today); + submitBirthArrivalForm(); + + log("Create 30 animals through the Birth form"); + _helper.goToTaskForm("Birth", false); + enableDataEntryFormIfNeeded(); + bulkAddIdsToForm(_helper.getExt4GridForFormSection("Births"), birthIds); + populateBirthBulkEdit(today); + submitBirthArrivalForm(); + + waitFor(() -> { + try + { + return getQueryCount("study", "demographics", "Id", allIds) == allIds.size(); + } + catch (Exception e) + { + return false; + } + }, + "Expected 60 demographics records to be created", WAIT_FOR_PAGE * 2); + + log("Bulk add treatment orders for all 60 animals"); + _helper.goToTaskForm("Medication/Treatment Orders", false); + Ext4GridRef treatmentGrid = _helper.getExt4GridForFormSection("Medication/Treatment Orders"); + bulkAddIdsToForm(treatmentGrid, allIds); + populateTreatmentOrderBulkEdit(); + assertMoreActionsMenuItemsDisabledDuringValidation("Submit and Reload", "Force Submit"); + assertButtonsDisabledUntilValidationComplete("Save Draft", "Save & Close", "Submit For Review", "Submit Final"); + + Assert.assertEquals("Unexpected treatment order row count", allIds.size(), treatmentGrid.getRowCount()); + + submitSingleQueryForm(); + + Assert.assertEquals("Expected one treatment order for each test animal", allIds.size(), + getQueryCount("study", "treatment_order", "Id", allIds)); + } + @Test public void testCustomActions() throws Exception { @@ -1770,6 +1821,254 @@ private void setDrugAmountField(String fieldName, int rowIdx, Object value, Map< expectedVals.put(fieldName, value); } + private List createSequentialAnimalIds(String prefix, int count) + { + String seed = Long.toString(System.currentTimeMillis()); + seed = seed.substring(Math.max(0, seed.length() - 5)); + + List ids = new ArrayList<>(); + for (int i = 1; i <= count; i++) + { + ids.add(prefix + seed + String.format("%02d", i)); + } + + return ids; + } + + private void bulkAddIdsToForm(Ext4GridRef grid, List ids) + { + grid.clickTbarButton("Add Batch"); + waitForElement(Ext4Helper.Locators.window("Choose Animals")); + Ext4FieldRef.getForLabel(this, "Id(s)").setValue(StringUtils.join(ids, ";")); + Ext4FieldRef.getForLabel(this, "Bulk Edit Before Applying").setChecked(true); + waitAndClick(Ext4Helper.Locators.window("Choose Animals").append(Ext4Helper.Locators.ext4Button("Submit"))); + waitForElement(Ext4Helper.Locators.window("Bulk Edit")); + } + + private void populateArrivalBulkEdit(Date today) + { + _helper.toggleBulkEditField("Arrival Date"); + Ext4FieldRef.getForLabel(this, "Arrival Date").setValue(_df.format(today)); + + _helper.toggleBulkEditField("Source"); + Ext4ComboRef sourceField = Ext4ComboRef.getForLabel(this, "Source"); + sourceField.waitForStoreLoad(); + sourceField.setComboByDisplayValue("Boston"); + + _helper.toggleBulkEditField("Acquisition Type"); + Ext4ComboRef acquisitionTypeField = Ext4ComboRef.getForLabel(this, "Acquisition Type"); + acquisitionTypeField.waitForStoreLoad(); + acquisitionTypeField.setComboByDisplayValue("Acquired"); + + _helper.toggleBulkEditField("Gender"); + Ext4ComboRef.getForLabel(this, "Gender").setComboByDisplayValue("female"); + + _helper.toggleBulkEditField("Species"); + Ext4ComboRef.getForLabel(this, "Species").setComboByDisplayValue(RHESUS); + + _helper.toggleBulkEditField("Geographic Origin"); + Ext4ComboRef.getForLabel(this, "Geographic Origin").setValue(INDIAN); + + _helper.toggleBulkEditField("Birth"); + Ext4FieldRef.getForLabel(this, "Birth").setValue(_df.format(today)); + + _helper.toggleBulkEditField("Room"); + Ext4FieldRef.getForLabel(this, "Room").setValue(ROOMS[0]); + + submitBulkEditWindow(); + } + + private void populateBirthBulkEdit(Date today) + { + _helper.toggleBulkEditField("Birth Date"); + Ext4FieldRef.getForLabel(this, "Birth Date").setValue(_df.format(today)); + + _helper.toggleBulkEditField("Birth Condition"); + Ext4ComboRef.getForLabel(this, "Birth Condition").setComboByDisplayValue("Live Birth"); + + _helper.toggleBulkEditField("Room"); + Ext4FieldRef.getForLabel(this, "Room").setValue(ROOM_ID2); + + _helper.toggleBulkEditField("Gender"); + Ext4ComboRef.getForLabel(this, "Gender").setComboByDisplayValue("female"); + + _helper.toggleBulkEditField("Birth Type"); + Ext4ComboRef.getForLabel(this, "Birth Type").setComboByDisplayValue("Vaginal"); + + _helper.toggleBulkEditField("Species"); + Ext4ComboRef.getForLabel(this, "Species").setComboByDisplayValue(RHESUS); + + _helper.toggleBulkEditField("Geographic Origin"); + Ext4ComboRef.getForLabel(this, "Geographic Origin").setValue(INDIAN); + + submitBulkEditWindow(); + } + + private void populateTreatmentOrderBulkEdit() + { + LocalDateTime beginDate = LocalDateTime.now().plusDays(1).withHour(8).withMinute(0).withSecond(0).withNano(0); + LocalDateTime endDate = beginDate.plusDays(2).withHour(23).withMinute(59); + + _helper.toggleBulkEditField("Begin Date"); + Ext4FieldRef.getForLabel(this, "Begin Date").setValue(_tf.format(Date.from(beginDate.atZone(ZoneId.systemDefault()).toInstant()))); + + _helper.toggleBulkEditField("End Date"); + Ext4FieldRef.getForLabel(this, "End Date").setValue(_tf.format(Date.from(endDate.atZone(ZoneId.systemDefault()).toInstant()))); + + _helper.toggleBulkEditField("Charge To"); + setBulkEditProject(PROJECT_ID); + + _helper.toggleBulkEditField("Treatment"); + Ext4ComboRef treatmentField = Ext4ComboRef.getForLabel(this, "Treatment"); + treatmentField.waitForStoreLoad(); + treatmentField.setComboByDisplayValue("ACETAMINOPHEN (80mg) (E-77510)"); + + _helper.toggleBulkEditField("Frequency"); + Ext4ComboRef.getForLabel(this, "Frequency").setComboByDisplayValue("BID - AM/Night"); + + _helper.toggleBulkEditField("Route"); + Ext4ComboRef.getForLabel(this, "Route").setComboByDisplayValue("PO"); + + _helper.toggleBulkEditField("Amount"); + Ext4FieldRef.getForLabel(this, "Amount").setValue(10); + + _helper.toggleBulkEditField("Amount Units"); + Ext4ComboRef.getForLabel(this, "Amount Units").setComboByDisplayValue("mg"); + + submitBulkEditWindow(); + } + + private void setBulkEditProject(String project) + { + Ext4FieldRef projectField = Ext4FieldRef.getForLabel(this, "Charge To"); + projectField.getEval("expand()"); + if (Locator.tag("li").append(Locator.tagContainingText("span", "Other")).findElements(getDriver()).isEmpty()) + { + projectField.getEval("expand()"); + } + waitAndClick(Locator.tag("li").append(Locator.tagContainingText("span", "Other"))); + waitForElement(Ext4Helper.Locators.window("Choose Project")); + _ext4Helper.queryOne("window[title=Choose Project] [fieldLabel='Project']", Ext4ComboRef.class).setComboByDisplayValue(project); + waitAndClick(Ext4Helper.Locators.window("Choose Project").append(Ext4Helper.Locators.ext4ButtonEnabled("Submit"))); + } + + private void submitBulkEditWindow() + { + waitAndClick(Ext4Helper.Locators.window("Bulk Edit").append(Ext4Helper.Locators.ext4Button("Submit"))); + + waitFor(() -> Ext4Helper.Locators.window("Set Values").notHidden().findElements(getDriver()).size() > 0 || + Ext4Helper.Locators.window("Bulk Edit").notHidden().findElements(getDriver()).isEmpty(), + "Bulk edit submit did not complete", WAIT_FOR_PAGE); + + if (Ext4Helper.Locators.window("Set Values").notHidden().findElements(getDriver()).size() > 0) + { + waitAndClick(Ext4Helper.Locators.window("Set Values").append(Ext4Helper.Locators.ext4Button("Yes"))); + } + + waitForElementToDisappear(Ext4Helper.Locators.window("Bulk Edit")); + } + + private void assertButtonsDisabledUntilValidationComplete(String... buttonTexts) + { + Locator.XPathLocator validationIndicator = Locator.tagContainingText("span", "Validating...").notHidden(); + + waitFor(() -> validationIndicator.findElements(getDriver()).size() > 0, + "Validation indicator never appeared", WAIT_FOR_PAGE); + + for (String buttonText : buttonTexts) + { + List buttons = _ext4Helper.componentQuery("button[text='" + buttonText + "']", Ext4CmpRef.class); + if (buttons.isEmpty()) + { + continue; + } + + Ext4CmpRef button = buttons.get(0); + waitFor(() -> (Boolean)button.getFnEval("return this.isDisabled();"), + "Button should be disabled while validation is running: " + buttonText, WAIT_FOR_PAGE); + } + + waitForElementToDisappear(validationIndicator, WAIT_FOR_PAGE * 2); + + for (String buttonText : buttonTexts) + { + List buttons = _ext4Helper.componentQuery("button[text='" + buttonText + "']", Ext4CmpRef.class); + if (buttons.isEmpty()) + { + continue; + } + + buttons.get(0).waitForEnabled(); + } + } + + private void assertMoreActionsMenuItemsDisabledDuringValidation(String... menuItemTexts) + { + Locator.XPathLocator validationIndicator = Locator.tagContainingText("span", "Validating...").notHidden(); + waitFor(() -> validationIndicator.findElements(getDriver()).size() > 0, + "Validation indicator never appeared", WAIT_FOR_PAGE); + + waitAndClick(_helper.getDataEntryButton("More Actions")); + waitForElement(Ext4Helper.Locators.menu().notHidden()); + + for (String menuItemText : menuItemTexts) + { + if (Ext4Helper.Locators.menuItem(menuItemText).notHidden().findElements(getDriver()).isEmpty()) + { + continue; + } + + waitForElement(Ext4Helper.Locators.menuItemDisabled(menuItemText).notHidden()); + } + + waitAndClick(_helper.getDataEntryButton("More Actions")); + waitForElementToDisappear(Ext4Helper.Locators.menu().notHidden()); + } + + private void enableDataEntryFormIfNeeded() + { + if (Ext4Helper.Locators.ext4Button("Enable the form for data entry").findElements(getDriver()).size() > 0) + { + waitAndClick(Ext4Helper.Locators.ext4Button("Enable the form for data entry")); + waitForElement(Ext4Helper.Locators.ext4Button("Exit data entry")); + } + } + + private void submitBirthArrivalForm() + { + waitAndClick(_helper.getDataEntryButton("Submit Final")); + waitForElement(Ext4Helper.Locators.window("Finalize Birth/Arrival Form")); + waitAndClick(Ext4Helper.Locators.window("Finalize Birth/Arrival Form").append(Ext4Helper.Locators.ext4Button("Yes"))); + + waitFor(() -> Ext4Helper.Locators.window("Success").notHidden().findElements(getDriver()).size() > 0 || + Locator.tagWithText("a", "Enter New Data").findElements(getDriver()).size() > 0, + "Expected Birth/Arrival form submission to complete", WAIT_FOR_PAGE * 2); + + if (Ext4Helper.Locators.window("Success").notHidden().findElements(getDriver()).size() > 0) + { + waitAndClick(Ext4Helper.Locators.window("Success").append(Ext4Helper.Locators.ext4Button("No"))); + } + + waitForElement(Locator.tagWithText("a", "Enter New Data")); + } + + private void submitSingleQueryForm() + { + waitAndClick(_helper.getDataEntryButton("Submit Final")); + waitForElement(Ext4Helper.Locators.window("Finalize Form")); + waitAndClick(Ext4Helper.Locators.window("Finalize Form").append(Ext4Helper.Locators.ext4Button("Yes"))); + waitForElement(Locator.tagWithText("a", "Enter New Data")); + } + + private int getQueryCount(String schemaName, String queryName, String columnName, List ids) throws Exception + { + SelectRowsCommand command = new SelectRowsCommand(schemaName, queryName); + command.setColumns(List.of(columnName)); + command.addFilter(new Filter(columnName, StringUtils.join(ids, ";"), Filter.Operator.IN)); + + return command.execute(getApiHelper().getConnection(), getContainerPath()).getRowCount().intValue(); + } + @Test public void testBehaviorRounds() throws Exception { From 08fe8bb8fe4a447af7ac2d10ed70a1297f58189a Mon Sep 17 00:00:00 2001 From: Binal Patel Date: Thu, 2 Apr 2026 20:33:56 -0700 Subject: [PATCH 02/19] Move toggleBulkEditFields --- .../test/tests/onprc_ehr/ONPRC_EHRTest.java | 55 +++++++++---------- 1 file changed, 25 insertions(+), 30 deletions(-) diff --git a/onprc_ehr/test/src/org/labkey/test/tests/onprc_ehr/ONPRC_EHRTest.java b/onprc_ehr/test/src/org/labkey/test/tests/onprc_ehr/ONPRC_EHRTest.java index 0bb13663e..620316ef2 100644 --- a/onprc_ehr/test/src/org/labkey/test/tests/onprc_ehr/ONPRC_EHRTest.java +++ b/onprc_ehr/test/src/org/labkey/test/tests/onprc_ehr/ONPRC_EHRTest.java @@ -1848,31 +1848,32 @@ private void bulkAddIdsToForm(Ext4GridRef grid, List ids) private void populateArrivalBulkEdit(Date today) { _helper.toggleBulkEditField("Arrival Date"); - Ext4FieldRef.getForLabel(this, "Arrival Date").setValue(_df.format(today)); - _helper.toggleBulkEditField("Source"); + _helper.toggleBulkEditField("Acquisition Type"); + _helper.toggleBulkEditField("Gender"); + _helper.toggleBulkEditField("Species"); + _helper.toggleBulkEditField("Geographic Origin"); + _helper.toggleBulkEditField("Birth"); + _helper.toggleBulkEditField("Room"); + + Ext4FieldRef.getForLabel(this, "Arrival Date").setValue(_df.format(prepareDate(new Date(), 2, 0))); + Ext4ComboRef sourceField = Ext4ComboRef.getForLabel(this, "Source"); sourceField.waitForStoreLoad(); sourceField.setComboByDisplayValue("Boston"); - _helper.toggleBulkEditField("Acquisition Type"); Ext4ComboRef acquisitionTypeField = Ext4ComboRef.getForLabel(this, "Acquisition Type"); acquisitionTypeField.waitForStoreLoad(); acquisitionTypeField.setComboByDisplayValue("Acquired"); - _helper.toggleBulkEditField("Gender"); Ext4ComboRef.getForLabel(this, "Gender").setComboByDisplayValue("female"); - _helper.toggleBulkEditField("Species"); Ext4ComboRef.getForLabel(this, "Species").setComboByDisplayValue(RHESUS); - _helper.toggleBulkEditField("Geographic Origin"); Ext4ComboRef.getForLabel(this, "Geographic Origin").setValue(INDIAN); - _helper.toggleBulkEditField("Birth"); - Ext4FieldRef.getForLabel(this, "Birth").setValue(_df.format(today)); + Ext4FieldRef.getForLabel(this, "Birth").setValue(_df.format(prepareDate(new Date(), 700, 0)));; - _helper.toggleBulkEditField("Room"); Ext4FieldRef.getForLabel(this, "Room").setValue(ROOMS[0]); submitBulkEditWindow(); @@ -1881,24 +1882,19 @@ private void populateArrivalBulkEdit(Date today) private void populateBirthBulkEdit(Date today) { _helper.toggleBulkEditField("Birth Date"); - Ext4FieldRef.getForLabel(this, "Birth Date").setValue(_df.format(today)); - _helper.toggleBulkEditField("Birth Condition"); - Ext4ComboRef.getForLabel(this, "Birth Condition").setComboByDisplayValue("Live Birth"); - _helper.toggleBulkEditField("Room"); - Ext4FieldRef.getForLabel(this, "Room").setValue(ROOM_ID2); - _helper.toggleBulkEditField("Gender"); - Ext4ComboRef.getForLabel(this, "Gender").setComboByDisplayValue("female"); - _helper.toggleBulkEditField("Birth Type"); - Ext4ComboRef.getForLabel(this, "Birth Type").setComboByDisplayValue("Vaginal"); - _helper.toggleBulkEditField("Species"); - Ext4ComboRef.getForLabel(this, "Species").setComboByDisplayValue(RHESUS); - _helper.toggleBulkEditField("Geographic Origin"); + + Ext4FieldRef.getForLabel(this, "Birth Date").setValue(_df.format(today)); + Ext4ComboRef.getForLabel(this, "Birth Condition").setComboByDisplayValue("Live Birth"); + Ext4FieldRef.getForLabel(this, "Room").setValue(ROOM_ID2); + Ext4ComboRef.getForLabel(this, "Gender").setComboByDisplayValue("female"); + Ext4ComboRef.getForLabel(this, "Birth Type").setComboByDisplayValue("Vaginal"); + Ext4ComboRef.getForLabel(this, "Species").setComboByDisplayValue(RHESUS); Ext4ComboRef.getForLabel(this, "Geographic Origin").setValue(INDIAN); submitBulkEditWindow(); @@ -1910,29 +1906,28 @@ private void populateTreatmentOrderBulkEdit() LocalDateTime endDate = beginDate.plusDays(2).withHour(23).withMinute(59); _helper.toggleBulkEditField("Begin Date"); - Ext4FieldRef.getForLabel(this, "Begin Date").setValue(_tf.format(Date.from(beginDate.atZone(ZoneId.systemDefault()).toInstant()))); - _helper.toggleBulkEditField("End Date"); - Ext4FieldRef.getForLabel(this, "End Date").setValue(_tf.format(Date.from(endDate.atZone(ZoneId.systemDefault()).toInstant()))); - _helper.toggleBulkEditField("Charge To"); + _helper.toggleBulkEditField("Treatment"); + _helper.toggleBulkEditField("Frequency"); + _helper.toggleBulkEditField("Route"); + _helper.toggleBulkEditField("Amount"); + _helper.toggleBulkEditField("Amount Units"); + + Ext4FieldRef.getForLabel(this, "Begin Date").setValue(_tf.format(Date.from(beginDate.atZone(ZoneId.systemDefault()).toInstant()))); + Ext4FieldRef.getForLabel(this, "End Date").setValue(_tf.format(Date.from(endDate.atZone(ZoneId.systemDefault()).toInstant()))); setBulkEditProject(PROJECT_ID); - _helper.toggleBulkEditField("Treatment"); Ext4ComboRef treatmentField = Ext4ComboRef.getForLabel(this, "Treatment"); treatmentField.waitForStoreLoad(); treatmentField.setComboByDisplayValue("ACETAMINOPHEN (80mg) (E-77510)"); - _helper.toggleBulkEditField("Frequency"); Ext4ComboRef.getForLabel(this, "Frequency").setComboByDisplayValue("BID - AM/Night"); - _helper.toggleBulkEditField("Route"); Ext4ComboRef.getForLabel(this, "Route").setComboByDisplayValue("PO"); - _helper.toggleBulkEditField("Amount"); Ext4FieldRef.getForLabel(this, "Amount").setValue(10); - _helper.toggleBulkEditField("Amount Units"); Ext4ComboRef.getForLabel(this, "Amount Units").setComboByDisplayValue("mg"); submitBulkEditWindow(); From db7946d82f82399037ff373302a9ee6c1e92e13c Mon Sep 17 00:00:00 2001 From: Binal Patel Date: Thu, 2 Apr 2026 23:12:27 -0700 Subject: [PATCH 03/19] Update labels --- .../labkey/test/tests/onprc_ehr/ONPRC_EHRTest.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/onprc_ehr/test/src/org/labkey/test/tests/onprc_ehr/ONPRC_EHRTest.java b/onprc_ehr/test/src/org/labkey/test/tests/onprc_ehr/ONPRC_EHRTest.java index 620316ef2..a2b9e850a 100644 --- a/onprc_ehr/test/src/org/labkey/test/tests/onprc_ehr/ONPRC_EHRTest.java +++ b/onprc_ehr/test/src/org/labkey/test/tests/onprc_ehr/ONPRC_EHRTest.java @@ -1847,16 +1847,16 @@ private void bulkAddIdsToForm(Ext4GridRef grid, List ids) private void populateArrivalBulkEdit(Date today) { - _helper.toggleBulkEditField("Arrival Date"); + _helper.toggleBulkEditField("Date"); _helper.toggleBulkEditField("Source"); _helper.toggleBulkEditField("Acquisition Type"); _helper.toggleBulkEditField("Gender"); _helper.toggleBulkEditField("Species"); _helper.toggleBulkEditField("Geographic Origin"); _helper.toggleBulkEditField("Birth"); - _helper.toggleBulkEditField("Room"); + _helper.toggleBulkEditField("Initial Room"); - Ext4FieldRef.getForLabel(this, "Arrival Date").setValue(_df.format(prepareDate(new Date(), 2, 0))); + Ext4FieldRef.getForLabel(this, "Date").setValue(_df.format(today)); Ext4ComboRef sourceField = Ext4ComboRef.getForLabel(this, "Source"); sourceField.waitForStoreLoad(); @@ -1874,14 +1874,14 @@ private void populateArrivalBulkEdit(Date today) Ext4FieldRef.getForLabel(this, "Birth").setValue(_df.format(prepareDate(new Date(), 700, 0)));; - Ext4FieldRef.getForLabel(this, "Room").setValue(ROOMS[0]); + Ext4FieldRef.getForLabel(this, "Initial Room").setValue(ROOMS[0]); submitBulkEditWindow(); } private void populateBirthBulkEdit(Date today) { - _helper.toggleBulkEditField("Birth Date"); + _helper.toggleBulkEditField("Date"); _helper.toggleBulkEditField("Birth Condition"); _helper.toggleBulkEditField("Room"); _helper.toggleBulkEditField("Gender"); @@ -1889,7 +1889,7 @@ private void populateBirthBulkEdit(Date today) _helper.toggleBulkEditField("Species"); _helper.toggleBulkEditField("Geographic Origin"); - Ext4FieldRef.getForLabel(this, "Birth Date").setValue(_df.format(today)); + Ext4FieldRef.getForLabel(this, "Date").setValue(_df.format(today)); Ext4ComboRef.getForLabel(this, "Birth Condition").setComboByDisplayValue("Live Birth"); Ext4FieldRef.getForLabel(this, "Room").setValue(ROOM_ID2); Ext4ComboRef.getForLabel(this, "Gender").setComboByDisplayValue("female"); From 45aa7402d115ccd5c24138d28e0f4f31f191e216 Mon Sep 17 00:00:00 2001 From: Binal Patel Date: Fri, 3 Apr 2026 10:11:34 -0700 Subject: [PATCH 04/19] test update --- .../src/org/labkey/test/tests/onprc_ehr/ONPRC_EHRTest.java | 4 ---- 1 file changed, 4 deletions(-) diff --git a/onprc_ehr/test/src/org/labkey/test/tests/onprc_ehr/ONPRC_EHRTest.java b/onprc_ehr/test/src/org/labkey/test/tests/onprc_ehr/ONPRC_EHRTest.java index a2b9e850a..b3cee0a1d 100644 --- a/onprc_ehr/test/src/org/labkey/test/tests/onprc_ehr/ONPRC_EHRTest.java +++ b/onprc_ehr/test/src/org/labkey/test/tests/onprc_ehr/ONPRC_EHRTest.java @@ -1847,7 +1847,6 @@ private void bulkAddIdsToForm(Ext4GridRef grid, List ids) private void populateArrivalBulkEdit(Date today) { - _helper.toggleBulkEditField("Date"); _helper.toggleBulkEditField("Source"); _helper.toggleBulkEditField("Acquisition Type"); _helper.toggleBulkEditField("Gender"); @@ -1856,7 +1855,6 @@ private void populateArrivalBulkEdit(Date today) _helper.toggleBulkEditField("Birth"); _helper.toggleBulkEditField("Initial Room"); - Ext4FieldRef.getForLabel(this, "Date").setValue(_df.format(today)); Ext4ComboRef sourceField = Ext4ComboRef.getForLabel(this, "Source"); sourceField.waitForStoreLoad(); @@ -1881,7 +1879,6 @@ private void populateArrivalBulkEdit(Date today) private void populateBirthBulkEdit(Date today) { - _helper.toggleBulkEditField("Date"); _helper.toggleBulkEditField("Birth Condition"); _helper.toggleBulkEditField("Room"); _helper.toggleBulkEditField("Gender"); @@ -1889,7 +1886,6 @@ private void populateBirthBulkEdit(Date today) _helper.toggleBulkEditField("Species"); _helper.toggleBulkEditField("Geographic Origin"); - Ext4FieldRef.getForLabel(this, "Date").setValue(_df.format(today)); Ext4ComboRef.getForLabel(this, "Birth Condition").setComboByDisplayValue("Live Birth"); Ext4FieldRef.getForLabel(this, "Room").setValue(ROOM_ID2); Ext4ComboRef.getForLabel(this, "Gender").setComboByDisplayValue("female"); From 7856a17f22144793fc99d52e6b7b1ff158fdd1c7 Mon Sep 17 00:00:00 2001 From: Binal Patel Date: Fri, 3 Apr 2026 13:39:35 -0700 Subject: [PATCH 05/19] test update - use birth only --- .../test/tests/onprc_ehr/ONPRC_EHRTest.java | 36 +++++++++---------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/onprc_ehr/test/src/org/labkey/test/tests/onprc_ehr/ONPRC_EHRTest.java b/onprc_ehr/test/src/org/labkey/test/tests/onprc_ehr/ONPRC_EHRTest.java index b3cee0a1d..cb5d09710 100644 --- a/onprc_ehr/test/src/org/labkey/test/tests/onprc_ehr/ONPRC_EHRTest.java +++ b/onprc_ehr/test/src/org/labkey/test/tests/onprc_ehr/ONPRC_EHRTest.java @@ -566,12 +566,12 @@ public void testSubmitButtonsDisabledDuringValidation() throws Exception allIds.addAll(birthIds); Date today = DateUtils.truncate(new Date(), Calendar.DATE); - log("Create 30 animals through the Arrival form"); - _helper.goToTaskForm("Arrival", "Submit Final", false); - enableDataEntryFormIfNeeded(); - bulkAddIdsToForm(_helper.getExt4GridForFormSection("Arrivals"), arrivalIds); - populateArrivalBulkEdit(today); - submitBirthArrivalForm(); +// log("Create 30 animals through the Arrival form"); +// _helper.goToTaskForm("Arrival", "Submit Final", false); +// enableDataEntryFormIfNeeded(); +// bulkAddIdsToForm(_helper.getExt4GridForFormSection("Arrivals"), arrivalIds); +// populateArrivalBulkEdit(today); +// submitBirthArrivalForm(); log("Create 30 animals through the Birth form"); _helper.goToTaskForm("Birth", false); @@ -592,7 +592,8 @@ public void testSubmitButtonsDisabledDuringValidation() throws Exception }, "Expected 60 demographics records to be created", WAIT_FOR_PAGE * 2); - log("Bulk add treatment orders for all 60 animals"); +// log("Bulk add treatment orders for all 60 animals"); + log("Bulk add treatment orders for all 30 animals"); _helper.goToTaskForm("Medication/Treatment Orders", false); Ext4GridRef treatmentGrid = _helper.getExt4GridForFormSection("Medication/Treatment Orders"); bulkAddIdsToForm(treatmentGrid, allIds); @@ -1853,8 +1854,12 @@ private void populateArrivalBulkEdit(Date today) _helper.toggleBulkEditField("Species"); _helper.toggleBulkEditField("Geographic Origin"); _helper.toggleBulkEditField("Birth"); - _helper.toggleBulkEditField("Initial Room"); + String birth = _df.format(prepareDate(new Date(), 700, 0)); + _helper.toggleBulkEditField("Birth"); + _ext4Helper.queryOne("window field[fieldLabel=Birth]", Ext4ComboRef.class).setValue(birth); + + _helper.toggleBulkEditField("Initial Room"); Ext4ComboRef sourceField = Ext4ComboRef.getForLabel(this, "Source"); sourceField.waitForStoreLoad(); @@ -1865,13 +1870,8 @@ private void populateArrivalBulkEdit(Date today) acquisitionTypeField.setComboByDisplayValue("Acquired"); Ext4ComboRef.getForLabel(this, "Gender").setComboByDisplayValue("female"); - Ext4ComboRef.getForLabel(this, "Species").setComboByDisplayValue(RHESUS); - Ext4ComboRef.getForLabel(this, "Geographic Origin").setValue(INDIAN); - - Ext4FieldRef.getForLabel(this, "Birth").setValue(_df.format(prepareDate(new Date(), 700, 0)));; - Ext4FieldRef.getForLabel(this, "Initial Room").setValue(ROOMS[0]); submitBulkEditWindow(); @@ -1996,7 +1996,7 @@ private void assertButtonsDisabledUntilValidationComplete(String... buttonTexts) private void assertMoreActionsMenuItemsDisabledDuringValidation(String... menuItemTexts) { Locator.XPathLocator validationIndicator = Locator.tagContainingText("span", "Validating...").notHidden(); - waitFor(() -> validationIndicator.findElements(getDriver()).size() > 0, + waitFor(() -> !validationIndicator.findElements(getDriver()).isEmpty(), "Validation indicator never appeared", WAIT_FOR_PAGE); waitAndClick(_helper.getDataEntryButton("More Actions")); @@ -2018,7 +2018,7 @@ private void assertMoreActionsMenuItemsDisabledDuringValidation(String... menuIt private void enableDataEntryFormIfNeeded() { - if (Ext4Helper.Locators.ext4Button("Enable the form for data entry").findElements(getDriver()).size() > 0) + if (!Ext4Helper.Locators.ext4Button("Enable the form for data entry").findElements(getDriver()).isEmpty()) { waitAndClick(Ext4Helper.Locators.ext4Button("Enable the form for data entry")); waitForElement(Ext4Helper.Locators.ext4Button("Exit data entry")); @@ -2031,11 +2031,11 @@ private void submitBirthArrivalForm() waitForElement(Ext4Helper.Locators.window("Finalize Birth/Arrival Form")); waitAndClick(Ext4Helper.Locators.window("Finalize Birth/Arrival Form").append(Ext4Helper.Locators.ext4Button("Yes"))); - waitFor(() -> Ext4Helper.Locators.window("Success").notHidden().findElements(getDriver()).size() > 0 || - Locator.tagWithText("a", "Enter New Data").findElements(getDriver()).size() > 0, + waitFor(() -> !Ext4Helper.Locators.window("Success").notHidden().findElements(getDriver()).isEmpty() || + !Locator.tagWithText("a", "Enter New Data").findElements(getDriver()).isEmpty(), "Expected Birth/Arrival form submission to complete", WAIT_FOR_PAGE * 2); - if (Ext4Helper.Locators.window("Success").notHidden().findElements(getDriver()).size() > 0) + if (!Ext4Helper.Locators.window("Success").notHidden().findElements(getDriver()).isEmpty()) { waitAndClick(Ext4Helper.Locators.window("Success").append(Ext4Helper.Locators.ext4Button("No"))); } From 1e3e29746fc1a665fddce0d5b979dbb928ee3da9 Mon Sep 17 00:00:00 2001 From: Binal Patel Date: Sat, 4 Apr 2026 21:28:28 -0700 Subject: [PATCH 06/19] test fix --- .../test/tests/onprc_ehr/ONPRC_EHRTest.java | 534 +++++++++--------- 1 file changed, 268 insertions(+), 266 deletions(-) diff --git a/onprc_ehr/test/src/org/labkey/test/tests/onprc_ehr/ONPRC_EHRTest.java b/onprc_ehr/test/src/org/labkey/test/tests/onprc_ehr/ONPRC_EHRTest.java index cb5d09710..a7b5558fb 100644 --- a/onprc_ehr/test/src/org/labkey/test/tests/onprc_ehr/ONPRC_EHRTest.java +++ b/onprc_ehr/test/src/org/labkey/test/tests/onprc_ehr/ONPRC_EHRTest.java @@ -560,53 +560,46 @@ public void testArrivalApi() throws Exception @Test public void testSubmitButtonsDisabledDuringValidation() throws Exception { - List arrivalIds = createSequentialAnimalIds("71", 30); - List birthIds = createSequentialAnimalIds("81", 30); + Date today = DateUtils.truncate(new Date(), Calendar.DATE); + Date arrivalBirthDate = prepareDate(today, -700, 0); + List arrivalIds = createSequentialNumericIds(72000, 30); + List birthIds = createSequentialNumericIds(73000, 30); List allIds = new ArrayList<>(arrivalIds); allIds.addAll(birthIds); - Date today = DateUtils.truncate(new Date(), Calendar.DATE); -// log("Create 30 animals through the Arrival form"); -// _helper.goToTaskForm("Arrival", "Submit Final", false); -// enableDataEntryFormIfNeeded(); -// bulkAddIdsToForm(_helper.getExt4GridForFormSection("Arrivals"), arrivalIds); -// populateArrivalBulkEdit(today); -// submitBirthArrivalForm(); + log("Deleting existing records"); + deleteAnimalRecords(allIds); - log("Create 30 animals through the Birth form"); - _helper.goToTaskForm("Birth", false); - enableDataEntryFormIfNeeded(); - bulkAddIdsToForm(_helper.getExt4GridForFormSection("Births"), birthIds); - populateBirthBulkEdit(today); - submitBirthArrivalForm(); + log("Creating 30 animals through the Arrival form"); + createArrivalAnimalsViaForm(arrivalIds, arrivalBirthDate); + + log("Creating 30 animals through the Birth form"); + createBirthAnimalsViaForm(birthIds, today); waitFor(() -> { try { - return getQueryCount("study", "demographics", "Id", allIds) == allIds.size(); + return getCountForIds("study", "demographics", "Id", allIds) == allIds.size(); } catch (Exception e) { return false; } }, - "Expected 60 demographics records to be created", WAIT_FOR_PAGE * 2); + "Expected demographics rows were not created for all 60 animals", WAIT_FOR_PAGE * 4); -// log("Bulk add treatment orders for all 60 animals"); - log("Bulk add treatment orders for all 30 animals"); + log("Bulk adding treatment orders for all 60 animals"); _helper.goToTaskForm("Medication/Treatment Orders", false); Ext4GridRef treatmentGrid = _helper.getExt4GridForFormSection("Medication/Treatment Orders"); - bulkAddIdsToForm(treatmentGrid, allIds); - populateTreatmentOrderBulkEdit(); - assertMoreActionsMenuItemsDisabledDuringValidation("Submit and Reload", "Force Submit"); - assertButtonsDisabledUntilValidationComplete("Save Draft", "Save & Close", "Submit For Review", "Submit Final"); + addBatchIdsToGrid(treatmentGrid, allIds, true); + populateTreatmentOrdersBulkEdit(); - Assert.assertEquals("Unexpected treatment order row count", allIds.size(), treatmentGrid.getRowCount()); + assertActionsDisabledDuringValidation( + Arrays.asList("Save Draft", "Save & Close", "Submit For Review", "Submit Final"), + Arrays.asList("Submit and Reload", "Force Submit")); - submitSingleQueryForm(); - - Assert.assertEquals("Expected one treatment order for each test animal", allIds.size(), - getQueryCount("study", "treatment_order", "Id", allIds)); + treatmentGrid.waitForRowCount(allIds.size()); + _helper.discardForm(); } @Test @@ -1822,244 +1815,6 @@ private void setDrugAmountField(String fieldName, int rowIdx, Object value, Map< expectedVals.put(fieldName, value); } - private List createSequentialAnimalIds(String prefix, int count) - { - String seed = Long.toString(System.currentTimeMillis()); - seed = seed.substring(Math.max(0, seed.length() - 5)); - - List ids = new ArrayList<>(); - for (int i = 1; i <= count; i++) - { - ids.add(prefix + seed + String.format("%02d", i)); - } - - return ids; - } - - private void bulkAddIdsToForm(Ext4GridRef grid, List ids) - { - grid.clickTbarButton("Add Batch"); - waitForElement(Ext4Helper.Locators.window("Choose Animals")); - Ext4FieldRef.getForLabel(this, "Id(s)").setValue(StringUtils.join(ids, ";")); - Ext4FieldRef.getForLabel(this, "Bulk Edit Before Applying").setChecked(true); - waitAndClick(Ext4Helper.Locators.window("Choose Animals").append(Ext4Helper.Locators.ext4Button("Submit"))); - waitForElement(Ext4Helper.Locators.window("Bulk Edit")); - } - - private void populateArrivalBulkEdit(Date today) - { - _helper.toggleBulkEditField("Source"); - _helper.toggleBulkEditField("Acquisition Type"); - _helper.toggleBulkEditField("Gender"); - _helper.toggleBulkEditField("Species"); - _helper.toggleBulkEditField("Geographic Origin"); - _helper.toggleBulkEditField("Birth"); - - String birth = _df.format(prepareDate(new Date(), 700, 0)); - _helper.toggleBulkEditField("Birth"); - _ext4Helper.queryOne("window field[fieldLabel=Birth]", Ext4ComboRef.class).setValue(birth); - - _helper.toggleBulkEditField("Initial Room"); - - Ext4ComboRef sourceField = Ext4ComboRef.getForLabel(this, "Source"); - sourceField.waitForStoreLoad(); - sourceField.setComboByDisplayValue("Boston"); - - Ext4ComboRef acquisitionTypeField = Ext4ComboRef.getForLabel(this, "Acquisition Type"); - acquisitionTypeField.waitForStoreLoad(); - acquisitionTypeField.setComboByDisplayValue("Acquired"); - - Ext4ComboRef.getForLabel(this, "Gender").setComboByDisplayValue("female"); - Ext4ComboRef.getForLabel(this, "Species").setComboByDisplayValue(RHESUS); - Ext4ComboRef.getForLabel(this, "Geographic Origin").setValue(INDIAN); - Ext4FieldRef.getForLabel(this, "Initial Room").setValue(ROOMS[0]); - - submitBulkEditWindow(); - } - - private void populateBirthBulkEdit(Date today) - { - _helper.toggleBulkEditField("Birth Condition"); - _helper.toggleBulkEditField("Room"); - _helper.toggleBulkEditField("Gender"); - _helper.toggleBulkEditField("Birth Type"); - _helper.toggleBulkEditField("Species"); - _helper.toggleBulkEditField("Geographic Origin"); - - Ext4ComboRef.getForLabel(this, "Birth Condition").setComboByDisplayValue("Live Birth"); - Ext4FieldRef.getForLabel(this, "Room").setValue(ROOM_ID2); - Ext4ComboRef.getForLabel(this, "Gender").setComboByDisplayValue("female"); - Ext4ComboRef.getForLabel(this, "Birth Type").setComboByDisplayValue("Vaginal"); - Ext4ComboRef.getForLabel(this, "Species").setComboByDisplayValue(RHESUS); - Ext4ComboRef.getForLabel(this, "Geographic Origin").setValue(INDIAN); - - submitBulkEditWindow(); - } - - private void populateTreatmentOrderBulkEdit() - { - LocalDateTime beginDate = LocalDateTime.now().plusDays(1).withHour(8).withMinute(0).withSecond(0).withNano(0); - LocalDateTime endDate = beginDate.plusDays(2).withHour(23).withMinute(59); - - _helper.toggleBulkEditField("Begin Date"); - _helper.toggleBulkEditField("End Date"); - _helper.toggleBulkEditField("Charge To"); - _helper.toggleBulkEditField("Treatment"); - _helper.toggleBulkEditField("Frequency"); - _helper.toggleBulkEditField("Route"); - _helper.toggleBulkEditField("Amount"); - _helper.toggleBulkEditField("Amount Units"); - - Ext4FieldRef.getForLabel(this, "Begin Date").setValue(_tf.format(Date.from(beginDate.atZone(ZoneId.systemDefault()).toInstant()))); - Ext4FieldRef.getForLabel(this, "End Date").setValue(_tf.format(Date.from(endDate.atZone(ZoneId.systemDefault()).toInstant()))); - setBulkEditProject(PROJECT_ID); - - Ext4ComboRef treatmentField = Ext4ComboRef.getForLabel(this, "Treatment"); - treatmentField.waitForStoreLoad(); - treatmentField.setComboByDisplayValue("ACETAMINOPHEN (80mg) (E-77510)"); - - Ext4ComboRef.getForLabel(this, "Frequency").setComboByDisplayValue("BID - AM/Night"); - - Ext4ComboRef.getForLabel(this, "Route").setComboByDisplayValue("PO"); - - Ext4FieldRef.getForLabel(this, "Amount").setValue(10); - - Ext4ComboRef.getForLabel(this, "Amount Units").setComboByDisplayValue("mg"); - - submitBulkEditWindow(); - } - - private void setBulkEditProject(String project) - { - Ext4FieldRef projectField = Ext4FieldRef.getForLabel(this, "Charge To"); - projectField.getEval("expand()"); - if (Locator.tag("li").append(Locator.tagContainingText("span", "Other")).findElements(getDriver()).isEmpty()) - { - projectField.getEval("expand()"); - } - waitAndClick(Locator.tag("li").append(Locator.tagContainingText("span", "Other"))); - waitForElement(Ext4Helper.Locators.window("Choose Project")); - _ext4Helper.queryOne("window[title=Choose Project] [fieldLabel='Project']", Ext4ComboRef.class).setComboByDisplayValue(project); - waitAndClick(Ext4Helper.Locators.window("Choose Project").append(Ext4Helper.Locators.ext4ButtonEnabled("Submit"))); - } - - private void submitBulkEditWindow() - { - waitAndClick(Ext4Helper.Locators.window("Bulk Edit").append(Ext4Helper.Locators.ext4Button("Submit"))); - - waitFor(() -> Ext4Helper.Locators.window("Set Values").notHidden().findElements(getDriver()).size() > 0 || - Ext4Helper.Locators.window("Bulk Edit").notHidden().findElements(getDriver()).isEmpty(), - "Bulk edit submit did not complete", WAIT_FOR_PAGE); - - if (Ext4Helper.Locators.window("Set Values").notHidden().findElements(getDriver()).size() > 0) - { - waitAndClick(Ext4Helper.Locators.window("Set Values").append(Ext4Helper.Locators.ext4Button("Yes"))); - } - - waitForElementToDisappear(Ext4Helper.Locators.window("Bulk Edit")); - } - - private void assertButtonsDisabledUntilValidationComplete(String... buttonTexts) - { - Locator.XPathLocator validationIndicator = Locator.tagContainingText("span", "Validating...").notHidden(); - - waitFor(() -> validationIndicator.findElements(getDriver()).size() > 0, - "Validation indicator never appeared", WAIT_FOR_PAGE); - - for (String buttonText : buttonTexts) - { - List buttons = _ext4Helper.componentQuery("button[text='" + buttonText + "']", Ext4CmpRef.class); - if (buttons.isEmpty()) - { - continue; - } - - Ext4CmpRef button = buttons.get(0); - waitFor(() -> (Boolean)button.getFnEval("return this.isDisabled();"), - "Button should be disabled while validation is running: " + buttonText, WAIT_FOR_PAGE); - } - - waitForElementToDisappear(validationIndicator, WAIT_FOR_PAGE * 2); - - for (String buttonText : buttonTexts) - { - List buttons = _ext4Helper.componentQuery("button[text='" + buttonText + "']", Ext4CmpRef.class); - if (buttons.isEmpty()) - { - continue; - } - - buttons.get(0).waitForEnabled(); - } - } - - private void assertMoreActionsMenuItemsDisabledDuringValidation(String... menuItemTexts) - { - Locator.XPathLocator validationIndicator = Locator.tagContainingText("span", "Validating...").notHidden(); - waitFor(() -> !validationIndicator.findElements(getDriver()).isEmpty(), - "Validation indicator never appeared", WAIT_FOR_PAGE); - - waitAndClick(_helper.getDataEntryButton("More Actions")); - waitForElement(Ext4Helper.Locators.menu().notHidden()); - - for (String menuItemText : menuItemTexts) - { - if (Ext4Helper.Locators.menuItem(menuItemText).notHidden().findElements(getDriver()).isEmpty()) - { - continue; - } - - waitForElement(Ext4Helper.Locators.menuItemDisabled(menuItemText).notHidden()); - } - - waitAndClick(_helper.getDataEntryButton("More Actions")); - waitForElementToDisappear(Ext4Helper.Locators.menu().notHidden()); - } - - private void enableDataEntryFormIfNeeded() - { - if (!Ext4Helper.Locators.ext4Button("Enable the form for data entry").findElements(getDriver()).isEmpty()) - { - waitAndClick(Ext4Helper.Locators.ext4Button("Enable the form for data entry")); - waitForElement(Ext4Helper.Locators.ext4Button("Exit data entry")); - } - } - - private void submitBirthArrivalForm() - { - waitAndClick(_helper.getDataEntryButton("Submit Final")); - waitForElement(Ext4Helper.Locators.window("Finalize Birth/Arrival Form")); - waitAndClick(Ext4Helper.Locators.window("Finalize Birth/Arrival Form").append(Ext4Helper.Locators.ext4Button("Yes"))); - - waitFor(() -> !Ext4Helper.Locators.window("Success").notHidden().findElements(getDriver()).isEmpty() || - !Locator.tagWithText("a", "Enter New Data").findElements(getDriver()).isEmpty(), - "Expected Birth/Arrival form submission to complete", WAIT_FOR_PAGE * 2); - - if (!Ext4Helper.Locators.window("Success").notHidden().findElements(getDriver()).isEmpty()) - { - waitAndClick(Ext4Helper.Locators.window("Success").append(Ext4Helper.Locators.ext4Button("No"))); - } - - waitForElement(Locator.tagWithText("a", "Enter New Data")); - } - - private void submitSingleQueryForm() - { - waitAndClick(_helper.getDataEntryButton("Submit Final")); - waitForElement(Ext4Helper.Locators.window("Finalize Form")); - waitAndClick(Ext4Helper.Locators.window("Finalize Form").append(Ext4Helper.Locators.ext4Button("Yes"))); - waitForElement(Locator.tagWithText("a", "Enter New Data")); - } - - private int getQueryCount(String schemaName, String queryName, String columnName, List ids) throws Exception - { - SelectRowsCommand command = new SelectRowsCommand(schemaName, queryName); - command.setColumns(List.of(columnName)); - command.addFilter(new Filter(columnName, StringUtils.join(ids, ";"), Filter.Operator.IN)); - - return command.execute(getApiHelper().getConnection(), getContainerPath()).getRowCount().intValue(); - } - @Test public void testBehaviorRounds() throws Exception { @@ -2261,6 +2016,253 @@ private void setNecropsyFormElement(String id, String value) assertEquals(value, getFormElement(loc)); } + private List createSequentialNumericIds(int startingId, int count) + { + List ids = new ArrayList<>(); + for (int i = 0; i < count; i++) + { + ids.add(Integer.toString(startingId + i)); + } + + return ids; + } + + private void deleteAnimalRecords(List ids) throws Exception + { + String joinedIds = StringUtils.join(ids, ";"); + + for (String queryName : Arrays.asList("drug", "treatment_order", "housing", "flags", "birth", "arrival", "demographics")) + { + getApiHelper().deleteAllRecords("study", queryName, new Filter("Id", joinedIds, Filter.Operator.IN)); + } + } + + private void createArrivalAnimalsViaForm(List ids, Date birthDate) + { + _helper.goToTaskForm("Arrival", "Submit Final", false); + enableDataEntryFormIfNeeded(); + + waitForElement(Ext4Helper.Locators.ext4Button("Submit Final"), WAIT_FOR_PAGE * 2); + _ext4Helper.queryOne("button[text='Submit Final']", Ext4CmpRef.class).waitForEnabled(); + + Ext4GridRef grid = _helper.getExt4GridForFormSection("Arrivals"); + grid.clickTbarButton("Add Series of IDs"); + waitForElement(Ext4Helper.Locators.window("Enter Series of IDs")); + Ext4FieldRef.getForLabel(this, "Starting Number").setValue(ids.get(0)); + Ext4FieldRef.getForLabel(this, "Total IDs").setValue(Integer.toString(ids.size())); + waitAndClick(Ext4Helper.Locators.windowButton("Enter Series of IDs", "Submit")); + grid.waitForRowCount(ids.size()); + grid.clickTbarButton("Select All"); + grid.waitForSelected(ids.size()); + + grid.clickTbarButton("More Actions"); + click(Ext4Helper.Locators.menuItem("Bulk Edit")); + waitForElement(Ext4Helper.Locators.window("Bulk Edit")); + + _helper.toggleBulkEditField("Source"); + Ext4ComboRef sourceField = _ext4Helper.queryOne("window field[fieldLabel=Source]", Ext4ComboRef.class); + sourceField.waitForStoreLoad(); + sourceField.setComboByDisplayValue("Boston"); + + _helper.toggleBulkEditField("Acquisition Type"); + Ext4ComboRef acquisitionTypeField = _ext4Helper.queryOne("window field[fieldLabel='Acquisition Type']", Ext4ComboRef.class); + acquisitionTypeField.waitForStoreLoad(); + acquisitionTypeField.setComboByDisplayValue("Acquired"); + + _helper.toggleBulkEditField("Gender"); + _ext4Helper.queryOne("window field[fieldLabel=Gender]", Ext4ComboRef.class).setComboByDisplayValue("female"); + + _helper.toggleBulkEditField("Species"); + _ext4Helper.queryOne("window field[fieldLabel=Species]", Ext4ComboRef.class).setComboByDisplayValue(RHESUS); + + _helper.toggleBulkEditField("Geographic Origin"); + _ext4Helper.queryOne("window field[fieldLabel='Geographic Origin']", Ext4ComboRef.class).setValue(INDIAN); + + _helper.toggleBulkEditField("Birth"); + _ext4Helper.queryOne("window field[fieldLabel=Birth]", Ext4ComboRef.class).setValue(_df.format(birthDate)); + + _helper.toggleBulkEditField("Room"); + _ext4Helper.queryOne("window field[fieldLabel=Room]", Ext4ComboRef.class).setValue(ROOMS[0]); + + submitBulkEditWindow(); + + _ext4Helper.queryOne("button[text='Submit Final']", Ext4CmpRef.class).waitForEnabled(); + submitBirthArrivalForm(); + } + + private void createBirthAnimalsViaForm(List ids, Date birthDate) + { + _helper.goToTaskForm("Birth", false); + enableDataEntryFormIfNeeded(); + + Ext4GridRef grid = _helper.getExt4GridForFormSection("Births"); + addBatchIdsToGrid(grid, ids, false); + + String birthDateTime = _tf.format(birthDate); + for (int row = 1; row <= ids.size(); row++) + { + grid.setGridCellJS(row, "date", birthDateTime); + grid.setGridCell(row, "birth_condition", "Live Birth"); + grid.setGridCell(row, "room", ROOM_ID2); + grid.setGridCell(row, "gender", "female"); + grid.setGridCell(row, "type", "Vaginal"); + grid.setGridCell(row, "species", RHESUS); + grid.setGridCell(row, "geographic_origin", INDIAN); + } + + _ext4Helper.queryOne("button[text='Submit Final']", Ext4CmpRef.class).waitForEnabled(); + submitBirthArrivalForm(); + } + + private void addBatchIdsToGrid(Ext4GridRef grid, List ids, boolean bulkEditBeforeApplying) + { + grid.clickTbarButton("Add Batch"); + waitForElement(Ext4Helper.Locators.window("Choose Animals")); + Ext4FieldRef.getForLabel(this, "Id(s)").setValue(StringUtils.join(ids, ";")); + + if (bulkEditBeforeApplying) + { + Ext4FieldRef.getForLabel(this, "Bulk Edit Before Applying").setChecked(true); + } + + waitAndClick(Ext4Helper.Locators.window("Choose Animals").append(Ext4Helper.Locators.ext4Button("Submit"))); + + if (bulkEditBeforeApplying) + { + waitForElement(Ext4Helper.Locators.window("Bulk Edit")); + } + else + { + grid.waitForRowCount(ids.size()); + } + } + + private void populateTreatmentOrdersBulkEdit() + { + LocalDateTime beginDate = LocalDateTime.now().plusDays(1).withHour(8).withMinute(0).withSecond(0).withNano(0); + LocalDateTime endDate = beginDate.plusDays(2).withHour(20).withMinute(0); + + _helper.toggleBulkEditField("Begin Date"); + _helper.toggleBulkEditField("End Date"); + _helper.toggleBulkEditField("Charge To"); + _helper.toggleBulkEditField("Treatment"); + _helper.toggleBulkEditField("Frequency"); + _helper.toggleBulkEditField("Route"); + _helper.toggleBulkEditField("Amount"); + _helper.toggleBulkEditField("Amount Units"); + + _ext4Helper.queryOne("window field[fieldLabel='Begin Date']", Ext4FieldRef.class) + .setValue(_tf.format(Date.from(beginDate.atZone(ZoneId.systemDefault()).toInstant()))); + _ext4Helper.queryOne("window field[fieldLabel='End Date']", Ext4FieldRef.class) + .setValue(_tf.format(Date.from(endDate.atZone(ZoneId.systemDefault()).toInstant()))); + + Ext4FieldRef chargeToField = _ext4Helper.queryOne("window field[fieldLabel='Charge To']", Ext4FieldRef.class); + chargeToField.getEval("expand()"); + waitAndClick(Locator.tag("li").append(Locator.tagContainingText("span", "Other")).notHidden()); + waitForElement(Ext4Helper.Locators.window("Choose Project")); + _ext4Helper.queryOne("window[title=Choose Project] [fieldLabel='Project']", Ext4ComboRef.class).setComboByDisplayValue(PROJECT_ID); + waitAndClick(Ext4Helper.Locators.window("Choose Project").append(Ext4Helper.Locators.ext4ButtonEnabled("Submit"))); + + Ext4ComboRef treatmentField = _ext4Helper.queryOne("window field[fieldLabel='Treatment']", Ext4ComboRef.class); + treatmentField.waitForStoreLoad(); + treatmentField.setComboByDisplayValue("ACETAMINOPHEN (80mg) (E-77510)"); + + _ext4Helper.queryOne("window field[fieldLabel='Frequency']", Ext4ComboRef.class).setComboByDisplayValue("BID - AM/Night"); + _ext4Helper.queryOne("window field[fieldLabel='Route']", Ext4ComboRef.class).setComboByDisplayValue("PO"); + _ext4Helper.queryOne("window field[fieldLabel='Amount']", Ext4FieldRef.class).setValue("10"); + _ext4Helper.queryOne("window field[fieldLabel='Amount Units']", Ext4ComboRef.class).setComboByDisplayValue("mg"); + + submitBulkEditWindow(); + } + + private void submitBulkEditWindow() + { + waitAndClick(Ext4Helper.Locators.window("Bulk Edit").append(Ext4Helper.Locators.ext4Button("Submit"))); + + Locator.XPathLocator setValuesWindow = Ext4Helper.Locators.window("Set Values"); + waitFor(() -> !setValuesWindow.findElements(getDriver()).isEmpty() || + Ext4Helper.Locators.window("Bulk Edit").findElements(getDriver()).isEmpty(), + "Bulk Edit submit did not complete", WAIT_FOR_PAGE); + + if (!setValuesWindow.findElements(getDriver()).isEmpty()) + { + waitAndClick(setValuesWindow.append(Ext4Helper.Locators.ext4Button("Yes"))); + } + + waitForElementToDisappear(Ext4Helper.Locators.window("Bulk Edit")); + } + + private void assertActionsDisabledDuringValidation(List buttonTexts, List menuItemTexts) + { + Locator.XPathLocator validationIndicator = Locator.tagContainingText("span", "Validating...").notHidden(); + waitFor(() -> !validationIndicator.findElements(getDriver()).isEmpty(), + "Validation indicator never appeared", WAIT_FOR_PAGE); + + for (String buttonText : buttonTexts) + { + List buttons = _ext4Helper.componentQuery("button[text='" + buttonText + "']", Ext4CmpRef.class); + if (!buttons.isEmpty()) + { + waitFor(() -> Boolean.TRUE.equals(buttons.get(0).getEval("return this.isDisabled();")), + buttonText + " did not become disabled during validation", WAIT_FOR_PAGE); + } + } + + waitAndClick(_helper.getDataEntryButton("More Actions")); + waitForElement(Ext4Helper.Locators.menu().notHidden()); + for (String menuItemText : menuItemTexts) + { + waitForElement(Ext4Helper.Locators.menuItemDisabled(menuItemText).notHidden()); + } + waitAndClick(_helper.getDataEntryButton("More Actions")); + waitForElementToDisappear(Ext4Helper.Locators.menu().notHidden()); + + waitFor(() -> validationIndicator.findElements(getDriver()).isEmpty(), + "Validation indicator did not disappear", WAIT_FOR_PAGE * 2); + + for (String buttonText : buttonTexts) + { + List buttons = _ext4Helper.componentQuery("button[text='" + buttonText + "']", Ext4CmpRef.class); + if (!buttons.isEmpty()) + { + buttons.get(0).waitForEnabled(); + } + } + } + + private void enableDataEntryFormIfNeeded() + { + if (!Ext4Helper.Locators.ext4Button("Enable the form for data entry").findElements(getDriver()).isEmpty()) + { + waitAndClick(Ext4Helper.Locators.ext4Button("Enable the form for data entry")); + waitForElement(Ext4Helper.Locators.ext4Button("Exit data entry")); + } + } + + private void submitBirthArrivalForm() + { + _helper.submitFinalTaskForm(); + + Locator.XPathLocator successWindow = Ext4Helper.Locators.window("Success"); + Locator enterNewDataLink = Locator.tagWithText("a", "Enter New Data"); + waitFor(() -> !successWindow.findElements(getDriver()).isEmpty() || enterNewDataLink.findElementOrNull(getDriver()) != null, + "Birth/Arrival form submission did not complete", WAIT_FOR_PAGE * 2); + + if (!successWindow.findElements(getDriver()).isEmpty()) + { + waitAndClick(successWindow.append(Ext4Helper.Locators.ext4Button("No"))); + } + + waitForElement(enterNewDataLink); + } + + private int getCountForIds(String schemaName, String queryName, String columnName, List ids) throws IOException, CommandException + { + SelectRowsCommand command = new SelectRowsCommand(schemaName, queryName); + command.addFilter(new Filter(columnName, StringUtils.join(ids, ";"), Filter.Operator.IN)); + return command.execute(getApiHelper().getConnection(), getContainerPath()).getRowCount().intValue(); + } + @Override protected String getAnimalHistoryPath() { From e83c85c9de0a1f3ca50d9437a3fc61f9af4654f3 Mon Sep 17 00:00:00 2001 From: Binal Patel Date: Sat, 4 Apr 2026 21:37:31 -0700 Subject: [PATCH 07/19] test fix --- .../src/org/labkey/test/tests/onprc_ehr/ONPRC_EHRTest.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/onprc_ehr/test/src/org/labkey/test/tests/onprc_ehr/ONPRC_EHRTest.java b/onprc_ehr/test/src/org/labkey/test/tests/onprc_ehr/ONPRC_EHRTest.java index a7b5558fb..9701e2a00 100644 --- a/onprc_ehr/test/src/org/labkey/test/tests/onprc_ehr/ONPRC_EHRTest.java +++ b/onprc_ehr/test/src/org/labkey/test/tests/onprc_ehr/ONPRC_EHRTest.java @@ -1148,7 +1148,7 @@ public void testExamEntry() throws Exception Assert.assertEquals(remark, bloodGrid.getFieldValue(3, "remark")); Assert.assertEquals(remark, bloodGrid.getFieldValue(4, "remark")); - waitAndClickAndWait(_helper.getDataEntryButton("Save & Close")); + waitAndClick(_helper.getDataEntryButton("Save & Close")); waitForElement(Locator.tagWithText("a", "Enter New Data")); } @@ -1611,7 +1611,8 @@ public void testPathology() waitForElementToDisappear(deathWindow, 20000); //saving can take longer than default 10 seconds waitForElementToDisappear(Locator.tagContainingText("div", "Saving Changes...").notHidden()); - waitAndClickAndWait(_helper.getDataEntryButton("Save & Close")); + waitAndClick(_helper.getDataEntryButton("Save & Close")); + waitForElement(Locator.tagWithText("a", "Enter New Data")); //make new necropsy, copy from previous _helper.goToTaskForm("Necropsy", false); From d373155d319d4863f06d1cf7d55564b5983a54d7 Mon Sep 17 00:00:00 2001 From: Binal Patel Date: Sun, 5 Apr 2026 11:52:31 -0700 Subject: [PATCH 08/19] timing issue --- .../test/tests/onprc_ehr/ONPRC_EHRTest.java | 20 ++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/onprc_ehr/test/src/org/labkey/test/tests/onprc_ehr/ONPRC_EHRTest.java b/onprc_ehr/test/src/org/labkey/test/tests/onprc_ehr/ONPRC_EHRTest.java index 9701e2a00..021f9bd60 100644 --- a/onprc_ehr/test/src/org/labkey/test/tests/onprc_ehr/ONPRC_EHRTest.java +++ b/onprc_ehr/test/src/org/labkey/test/tests/onprc_ehr/ONPRC_EHRTest.java @@ -2044,7 +2044,7 @@ private void createArrivalAnimalsViaForm(List ids, Date birthDate) enableDataEntryFormIfNeeded(); waitForElement(Ext4Helper.Locators.ext4Button("Submit Final"), WAIT_FOR_PAGE * 2); - _ext4Helper.queryOne("button[text='Submit Final']", Ext4CmpRef.class).waitForEnabled(); + waitForDataEntryButtonEnabled("Submit Final", WAIT_FOR_PAGE * 4); Ext4GridRef grid = _helper.getExt4GridForFormSection("Arrivals"); grid.clickTbarButton("Add Series of IDs"); @@ -2087,7 +2087,7 @@ private void createArrivalAnimalsViaForm(List ids, Date birthDate) submitBulkEditWindow(); - _ext4Helper.queryOne("button[text='Submit Final']", Ext4CmpRef.class).waitForEnabled(); + waitForDataEntryButtonEnabled("Submit Final", WAIT_FOR_PAGE * 4); submitBirthArrivalForm(); } @@ -2111,7 +2111,7 @@ private void createBirthAnimalsViaForm(List ids, Date birthDate) grid.setGridCell(row, "geographic_origin", INDIAN); } - _ext4Helper.queryOne("button[text='Submit Final']", Ext4CmpRef.class).waitForEnabled(); + waitForDataEntryButtonEnabled("Submit Final", WAIT_FOR_PAGE * 4); submitBirthArrivalForm(); } @@ -2231,6 +2231,20 @@ private void assertActionsDisabledDuringValidation(List buttonTexts, Lis } } + private void waitForDataEntryButtonEnabled(String buttonText, int timeout) + { + waitFor(() -> { + List buttons = _ext4Helper.componentQuery("button[text='" + buttonText + "']", Ext4CmpRef.class); + if (buttons.isEmpty()) + { + return false; + } + + return Boolean.FALSE.equals(buttons.get(0).getEval("return this.isDisabled();")); + }, + "Button did not become enabled: " + buttonText, timeout); + } + private void enableDataEntryFormIfNeeded() { if (!Ext4Helper.Locators.ext4Button("Enable the form for data entry").findElements(getDriver()).isEmpty()) From ed1b72f64cf56c09c54a128a39787c5785db6867 Mon Sep 17 00:00:00 2001 From: Binal Patel Date: Sun, 5 Apr 2026 15:04:22 -0700 Subject: [PATCH 09/19] timing issue --- .../src/org/labkey/test/tests/onprc_ehr/ONPRC_EHRTest.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/onprc_ehr/test/src/org/labkey/test/tests/onprc_ehr/ONPRC_EHRTest.java b/onprc_ehr/test/src/org/labkey/test/tests/onprc_ehr/ONPRC_EHRTest.java index 021f9bd60..f6e91ed9c 100644 --- a/onprc_ehr/test/src/org/labkey/test/tests/onprc_ehr/ONPRC_EHRTest.java +++ b/onprc_ehr/test/src/org/labkey/test/tests/onprc_ehr/ONPRC_EHRTest.java @@ -1148,8 +1148,8 @@ public void testExamEntry() throws Exception Assert.assertEquals(remark, bloodGrid.getFieldValue(3, "remark")); Assert.assertEquals(remark, bloodGrid.getFieldValue(4, "remark")); - waitAndClick(_helper.getDataEntryButton("Save & Close")); - waitForElement(Locator.tagWithText("a", "Enter New Data")); + waitForDataEntryButtonEnabled("Save & Close", WAIT_FOR_PAGE * 2); + waitForElement(Locator.tagWithText("a", "Enter New Data"), WAIT_FOR_PAGE * 2); } @Test @@ -1612,7 +1612,7 @@ public void testPathology() waitForElementToDisappear(Locator.tagContainingText("div", "Saving Changes...").notHidden()); waitAndClick(_helper.getDataEntryButton("Save & Close")); - waitForElement(Locator.tagWithText("a", "Enter New Data")); + waitForElement(Locator.tagWithText("a", "Enter New Data"), WAIT_FOR_PAGE * 2); //make new necropsy, copy from previous _helper.goToTaskForm("Necropsy", false); From 63e7676a7adc43cfd72973fa54c3275a08f40bba Mon Sep 17 00:00:00 2001 From: Binal Patel Date: Sun, 5 Apr 2026 15:06:02 -0700 Subject: [PATCH 10/19] timing issue --- .../test/src/org/labkey/test/tests/onprc_ehr/ONPRC_EHRTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/onprc_ehr/test/src/org/labkey/test/tests/onprc_ehr/ONPRC_EHRTest.java b/onprc_ehr/test/src/org/labkey/test/tests/onprc_ehr/ONPRC_EHRTest.java index f6e91ed9c..46c9f4519 100644 --- a/onprc_ehr/test/src/org/labkey/test/tests/onprc_ehr/ONPRC_EHRTest.java +++ b/onprc_ehr/test/src/org/labkey/test/tests/onprc_ehr/ONPRC_EHRTest.java @@ -1611,7 +1611,7 @@ public void testPathology() waitForElementToDisappear(deathWindow, 20000); //saving can take longer than default 10 seconds waitForElementToDisappear(Locator.tagContainingText("div", "Saving Changes...").notHidden()); - waitAndClick(_helper.getDataEntryButton("Save & Close")); + waitForDataEntryButtonEnabled("Save & Close", WAIT_FOR_PAGE * 2); waitForElement(Locator.tagWithText("a", "Enter New Data"), WAIT_FOR_PAGE * 2); //make new necropsy, copy from previous From e2a9073730015b45f12025db0694b27fe084b41e Mon Sep 17 00:00:00 2001 From: Binal Patel Date: Sun, 5 Apr 2026 15:23:40 -0700 Subject: [PATCH 11/19] timing issues --- .../src/org/labkey/test/tests/onprc_ehr/ONPRC_EHRTest.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/onprc_ehr/test/src/org/labkey/test/tests/onprc_ehr/ONPRC_EHRTest.java b/onprc_ehr/test/src/org/labkey/test/tests/onprc_ehr/ONPRC_EHRTest.java index 46c9f4519..61d1f3473 100644 --- a/onprc_ehr/test/src/org/labkey/test/tests/onprc_ehr/ONPRC_EHRTest.java +++ b/onprc_ehr/test/src/org/labkey/test/tests/onprc_ehr/ONPRC_EHRTest.java @@ -1149,6 +1149,7 @@ public void testExamEntry() throws Exception Assert.assertEquals(remark, bloodGrid.getFieldValue(4, "remark")); waitForDataEntryButtonEnabled("Save & Close", WAIT_FOR_PAGE * 2); + waitAndClick(_helper.getDataEntryButton("Save & Close")); waitForElement(Locator.tagWithText("a", "Enter New Data"), WAIT_FOR_PAGE * 2); } @@ -1612,6 +1613,7 @@ public void testPathology() waitForElementToDisappear(Locator.tagContainingText("div", "Saving Changes...").notHidden()); waitForDataEntryButtonEnabled("Save & Close", WAIT_FOR_PAGE * 2); + waitAndClick(_helper.getDataEntryButton("Save & Close")); waitForElement(Locator.tagWithText("a", "Enter New Data"), WAIT_FOR_PAGE * 2); //make new necropsy, copy from previous @@ -2204,7 +2206,7 @@ private void assertActionsDisabledDuringValidation(List buttonTexts, Lis List buttons = _ext4Helper.componentQuery("button[text='" + buttonText + "']", Ext4CmpRef.class); if (!buttons.isEmpty()) { - waitFor(() -> Boolean.TRUE.equals(buttons.get(0).getEval("return this.isDisabled();")), + waitFor(() -> Boolean.TRUE.equals(buttons.get(0).getEval("isDisabled() == arguments[0]", true)), buttonText + " did not become disabled during validation", WAIT_FOR_PAGE); } } @@ -2240,7 +2242,7 @@ private void waitForDataEntryButtonEnabled(String buttonText, int timeout) return false; } - return Boolean.FALSE.equals(buttons.get(0).getEval("return this.isDisabled();")); + return Boolean.TRUE.equals(buttons.get(0).getEval("isDisabled() == arguments[0]", false)); }, "Button did not become enabled: " + buttonText, timeout); } From d3651212f027cbc3d43fd461b1a9449d66f60c9e Mon Sep 17 00:00:00 2001 From: Binal Patel Date: Sun, 5 Apr 2026 17:28:11 -0700 Subject: [PATCH 12/19] trim down --- .../test/tests/onprc_ehr/ONPRC_EHRTest.java | 231 +++++------------- 1 file changed, 63 insertions(+), 168 deletions(-) diff --git a/onprc_ehr/test/src/org/labkey/test/tests/onprc_ehr/ONPRC_EHRTest.java b/onprc_ehr/test/src/org/labkey/test/tests/onprc_ehr/ONPRC_EHRTest.java index 61d1f3473..2265163c6 100644 --- a/onprc_ehr/test/src/org/labkey/test/tests/onprc_ehr/ONPRC_EHRTest.java +++ b/onprc_ehr/test/src/org/labkey/test/tests/onprc_ehr/ONPRC_EHRTest.java @@ -72,6 +72,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.UUID; import java.util.function.Function; import static org.junit.Assert.assertEquals; @@ -560,46 +561,27 @@ public void testArrivalApi() throws Exception @Test public void testSubmitButtonsDisabledDuringValidation() throws Exception { - Date today = DateUtils.truncate(new Date(), Calendar.DATE); - Date arrivalBirthDate = prepareDate(today, -700, 0); - List arrivalIds = createSequentialNumericIds(72000, 30); - List birthIds = createSequentialNumericIds(73000, 30); - List allIds = new ArrayList<>(arrivalIds); - allIds.addAll(birthIds); + List allIds = createTemporaryValidationAnimals(30); - log("Deleting existing records"); - deleteAnimalRecords(allIds); - - log("Creating 30 animals through the Arrival form"); - createArrivalAnimalsViaForm(arrivalIds, arrivalBirthDate); - - log("Creating 30 animals through the Birth form"); - createBirthAnimalsViaForm(birthIds, today); - - waitFor(() -> { - try - { - return getCountForIds("study", "demographics", "Id", allIds) == allIds.size(); - } - catch (Exception e) - { - return false; - } - }, - "Expected demographics rows were not created for all 60 animals", WAIT_FOR_PAGE * 4); - - log("Bulk adding treatment orders for all 60 animals"); - _helper.goToTaskForm("Medication/Treatment Orders", false); - Ext4GridRef treatmentGrid = _helper.getExt4GridForFormSection("Medication/Treatment Orders"); - addBatchIdsToGrid(treatmentGrid, allIds, true); - populateTreatmentOrdersBulkEdit(); - - assertActionsDisabledDuringValidation( - Arrays.asList("Save Draft", "Save & Close", "Submit For Review", "Submit Final"), - Arrays.asList("Submit and Reload", "Force Submit")); - - treatmentGrid.waitForRowCount(allIds.size()); - _helper.discardForm(); + try + { + log("Bulk adding treatment orders for temporary test animals"); + _helper.goToTaskForm("Medication/Treatment Orders", false); + Ext4GridRef treatmentGrid = _helper.getExt4GridForFormSection("Medication/Treatment Orders"); + addBatchIdsToGrid(treatmentGrid, allIds, true); + populateTreatmentOrdersBulkEdit(); + + assertActionsDisabledDuringValidation( + Arrays.asList("Save Draft", "Save & Close", "Submit For Review", "Submit Final"), + Arrays.asList("Submit and Reload", "Force Submit")); + + treatmentGrid.waitForRowCount(allIds.size()); + _helper.discardForm(); + } + finally + { + deleteTemporaryValidationAnimals(allIds); + } } @Test @@ -2019,104 +2001,6 @@ private void setNecropsyFormElement(String id, String value) assertEquals(value, getFormElement(loc)); } - private List createSequentialNumericIds(int startingId, int count) - { - List ids = new ArrayList<>(); - for (int i = 0; i < count; i++) - { - ids.add(Integer.toString(startingId + i)); - } - - return ids; - } - - private void deleteAnimalRecords(List ids) throws Exception - { - String joinedIds = StringUtils.join(ids, ";"); - - for (String queryName : Arrays.asList("drug", "treatment_order", "housing", "flags", "birth", "arrival", "demographics")) - { - getApiHelper().deleteAllRecords("study", queryName, new Filter("Id", joinedIds, Filter.Operator.IN)); - } - } - - private void createArrivalAnimalsViaForm(List ids, Date birthDate) - { - _helper.goToTaskForm("Arrival", "Submit Final", false); - enableDataEntryFormIfNeeded(); - - waitForElement(Ext4Helper.Locators.ext4Button("Submit Final"), WAIT_FOR_PAGE * 2); - waitForDataEntryButtonEnabled("Submit Final", WAIT_FOR_PAGE * 4); - - Ext4GridRef grid = _helper.getExt4GridForFormSection("Arrivals"); - grid.clickTbarButton("Add Series of IDs"); - waitForElement(Ext4Helper.Locators.window("Enter Series of IDs")); - Ext4FieldRef.getForLabel(this, "Starting Number").setValue(ids.get(0)); - Ext4FieldRef.getForLabel(this, "Total IDs").setValue(Integer.toString(ids.size())); - waitAndClick(Ext4Helper.Locators.windowButton("Enter Series of IDs", "Submit")); - grid.waitForRowCount(ids.size()); - grid.clickTbarButton("Select All"); - grid.waitForSelected(ids.size()); - - grid.clickTbarButton("More Actions"); - click(Ext4Helper.Locators.menuItem("Bulk Edit")); - waitForElement(Ext4Helper.Locators.window("Bulk Edit")); - - _helper.toggleBulkEditField("Source"); - Ext4ComboRef sourceField = _ext4Helper.queryOne("window field[fieldLabel=Source]", Ext4ComboRef.class); - sourceField.waitForStoreLoad(); - sourceField.setComboByDisplayValue("Boston"); - - _helper.toggleBulkEditField("Acquisition Type"); - Ext4ComboRef acquisitionTypeField = _ext4Helper.queryOne("window field[fieldLabel='Acquisition Type']", Ext4ComboRef.class); - acquisitionTypeField.waitForStoreLoad(); - acquisitionTypeField.setComboByDisplayValue("Acquired"); - - _helper.toggleBulkEditField("Gender"); - _ext4Helper.queryOne("window field[fieldLabel=Gender]", Ext4ComboRef.class).setComboByDisplayValue("female"); - - _helper.toggleBulkEditField("Species"); - _ext4Helper.queryOne("window field[fieldLabel=Species]", Ext4ComboRef.class).setComboByDisplayValue(RHESUS); - - _helper.toggleBulkEditField("Geographic Origin"); - _ext4Helper.queryOne("window field[fieldLabel='Geographic Origin']", Ext4ComboRef.class).setValue(INDIAN); - - _helper.toggleBulkEditField("Birth"); - _ext4Helper.queryOne("window field[fieldLabel=Birth]", Ext4ComboRef.class).setValue(_df.format(birthDate)); - - _helper.toggleBulkEditField("Room"); - _ext4Helper.queryOne("window field[fieldLabel=Room]", Ext4ComboRef.class).setValue(ROOMS[0]); - - submitBulkEditWindow(); - - waitForDataEntryButtonEnabled("Submit Final", WAIT_FOR_PAGE * 4); - submitBirthArrivalForm(); - } - - private void createBirthAnimalsViaForm(List ids, Date birthDate) - { - _helper.goToTaskForm("Birth", false); - enableDataEntryFormIfNeeded(); - - Ext4GridRef grid = _helper.getExt4GridForFormSection("Births"); - addBatchIdsToGrid(grid, ids, false); - - String birthDateTime = _tf.format(birthDate); - for (int row = 1; row <= ids.size(); row++) - { - grid.setGridCellJS(row, "date", birthDateTime); - grid.setGridCell(row, "birth_condition", "Live Birth"); - grid.setGridCell(row, "room", ROOM_ID2); - grid.setGridCell(row, "gender", "female"); - grid.setGridCell(row, "type", "Vaginal"); - grid.setGridCell(row, "species", RHESUS); - grid.setGridCell(row, "geographic_origin", INDIAN); - } - - waitForDataEntryButtonEnabled("Submit Final", WAIT_FOR_PAGE * 4); - submitBirthArrivalForm(); - } - private void addBatchIdsToGrid(Ext4GridRef grid, List ids, boolean bulkEditBeforeApplying) { grid.clickTbarButton("Add Batch"); @@ -2233,51 +2117,62 @@ private void assertActionsDisabledDuringValidation(List buttonTexts, Lis } } - private void waitForDataEntryButtonEnabled(String buttonText, int timeout) + private List createTemporaryValidationAnimals(int count) throws Exception { - waitFor(() -> { - List buttons = _ext4Helper.componentQuery("button[text='" + buttonText + "']", Ext4CmpRef.class); - if (buttons.isEmpty()) - { - return false; - } + String seed = Long.toString(System.currentTimeMillis()); + seed = seed.substring(Math.max(0, seed.length() - 6)); - return Boolean.TRUE.equals(buttons.get(0).getEval("isDisabled() == arguments[0]", false)); - }, - "Button did not become enabled: " + buttonText, timeout); - } + String[] species = {"Rhesus", "Cynomolgus", "Marmoset"}; + String[] fields = {"Id", "Species", "Birth", "Gender", "date", "calculated_status", "objectid"}; + Object[][] data = new Object[count][]; + List ids = new ArrayList<>(); - private void enableDataEntryFormIfNeeded() - { - if (!Ext4Helper.Locators.ext4Button("Enable the form for data entry").findElements(getDriver()).isEmpty()) + for (int i = 0; i < count; i++) { - waitAndClick(Ext4Helper.Locators.ext4Button("Enable the form for data entry")); - waitForElement(Ext4Helper.Locators.ext4Button("Exit data entry")); + String id = "VAL" + seed + String.format("%02d", i + 1); + ids.add(id); + data[i] = new Object[]{ + id, + species[i % species.length], + new Date().toString(), + i % 2 == 0 ? getMale() : getFemale(), + new Date(), + "Alive", + UUID.randomUUID().toString() + }; } - } - private void submitBirthArrivalForm() - { - _helper.submitFinalTaskForm(); + getApiHelper().deleteAllRecords("study", "demographics", new Filter("Id", StringUtils.join(ids, ";"), Filter.Operator.IN)); + getApiHelper().doSaveRows(DATA_ADMIN.getEmail(), + getApiHelper().prepareInsertCommand("study", "demographics", "lsid", fields, data), + getExtraContext()); + cacheIds(ids); - Locator.XPathLocator successWindow = Ext4Helper.Locators.window("Success"); - Locator enterNewDataLink = Locator.tagWithText("a", "Enter New Data"); - waitFor(() -> !successWindow.findElements(getDriver()).isEmpty() || enterNewDataLink.findElementOrNull(getDriver()) != null, - "Birth/Arrival form submission did not complete", WAIT_FOR_PAGE * 2); + return ids; + } - if (!successWindow.findElements(getDriver()).isEmpty()) + private void deleteTemporaryValidationAnimals(List ids) throws Exception + { + if (ids.isEmpty()) { - waitAndClick(successWindow.append(Ext4Helper.Locators.ext4Button("No"))); + return; } - waitForElement(enterNewDataLink); + getApiHelper().deleteAllRecords("study", "demographics", new Filter("Id", StringUtils.join(ids, ";"), Filter.Operator.IN)); } - private int getCountForIds(String schemaName, String queryName, String columnName, List ids) throws IOException, CommandException + private void waitForDataEntryButtonEnabled(String buttonText, int timeout) { - SelectRowsCommand command = new SelectRowsCommand(schemaName, queryName); - command.addFilter(new Filter(columnName, StringUtils.join(ids, ";"), Filter.Operator.IN)); - return command.execute(getApiHelper().getConnection(), getContainerPath()).getRowCount().intValue(); + waitFor(() -> { + List buttons = _ext4Helper.componentQuery("button[text='" + buttonText + "']", Ext4CmpRef.class); + if (buttons.isEmpty()) + { + return false; + } + + return Boolean.TRUE.equals(buttons.get(0).getEval("isDisabled() == arguments[0]", false)); + }, + "Button did not become enabled: " + buttonText, timeout); } @Override From 9fedb9003e714df69bbe0235d9c20e0d4bee7866 Mon Sep 17 00:00:00 2001 From: Binal Patel Date: Sun, 5 Apr 2026 20:59:32 -0700 Subject: [PATCH 13/19] correct form name --- .../test/src/org/labkey/test/tests/onprc_ehr/ONPRC_EHRTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/onprc_ehr/test/src/org/labkey/test/tests/onprc_ehr/ONPRC_EHRTest.java b/onprc_ehr/test/src/org/labkey/test/tests/onprc_ehr/ONPRC_EHRTest.java index 2265163c6..a5bf59c29 100644 --- a/onprc_ehr/test/src/org/labkey/test/tests/onprc_ehr/ONPRC_EHRTest.java +++ b/onprc_ehr/test/src/org/labkey/test/tests/onprc_ehr/ONPRC_EHRTest.java @@ -566,7 +566,7 @@ public void testSubmitButtonsDisabledDuringValidation() throws Exception try { log("Bulk adding treatment orders for temporary test animals"); - _helper.goToTaskForm("Medication/Treatment Orders", false); + _helper.goToTaskForm("Medications/Diet", false); Ext4GridRef treatmentGrid = _helper.getExt4GridForFormSection("Medication/Treatment Orders"); addBatchIdsToGrid(treatmentGrid, allIds, true); populateTreatmentOrdersBulkEdit(); From 2ab715c9f2a4304575a2276ad2c9d8db72aab95b Mon Sep 17 00:00:00 2001 From: Binal Patel Date: Sun, 5 Apr 2026 21:55:28 -0700 Subject: [PATCH 14/19] dont even worry about bulk editing --- .../src/org/labkey/test/tests/onprc_ehr/ONPRC_EHRTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/onprc_ehr/test/src/org/labkey/test/tests/onprc_ehr/ONPRC_EHRTest.java b/onprc_ehr/test/src/org/labkey/test/tests/onprc_ehr/ONPRC_EHRTest.java index a5bf59c29..d9f21a7cc 100644 --- a/onprc_ehr/test/src/org/labkey/test/tests/onprc_ehr/ONPRC_EHRTest.java +++ b/onprc_ehr/test/src/org/labkey/test/tests/onprc_ehr/ONPRC_EHRTest.java @@ -565,11 +565,11 @@ public void testSubmitButtonsDisabledDuringValidation() throws Exception try { - log("Bulk adding treatment orders for temporary test animals"); +// log("Bulk adding treatment orders for temporary test animals"); _helper.goToTaskForm("Medications/Diet", false); Ext4GridRef treatmentGrid = _helper.getExt4GridForFormSection("Medication/Treatment Orders"); addBatchIdsToGrid(treatmentGrid, allIds, true); - populateTreatmentOrdersBulkEdit(); +// populateTreatmentOrdersBulkEdit(); assertActionsDisabledDuringValidation( Arrays.asList("Save Draft", "Save & Close", "Submit For Review", "Submit Final"), From e967a31f5603e4e472573b36e0d690f15443a6de Mon Sep 17 00:00:00 2001 From: Binal Patel Date: Mon, 6 Apr 2026 09:59:10 -0700 Subject: [PATCH 15/19] cleanup --- .../test/tests/onprc_ehr/ONPRC_EHRTest.java | 19 +++---------------- 1 file changed, 3 insertions(+), 16 deletions(-) diff --git a/onprc_ehr/test/src/org/labkey/test/tests/onprc_ehr/ONPRC_EHRTest.java b/onprc_ehr/test/src/org/labkey/test/tests/onprc_ehr/ONPRC_EHRTest.java index d9f21a7cc..e2ead49ad 100644 --- a/onprc_ehr/test/src/org/labkey/test/tests/onprc_ehr/ONPRC_EHRTest.java +++ b/onprc_ehr/test/src/org/labkey/test/tests/onprc_ehr/ONPRC_EHRTest.java @@ -568,7 +568,7 @@ public void testSubmitButtonsDisabledDuringValidation() throws Exception // log("Bulk adding treatment orders for temporary test animals"); _helper.goToTaskForm("Medications/Diet", false); Ext4GridRef treatmentGrid = _helper.getExt4GridForFormSection("Medication/Treatment Orders"); - addBatchIdsToGrid(treatmentGrid, allIds, true); + addBatchIdsToGrid(treatmentGrid, allIds); // populateTreatmentOrdersBulkEdit(); assertActionsDisabledDuringValidation( @@ -2001,27 +2001,14 @@ private void setNecropsyFormElement(String id, String value) assertEquals(value, getFormElement(loc)); } - private void addBatchIdsToGrid(Ext4GridRef grid, List ids, boolean bulkEditBeforeApplying) + private void addBatchIdsToGrid(Ext4GridRef grid, List ids) { grid.clickTbarButton("Add Batch"); waitForElement(Ext4Helper.Locators.window("Choose Animals")); Ext4FieldRef.getForLabel(this, "Id(s)").setValue(StringUtils.join(ids, ";")); - if (bulkEditBeforeApplying) - { - Ext4FieldRef.getForLabel(this, "Bulk Edit Before Applying").setChecked(true); - } - waitAndClick(Ext4Helper.Locators.window("Choose Animals").append(Ext4Helper.Locators.ext4Button("Submit"))); - - if (bulkEditBeforeApplying) - { - waitForElement(Ext4Helper.Locators.window("Bulk Edit")); - } - else - { - grid.waitForRowCount(ids.size()); - } + grid.waitForRowCount(ids.size()); } private void populateTreatmentOrdersBulkEdit() From 2ca1869996d5c1f369f534148bcc4a7dba886e98 Mon Sep 17 00:00:00 2001 From: Binal Patel Date: Mon, 6 Apr 2026 11:25:21 -0700 Subject: [PATCH 16/19] Capitalization --- .../test/src/org/labkey/test/tests/onprc_ehr/ONPRC_EHRTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/onprc_ehr/test/src/org/labkey/test/tests/onprc_ehr/ONPRC_EHRTest.java b/onprc_ehr/test/src/org/labkey/test/tests/onprc_ehr/ONPRC_EHRTest.java index e2ead49ad..1c473620c 100644 --- a/onprc_ehr/test/src/org/labkey/test/tests/onprc_ehr/ONPRC_EHRTest.java +++ b/onprc_ehr/test/src/org/labkey/test/tests/onprc_ehr/ONPRC_EHRTest.java @@ -573,7 +573,7 @@ public void testSubmitButtonsDisabledDuringValidation() throws Exception assertActionsDisabledDuringValidation( Arrays.asList("Save Draft", "Save & Close", "Submit For Review", "Submit Final"), - Arrays.asList("Submit and Reload", "Force Submit")); + Arrays.asList("Submit And Reload", "Force Submit")); treatmentGrid.waitForRowCount(allIds.size()); _helper.discardForm(); From 37a18aaebe743deb747857e616f935159826596d Mon Sep 17 00:00:00 2001 From: Binal Patel Date: Mon, 6 Apr 2026 14:06:40 -0700 Subject: [PATCH 17/19] wait for text --- .../labkey/test/tests/onprc_ehr/ONPRC_EHRTest.java | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/onprc_ehr/test/src/org/labkey/test/tests/onprc_ehr/ONPRC_EHRTest.java b/onprc_ehr/test/src/org/labkey/test/tests/onprc_ehr/ONPRC_EHRTest.java index 1c473620c..b2296078b 100644 --- a/onprc_ehr/test/src/org/labkey/test/tests/onprc_ehr/ONPRC_EHRTest.java +++ b/onprc_ehr/test/src/org/labkey/test/tests/onprc_ehr/ONPRC_EHRTest.java @@ -2093,15 +2093,8 @@ private void assertActionsDisabledDuringValidation(List buttonTexts, Lis waitFor(() -> validationIndicator.findElements(getDriver()).isEmpty(), "Validation indicator did not disappear", WAIT_FOR_PAGE * 2); - - for (String buttonText : buttonTexts) - { - List buttons = _ext4Helper.componentQuery("button[text='" + buttonText + "']", Ext4CmpRef.class); - if (!buttons.isEmpty()) - { - buttons.get(0).waitForEnabled(); - } - } + waitForText(WAIT_FOR_PAGE * 2, "WARN"); + waitForText(WAIT_FOR_PAGE * 2, "ERROR"); } private List createTemporaryValidationAnimals(int count) throws Exception From e3fd85bed15f740c4a0fc5d87e6b4082f5670a14 Mon Sep 17 00:00:00 2001 From: Binal Patel Date: Mon, 6 Apr 2026 15:56:52 -0700 Subject: [PATCH 18/19] cleanup --- .../test/tests/onprc_ehr/ONPRC_EHRTest.java | 49 ++----------------- 1 file changed, 5 insertions(+), 44 deletions(-) diff --git a/onprc_ehr/test/src/org/labkey/test/tests/onprc_ehr/ONPRC_EHRTest.java b/onprc_ehr/test/src/org/labkey/test/tests/onprc_ehr/ONPRC_EHRTest.java index b2296078b..890b23b0b 100644 --- a/onprc_ehr/test/src/org/labkey/test/tests/onprc_ehr/ONPRC_EHRTest.java +++ b/onprc_ehr/test/src/org/labkey/test/tests/onprc_ehr/ONPRC_EHRTest.java @@ -565,15 +565,12 @@ public void testSubmitButtonsDisabledDuringValidation() throws Exception try { -// log("Bulk adding treatment orders for temporary test animals"); + log("Bulk adding animals in treatment orders for temporary test animals"); _helper.goToTaskForm("Medications/Diet", false); Ext4GridRef treatmentGrid = _helper.getExt4GridForFormSection("Medication/Treatment Orders"); addBatchIdsToGrid(treatmentGrid, allIds); -// populateTreatmentOrdersBulkEdit(); - assertActionsDisabledDuringValidation( - Arrays.asList("Save Draft", "Save & Close", "Submit For Review", "Submit Final"), - Arrays.asList("Submit And Reload", "Force Submit")); + assertActionsDisabledDuringValidation(); treatmentGrid.waitForRowCount(allIds.size()); _helper.discardForm(); @@ -2011,44 +2008,6 @@ private void addBatchIdsToGrid(Ext4GridRef grid, List ids) grid.waitForRowCount(ids.size()); } - private void populateTreatmentOrdersBulkEdit() - { - LocalDateTime beginDate = LocalDateTime.now().plusDays(1).withHour(8).withMinute(0).withSecond(0).withNano(0); - LocalDateTime endDate = beginDate.plusDays(2).withHour(20).withMinute(0); - - _helper.toggleBulkEditField("Begin Date"); - _helper.toggleBulkEditField("End Date"); - _helper.toggleBulkEditField("Charge To"); - _helper.toggleBulkEditField("Treatment"); - _helper.toggleBulkEditField("Frequency"); - _helper.toggleBulkEditField("Route"); - _helper.toggleBulkEditField("Amount"); - _helper.toggleBulkEditField("Amount Units"); - - _ext4Helper.queryOne("window field[fieldLabel='Begin Date']", Ext4FieldRef.class) - .setValue(_tf.format(Date.from(beginDate.atZone(ZoneId.systemDefault()).toInstant()))); - _ext4Helper.queryOne("window field[fieldLabel='End Date']", Ext4FieldRef.class) - .setValue(_tf.format(Date.from(endDate.atZone(ZoneId.systemDefault()).toInstant()))); - - Ext4FieldRef chargeToField = _ext4Helper.queryOne("window field[fieldLabel='Charge To']", Ext4FieldRef.class); - chargeToField.getEval("expand()"); - waitAndClick(Locator.tag("li").append(Locator.tagContainingText("span", "Other")).notHidden()); - waitForElement(Ext4Helper.Locators.window("Choose Project")); - _ext4Helper.queryOne("window[title=Choose Project] [fieldLabel='Project']", Ext4ComboRef.class).setComboByDisplayValue(PROJECT_ID); - waitAndClick(Ext4Helper.Locators.window("Choose Project").append(Ext4Helper.Locators.ext4ButtonEnabled("Submit"))); - - Ext4ComboRef treatmentField = _ext4Helper.queryOne("window field[fieldLabel='Treatment']", Ext4ComboRef.class); - treatmentField.waitForStoreLoad(); - treatmentField.setComboByDisplayValue("ACETAMINOPHEN (80mg) (E-77510)"); - - _ext4Helper.queryOne("window field[fieldLabel='Frequency']", Ext4ComboRef.class).setComboByDisplayValue("BID - AM/Night"); - _ext4Helper.queryOne("window field[fieldLabel='Route']", Ext4ComboRef.class).setComboByDisplayValue("PO"); - _ext4Helper.queryOne("window field[fieldLabel='Amount']", Ext4FieldRef.class).setValue("10"); - _ext4Helper.queryOne("window field[fieldLabel='Amount Units']", Ext4ComboRef.class).setComboByDisplayValue("mg"); - - submitBulkEditWindow(); - } - private void submitBulkEditWindow() { waitAndClick(Ext4Helper.Locators.window("Bulk Edit").append(Ext4Helper.Locators.ext4Button("Submit"))); @@ -2066,8 +2025,10 @@ private void submitBulkEditWindow() waitForElementToDisappear(Ext4Helper.Locators.window("Bulk Edit")); } - private void assertActionsDisabledDuringValidation(List buttonTexts, List menuItemTexts) + private void assertActionsDisabledDuringValidation() { + List buttonTexts = Arrays.asList("Save Draft", "Save & Close", "Submit For Review", "Submit Final"); + List menuItemTexts = Arrays.asList("Submit And Reload", "Force Submit"); Locator.XPathLocator validationIndicator = Locator.tagContainingText("span", "Validating...").notHidden(); waitFor(() -> !validationIndicator.findElements(getDriver()).isEmpty(), "Validation indicator never appeared", WAIT_FOR_PAGE); From aa4016b4a41bd3839722cf9f490a239b8464401c Mon Sep 17 00:00:00 2001 From: Binal Patel Date: Thu, 9 Apr 2026 19:11:42 -0700 Subject: [PATCH 19/19] Remove unused method --- .../test/tests/onprc_ehr/ONPRC_EHRTest.java | 17 ----------------- 1 file changed, 17 deletions(-) diff --git a/onprc_ehr/test/src/org/labkey/test/tests/onprc_ehr/ONPRC_EHRTest.java b/onprc_ehr/test/src/org/labkey/test/tests/onprc_ehr/ONPRC_EHRTest.java index 890b23b0b..1d059fb22 100644 --- a/onprc_ehr/test/src/org/labkey/test/tests/onprc_ehr/ONPRC_EHRTest.java +++ b/onprc_ehr/test/src/org/labkey/test/tests/onprc_ehr/ONPRC_EHRTest.java @@ -2008,23 +2008,6 @@ private void addBatchIdsToGrid(Ext4GridRef grid, List ids) grid.waitForRowCount(ids.size()); } - private void submitBulkEditWindow() - { - waitAndClick(Ext4Helper.Locators.window("Bulk Edit").append(Ext4Helper.Locators.ext4Button("Submit"))); - - Locator.XPathLocator setValuesWindow = Ext4Helper.Locators.window("Set Values"); - waitFor(() -> !setValuesWindow.findElements(getDriver()).isEmpty() || - Ext4Helper.Locators.window("Bulk Edit").findElements(getDriver()).isEmpty(), - "Bulk Edit submit did not complete", WAIT_FOR_PAGE); - - if (!setValuesWindow.findElements(getDriver()).isEmpty()) - { - waitAndClick(setValuesWindow.append(Ext4Helper.Locators.ext4Button("Yes"))); - } - - waitForElementToDisappear(Ext4Helper.Locators.window("Bulk Edit")); - } - private void assertActionsDisabledDuringValidation() { List buttonTexts = Arrays.asList("Save Draft", "Save & Close", "Submit For Review", "Submit Final");