diff --git a/src/org/labkey/test/components/domain/DomainFormPanel.java b/src/org/labkey/test/components/domain/DomainFormPanel.java index cb11a22d8a..4b6b5a9df8 100644 --- a/src/org/labkey/test/components/domain/DomainFormPanel.java +++ b/src/org/labkey/test/components/domain/DomainFormPanel.java @@ -10,7 +10,6 @@ import org.labkey.test.components.ui.grids.ResponsiveGrid; import org.labkey.test.params.FieldDefinition; import org.labkey.test.selenium.WebElementWrapper; -import org.openqa.selenium.TimeoutException; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.support.ui.ExpectedConditions; @@ -531,6 +530,10 @@ public String getPanelAlertText(int index) return getPanelAlertWebElement(index).getText(); } + public List getPanelAlertTexts() + { + return getWrapper().getTexts(getPanelAlertElements()); + } /** * There may be an element in the alert that a test will need to interact with so return the alert element and let * the test find the control it needs. @@ -543,19 +546,17 @@ public WebElement getPanelAlertWebElement() public WebElement getPanelAlertWebElement(int index) { - try - { - getWrapper().waitFor(() -> BootstrapLocators.infoBanner.existsIn(getDriver()), - "the info alert did not appear as expected", 1000); - } - catch (TimeoutException e) + return getPanelAlertElements().get(index); + } + + public List getPanelAlertElements() + { + if (!WebDriverWrapper.waitFor(() -> BootstrapLocators.infoBanner.existsIn(this), 1000)) { return null; } - // It would be better to not return a raw WebElement but who knows what the future holds, different alerts - // may show different controls. - return BootstrapLocators.infoBanner.index(index).findElement(this); + return BootstrapLocators.infoBanner.findElements(this); } @Override diff --git a/src/org/labkey/test/tests/SampleTypeTest.java b/src/org/labkey/test/tests/SampleTypeTest.java index b286dcf4ef..c0dd03695a 100644 --- a/src/org/labkey/test/tests/SampleTypeTest.java +++ b/src/org/labkey/test/tests/SampleTypeTest.java @@ -19,6 +19,7 @@ import org.apache.commons.io.FileUtils; import org.apache.poi.ss.usermodel.Sheet; import org.assertj.core.api.Assertions; +import org.hamcrest.CoreMatchers; import org.junit.Assert; import org.junit.BeforeClass; import org.junit.Ignore; @@ -1357,7 +1358,7 @@ public void testIgnoreReservedFieldNames() throws Exception DomainFormPanel domainForm = createPage .getFieldsPanel() .setInferFieldFile(inferenceFile); - checker().verifyEquals("Reserved field warning not as expected", expectedInfoMsg, domainForm.getPanelAlertText()); + checker().verifyThat("Reserved field warning not as expected", domainForm.getPanelAlertTexts(), CoreMatchers.hasItem(expectedInfoMsg)); createPage.clickSave(); DataRegionTable drt = DataRegion(getDriver()).find(); checker().verifyTrue("Sample type not found in list of sample types", drt.getColumnDataAsText("Name").contains(name)); diff --git a/src/org/labkey/test/tests/StudyBaseTest.java b/src/org/labkey/test/tests/StudyBaseTest.java index c78a6e63bc..c248fb8fba 100644 --- a/src/org/labkey/test/tests/StudyBaseTest.java +++ b/src/org/labkey/test/tests/StudyBaseTest.java @@ -27,6 +27,7 @@ import org.labkey.test.components.ext4.Checkbox; import org.labkey.test.pages.DatasetPropertiesPage; import org.labkey.test.pages.admin.ExportFolderPage; +import org.labkey.test.pages.compliance.FolderManagementComplianceTab; import org.labkey.test.params.FieldDefinition.PhiSelectType; import org.labkey.test.util.APITestHelper; import org.labkey.test.util.ApiPermissionsHelper; @@ -107,6 +108,14 @@ protected void initializeFolder() if (_studyHelper.isSpecimenModulePresent()) _containerHelper.enableModule("Specimen"); new ApiPermissionsHelper(this).checkInheritedPermissions(); + + if (_containerHelper.getAllModules().contains("compliance")) + { + FolderManagementComplianceTab.beginAt(this, getProjectName()).setPhiRolesRequired(true).save(); + new ApiPermissionsHelper(getProjectName()).setUserPermissions(getCurrentUser(), "Restricted PHI Reader"); + FolderManagementComplianceTab.beginAt(this, getProjectName() + "/" + getFolderName()).setPhiRolesRequired(true).save(); + goToProjectFolder(getProjectName(), getFolderName()); + } } // Start importing the specimen archive. This can load in the background while executing the first set of diff --git a/src/org/labkey/test/tests/filecontent/FileContentActionButtonsTest.java b/src/org/labkey/test/tests/filecontent/FileContentActionButtonsTest.java index 28987f4768..cbd4066b2d 100644 --- a/src/org/labkey/test/tests/filecontent/FileContentActionButtonsTest.java +++ b/src/org/labkey/test/tests/filecontent/FileContentActionButtonsTest.java @@ -16,6 +16,7 @@ package org.labkey.test.tests.filecontent; import org.assertj.core.api.Assertions; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.junit.Before; import org.junit.BeforeClass; @@ -75,11 +76,12 @@ public void testDefaultActions() BrowserAction.UPLOAD, BrowserAction.IMPORT_DATA, BrowserAction.AUDIT_HISTORY, - BrowserAction.ADMIN) + BrowserAction.ADMIN, + BrowserAction.CREATE_RUN) ); // All icons are present by default - for (BrowserAction action : BrowserAction.values()) + for (BrowserAction action : filterActionsForAvailableModules(BrowserAction.values())) { assertElementPresent(action.getButtonIconLocator()); if (buttonsWithText.contains(action)) @@ -106,7 +108,8 @@ public void testEditorActions() BrowserAction.EDIT_PROPERTIES, BrowserAction.UPLOAD, BrowserAction.IMPORT_DATA, - BrowserAction.EMAIL_SETTINGS + BrowserAction.EMAIL_SETTINGS, + BrowserAction.CREATE_RUN ); stopImpersonatingRole(); @@ -126,7 +129,8 @@ public void testSubmitterReaderActions() BrowserAction.EDIT_PROPERTIES, BrowserAction.UPLOAD, BrowserAction.IMPORT_DATA, - BrowserAction.EMAIL_SETTINGS + BrowserAction.EMAIL_SETTINGS, + BrowserAction.CREATE_RUN ); stopImpersonatingRole(); @@ -146,7 +150,8 @@ public void testAuthorActions() BrowserAction.EDIT_PROPERTIES, BrowserAction.UPLOAD, BrowserAction.IMPORT_DATA, - BrowserAction.EMAIL_SETTINGS + BrowserAction.EMAIL_SETTINGS, + BrowserAction.CREATE_RUN ); stopImpersonatingRole(); @@ -251,7 +256,15 @@ public void testActionsWithSpecialCharactersInFileName() private void assertActionsAvailable(BrowserAction... actions) { - assertEquals(Arrays.asList(actions), _fileBrowserHelper.getAvailableBrowserActions()); + assertEquals(filterActionsForAvailableModules(actions), _fileBrowserHelper.getAvailableBrowserActions()); + } + + @NotNull + private List filterActionsForAvailableModules(BrowserAction[] actions) + { + Set allModules = _containerHelper.getAllModules(); + return Arrays.stream(actions) + .filter(action -> allModules.contains(action.getRequiredModule())).toList(); } private void resetToDefaultToolbar() diff --git a/src/org/labkey/test/util/FileBrowserHelper.java b/src/org/labkey/test/util/FileBrowserHelper.java index ef4b2fdd9e..58cece3c2f 100644 --- a/src/org/labkey/test/util/FileBrowserHelper.java +++ b/src/org/labkey/test/util/FileBrowserHelper.java @@ -712,7 +712,13 @@ public enum BrowserAction EMAIL_SETTINGS("envelope", "Email Preferences", "emailPreferences"), AUDIT_HISTORY("users", "Audit History", "auditLog", true), ADMIN("cog", "Admin", "customize"), - CREATE_RUN("sitemap", "Create Run", "createRun"); + CREATE_RUN("sitemap", "Create Run", "createRun"){ + @Override + public String getRequiredModule() + { + return "Provenance"; + } + }; private final String _iconName; private final String _buttonText; @@ -771,6 +777,11 @@ public Locator getButtonTextLocator() { return button().containing(_buttonText); } + + public String getRequiredModule() + { + return "Core"; + } } public enum ActionStatus{ diff --git a/src/org/labkey/test/util/StudyHelper.java b/src/org/labkey/test/util/StudyHelper.java index d0b16ffdee..51f93abe10 100644 --- a/src/org/labkey/test/util/StudyHelper.java +++ b/src/org/labkey/test/util/StudyHelper.java @@ -290,7 +290,7 @@ public void exportStudy(String folder, boolean zipFile) _test.clickButton("Export Study"); ExportFolderPage exportFolderPage = new ExportFolderPage(_test.getDriver()); - List studyObjects = Arrays.asList("Visit Map", "Cohort Settings", "QC State Settings", "Datasets: Study Dataset Definitions", "Datasets: Study Dataset Data", "Datasets: Assay Dataset Definitions", "Datasets: Assay Dataset Data", "Participant Comment Settings", "Participant Groups", "Protocol Documents"); + List studyObjects = Arrays.asList("Visit Map", "Cohort Settings", _test._containerHelper.getAllModules().contains("samplemanagement") ? "Sample Status and QC State Settings" : "QC State Settings", "Datasets: Study Dataset Definitions", "Datasets: Study Dataset Data", "Datasets: Assay Dataset Definitions", "Datasets: Assay Dataset Data", "Participant Comment Settings", "Participant Groups", "Protocol Documents"); if (isSpecimenModuleActive()) { studyObjects = new ArrayList<>(studyObjects);