Skip to content

Commit 5a3a3b8

Browse files
Merge branch 'develop' into fb_miscSampleTypeNeedsAutomation
2 parents fcc60fa + 1e8440c commit 5a3a3b8

14 files changed

Lines changed: 147 additions & 120 deletions

src/org/labkey/test/BaseWebDriverTest.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,6 @@
8787
import org.labkey.test.util.PermissionsHelper;
8888
import org.labkey.test.util.PipelineToolsHelper;
8989
import org.labkey.test.util.ReadOnlyTest;
90-
import org.labkey.test.util.SecurityHelper;
9190
import org.labkey.test.util.SimpleHttpResponse;
9291
import org.labkey.test.util.StudyHelper;
9392
import org.labkey.test.util.TestLogger;
@@ -208,8 +207,6 @@ public abstract class BaseWebDriverTest extends LabKeySiteWrapper implements Cle
208207
public StudyHelper _studyHelper = new StudyHelper(this);
209208
public final ListHelper _listHelper;
210209
public AbstractAssayHelper _assayHelper = new APIAssayHelper(this);
211-
@Deprecated // Redundant class. Use ApiPermissionsHelper or UiPermissionsHelper
212-
public SecurityHelper _securityHelper = new SecurityHelper(this);
213210
public FileBrowserHelper _fileBrowserHelper = new FileBrowserHelper(this);
214211
@Deprecated // Use ApiPermissionsHelper unless UI testing is necessary
215212
public UIPermissionsHelper _permissionsHelper = new UIPermissionsHelper(this);

src/org/labkey/test/LabKeySiteWrapper.java

Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@
5656
import org.labkey.test.pages.core.admin.ShowAdminPage;
5757
import org.labkey.test.pages.user.UserDetailsPage;
5858
import org.labkey.test.util.APIUserHelper;
59+
import org.labkey.test.util.ApiPermissionsHelper;
5960
import org.labkey.test.util.DataRegionTable;
6061
import org.labkey.test.util.LabKeyExpectedConditions;
6162
import org.labkey.test.util.LogMethod;
@@ -772,6 +773,9 @@ else if (getDriver().getTitle().startsWith("Sign In"))
772773
// Note: leave the self-report setting unchanged
773774
customizeSitePage.save();
774775
}
776+
777+
verifySiteGroups();
778+
775779
/*
776780
Waiting for search service to boot up
777781
Issue 50601: PDF indexing is slow on first file after server startup on Windows
@@ -786,10 +790,12 @@ else if (getDriver().getTitle().startsWith("Sign In"))
786790
waitForElement(Locator.id("status-progress-bar").withText("Module startup complete"), WAIT_FOR_PAGE);
787791
clickAndWait(Locator.lkButton("Next"));
788792
Locator.lkButton("Next")
789-
.findOptionalElement(getDriver())
790-
.ifPresent(button ->
791-
doAndWaitForPageToLoad(() ->
792-
shortWait().until(LabKeyExpectedConditions.clickUntilStale(button))));
793+
.findOptionalElement(getDriver())
794+
.ifPresent(button ->
795+
doAndWaitForPageToLoad(() ->
796+
shortWait().until(LabKeyExpectedConditions.clickUntilStale(button))
797+
)
798+
);
793799
}
794800
else
795801
{
@@ -952,6 +958,23 @@ public boolean isRedirected(HttpRequest httpRequest, HttpResponse httpResponse,
952958
}
953959
}
954960

961+
@LogMethod
962+
private void verifySiteGroups()
963+
{
964+
// Simple verification of the site groups created at bootstrap time, Issue #52166
965+
ApiPermissionsHelper helper = new ApiPermissionsHelper(this);
966+
// Site groups are returned in known order: alphabetical by name, except that "Users" is replaced with
967+
// "All Site Users" after sorting takes place
968+
List<Map<String, Object>> siteGroups = helper.getSiteGroups();
969+
assertEquals(2, siteGroups.size());
970+
Map<String, Object> guests = siteGroups.get(0);
971+
assertEquals("Guests", guests.get("name"));
972+
assertEquals(-3, guests.get("id"));
973+
Map<String, Object> users = siteGroups.get(1);
974+
assertEquals("All Site Users", users.get("name"));
975+
assertEquals(-2, users.get("id"));
976+
}
977+
955978
public static final Pattern ERROR_PATTERN = Pattern.compile("^(ERROR|FATAL)", Pattern.MULTILINE);
956979

957980
public void checkErrors()
@@ -982,7 +1005,7 @@ public void checkErrors()
9821005
else if (currentError.size() == 1)
9831006
{
9841007
// Line after the ERROR usually has the exception type and error message
985-
TestLogger.error(" " + iterator.next());
1008+
TestLogger.error(" " + line);
9861009
}
9871010
else if (line.startsWith("Caused by:"))
9881011
{

src/org/labkey/test/WebTestHelper.java

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -584,13 +584,7 @@ public static Connection getRemoteApiConnection()
584584

585585
public static Connection getRemoteApiConnection(boolean includeCookiesFromPrimaryUser)
586586
{
587-
String username = PasswordUtil.getUsername();
588-
Connection connection = new Connection(getBaseURL(), username, PasswordUtil.getPassword());
589-
590-
if (includeCookiesFromPrimaryUser)
591-
addCachedCookies(connection, username);
592-
593-
return connection;
587+
return getRemoteApiConnection(PasswordUtil.getUsername(), includeCookiesFromPrimaryUser);
594588
}
595589

596590
public static Connection getRemoteApiConnection(String username, boolean includeCookies)

src/org/labkey/test/components/bootstrap/ModalDialog.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@
2626
import org.openqa.selenium.support.ui.WebDriverWait;
2727

2828
import java.time.Duration;
29+
import java.util.regex.Matcher;
30+
import java.util.regex.Pattern;
2931

3032
import static org.labkey.test.WebDriverWrapper.WAIT_FOR_JAVASCRIPT;
3133

@@ -84,6 +86,25 @@ public String getBodyText()
8486
return elementCache().body.getText();
8587
}
8688

89+
public Integer getCountFromTitle()
90+
{
91+
Pattern pattern = Pattern.compile("(\\d+)");
92+
Matcher matcher = pattern.matcher(getTitle());
93+
if (matcher.find())
94+
{
95+
try
96+
{
97+
return Integer.parseInt(matcher.group(1).trim());
98+
}
99+
catch (NumberFormatException e)
100+
{
101+
// If we can't parse the number, return null
102+
return null;
103+
}
104+
}
105+
return null;
106+
}
107+
87108
public void close()
88109
{
89110
elementCache().closeButton.click();

src/org/labkey/test/components/ui/DeleteConfirmationDialog.java

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,27 @@
11
package org.labkey.test.components.ui;
22

33
import org.jetbrains.annotations.NotNull;
4+
import org.labkey.remoteapi.CommandException;
45
import org.labkey.test.BootstrapLocators;
56
import org.labkey.test.Locator;
7+
import org.labkey.test.TestProperties;
68
import org.labkey.test.WebDriverWrapper;
9+
import org.labkey.test.WebTestHelper;
710
import org.labkey.test.components.UpdatingComponent;
811
import org.labkey.test.components.bootstrap.ModalDialog;
912
import org.labkey.test.components.html.Input;
13+
import org.labkey.test.util.AuditLogHelper;
1014
import org.openqa.selenium.WebElement;
1115
import org.openqa.selenium.support.ui.ExpectedConditions;
1216

17+
import java.io.IOException;
1318
import java.util.function.Function;
1419
import java.util.function.Supplier;
1520

1621
public class DeleteConfirmationDialog<ConfirmPage extends WebDriverWrapper> extends ModalDialog
1722
{
1823
private final Function<Runnable, ConfirmPage> _confirmationSynchronizationFunction;
24+
private boolean skipAuditEventCheck = false;
1925

2026
public DeleteConfirmationDialog(@NotNull WebDriverWrapper sourcePage, Supplier<ConfirmPage> confirmPageSupplier)
2127
{
@@ -68,6 +74,12 @@ protected void waitForReady()
6874
"The delete confirmation dialog did not become ready.", 1_000);
6975
}
7076

77+
public DeleteConfirmationDialog<ConfirmPage> setSkipAuditEventCheck(boolean skipAuditEventCheck)
78+
{
79+
this.skipAuditEventCheck = skipAuditEventCheck;
80+
return this;
81+
}
82+
7183
public void cancelDelete()
7284
{
7385
this.dismiss("Cancel");
@@ -80,7 +92,33 @@ public ConfirmPage confirmDelete()
8092

8193
public ConfirmPage confirmDelete(Integer waitSeconds)
8294
{
83-
return _confirmationSynchronizationFunction.apply(() -> this.dismiss("Yes, Delete", waitSeconds));
95+
Integer count = getCountFromTitle();
96+
AuditLogHelper.AuditEvent auditEventName = getAuditEvent();
97+
98+
var confirmPage = _confirmationSynchronizationFunction.apply(() -> this.dismiss("Yes, Delete", waitSeconds));
99+
100+
if (!skipAuditEventCheck && count != null && auditEventName != null && !TestProperties.isTrialServer())
101+
verifyAuditEvents(getWrapper(), getWrapper().getCurrentProject(), auditEventName, count);
102+
103+
return confirmPage;
104+
}
105+
106+
public AuditLogHelper.AuditEvent getAuditEvent()
107+
{
108+
return new AuditLogHelper(getWrapper()).getAuditEventNameFromURL();
109+
}
110+
111+
public static void verifyAuditEvents(WebDriverWrapper wrapper, String containerPath, AuditLogHelper.AuditEvent auditEventName, int entityCount)
112+
{
113+
try
114+
{
115+
AuditLogHelper auditLogHelper = new AuditLogHelper(wrapper, () -> WebTestHelper.getRemoteApiConnection(false));
116+
auditLogHelper.checkAuditEventDiffCountForLastTransaction(containerPath, auditEventName, 0, entityCount);
117+
}
118+
catch (CommandException | IOException e)
119+
{
120+
throw new RuntimeException(e);
121+
}
84122
}
85123

86124
public Boolean isDeleteEnabled()

src/org/labkey/test/components/ui/entities/EntityBulkUpdateDialog.java

Lines changed: 1 addition & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -350,25 +350,6 @@ public EntityBulkUpdateDialog clearActionComment()
350350
return this;
351351
}
352352

353-
public Integer getCountFromTitle()
354-
{
355-
// expecting title to be like "Update N items"
356-
String title = getTitle();
357-
String[] parts = title.split(" ");
358-
if (parts.length > 1)
359-
{
360-
try
361-
{
362-
return Integer.parseInt(parts[1]);
363-
}
364-
catch (NumberFormatException nfe)
365-
{
366-
return null;
367-
}
368-
}
369-
return null;
370-
}
371-
372353
// dismiss the dialog
373354

374355
public String clickUpdateExpectingError()
@@ -395,7 +376,7 @@ public void clickUpdate(boolean skipAuditEventCheck)
395376

396377
// check for the expected number of Data Changes in the latest audit event records
397378
AuditLogHelper auditLogHelper = new AuditLogHelper(getWrapper(), () -> WebTestHelper.getRemoteApiConnection(false));
398-
String auditEventName = auditLogHelper.getAuditEventNameFromURL();
379+
AuditLogHelper.AuditEvent auditEventName = auditLogHelper.getAuditEventNameFromURL();
399380
if (!skipAuditEventCheck && auditEventName != null && !TestProperties.isTrialServer())
400381
{
401382
try

src/org/labkey/test/components/ui/grids/DetailTableEdit.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -511,7 +511,7 @@ public DetailDataPanel clickSave(boolean skipAuditEventCheck)
511511

512512
// check for the expected number of Data Changes in the latest audit event records
513513
AuditLogHelper auditLogHelper = new AuditLogHelper(getWrapper(), () -> WebTestHelper.getRemoteApiConnection(false));
514-
String auditEventName = auditLogHelper.getAuditEventNameFromURL();
514+
AuditLogHelper.AuditEvent auditEventName = auditLogHelper.getAuditEventNameFromURL();
515515
if (!skipAuditEventCheck && auditEventName != null && !TestProperties.isTrialServer())
516516
{
517517
try

src/org/labkey/test/tests/AbstractAssayTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -291,7 +291,7 @@ protected void setSubfolderSecurity(String project, String subfolder, String gro
291291
_permissionsHelper.removePermission(group, "Reader");
292292
}
293293
else
294-
_securityHelper.setProjectPerm(group, perms);
294+
_permissionsHelper.setPermissions(group, perms);
295295
}
296296

297297
/**

src/org/labkey/test/tests/GroupTest.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -129,9 +129,9 @@ public void testSteps() throws IOException, CommandException
129129
_permissionsHelper.enterPermissionsUI();
130130
waitForText("Author");
131131

132-
_securityHelper.setSiteGroupPermissions(COMPOUND_GROUP, "Author");
133-
_securityHelper.setSiteGroupPermissions(COMPOUND_GROUP, "Reader");
134-
_securityHelper.setSiteGroupPermissions(SIMPLE_GROUP, "Editor");
132+
_permissionsHelper.setSiteGroupPermissions(COMPOUND_GROUP, "Author");
133+
_permissionsHelper.setSiteGroupPermissions(COMPOUND_GROUP, "Reader");
134+
_permissionsHelper.setSiteGroupPermissions(SIMPLE_GROUP, "Editor");
135135
clickButton("Save and Finish");
136136
assertUserCanSeeProject(TEST_USERS_FOR_GROUP[0], getProjectName());
137137
//can't add built in group to regular group
@@ -141,7 +141,7 @@ public void testSteps() throws IOException, CommandException
141141
clickProject(getProjectName());
142142
_permissionsHelper.enterPermissionsUI();
143143
waitForText("Author");
144-
_securityHelper.setSiteGroupPermissions("All Site Users", "Author");
144+
_permissionsHelper.setSiteGroupPermissions("All Site Users", "Author");
145145
permissionsReportTest();
146146

147147
// Ensure that deleting from the group's page works too. Issue 52614
@@ -205,7 +205,7 @@ private void verifyImpersonate()
205205
WikiHelper wikiHelper = new WikiHelper(this);
206206

207207
//set simple group as editor
208-
_securityHelper.setSiteGroupPermissions(SIMPLE_GROUP, "Editor");
208+
_permissionsHelper.setSiteGroupPermissions(SIMPLE_GROUP, "Editor");
209209

210210
//impersonate user 1, make several wiki edits
211211
impersonate(TEST_USERS_FOR_GROUP[0]);

src/org/labkey/test/tests/WebpartPermissionsTest.java

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@
2222
import org.labkey.test.TestFileUtils;
2323
import org.labkey.test.TestTimeoutException;
2424
import org.labkey.test.categories.Daily;
25+
import org.labkey.test.util.ApiPermissionsHelper;
26+
import org.labkey.test.util.PermissionsHelper;
2527
import org.labkey.test.util.PortalHelper;
2628

2729
import java.util.Arrays;
@@ -72,8 +74,6 @@ private void folderDelete()
7274
fail("Unable to delete dummy project");
7375
}
7476
assertTextNotPresent("Flow Script");
75-
76-
7777
}
7878

7979
private void changeWebpartPermAndVerify()
@@ -102,7 +102,6 @@ private void changeWebpartPermToCurrentFolderAndVerify ()
102102
goToProjectHome();
103103
assertTextPresent(changedWebPart);
104104
stopImpersonating();
105-
106105
}
107106

108107
private void verifyCorrectWebpartsVisible()
@@ -126,10 +125,11 @@ private void verifyReadEditUpdate(String[] webparts)
126125

127126
private void setPermissionsOnDummyFolder()
128127
{
129-
clickProject(DUMMY_PROJECT_NAME);
130-
_securityHelper.setProjectPerm(users[0], DUMMY_PROJECT_NAME, "Reader");
131-
_securityHelper.setProjectPerm(users[1], "Editor");
132-
_securityHelper.setProjectPerm(users[2], "Project Administrator");
128+
// Target permissions operations at non-default project
129+
PermissionsHelper helper = new ApiPermissionsHelper(DUMMY_PROJECT_NAME);
130+
helper.setUserPermissions(users[0], "Reader");
131+
helper.setUserPermissions(users[1], "Editor");
132+
helper.setUserPermissions(users[2], "Project Administrator");
133133
}
134134

135135
private void verifyNoWebpartsVisible()
@@ -146,16 +146,16 @@ private void verifyNoWebpartsVisible()
146146

147147
private void setUpFocusFolder()
148148
{
149-
/**
150-
* this folder has three parts, with permissions set (dependent on DUMMY_PROJECT
151-
* Flow Experiment managagement = Administrate
152-
* Flow Analyses = Edit
153-
* Flow Script = Read
149+
/*
150+
this folder has three parts, with permissions set (dependent on DUMMY_PROJECT
151+
Flow Experiment management = Administrate
152+
Flow Analyses = Edit
153+
Flow Script = Read
154154
*/
155155
_containerHelper.createProject(getProjectName(), "Collaboration");
156156
importFolderFromZip(TestFileUtils.getSampleData("webpartPerm/webPerms.folder.zip"));
157157
//set all users to Reader so they have access to the folder
158-
_securityHelper.setSiteGroupPermissions("All Site Users", "Reader");
158+
_permissionsHelper.setSiteGroupPermissions("All Site Users", "Reader");
159159
}
160160

161161
//This folder contains no data, but will create users and set them with specific permissions

0 commit comments

Comments
 (0)