From e9e1c519abea5127b914b33d3567a9627c070605 Mon Sep 17 00:00:00 2001 From: cnathe Date: Thu, 24 Sep 2026 16:30:32 -0500 Subject: [PATCH] GitHub Issue 1446: test case for cross folder delete confirmation message --- src/org/labkey/test/tests/DataClassTest.java | 44 ++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/src/org/labkey/test/tests/DataClassTest.java b/src/org/labkey/test/tests/DataClassTest.java index ef32234537..dbcf30016f 100644 --- a/src/org/labkey/test/tests/DataClassTest.java +++ b/src/org/labkey/test/tests/DataClassTest.java @@ -20,6 +20,7 @@ import org.junit.BeforeClass; import org.junit.Test; import org.junit.experimental.categories.Category; +import org.labkey.remoteapi.CommandException; import org.labkey.test.BaseWebDriverTest; import org.labkey.test.Locator; import org.labkey.test.TestFileUtils; @@ -34,11 +35,14 @@ import org.labkey.test.pages.experiment.CreateDataClassPage; import org.labkey.test.pages.query.UpdateQueryRowPage; import org.labkey.test.params.FieldDefinition; +import org.labkey.test.params.experiment.DataClassDefinition; import org.labkey.test.util.DataClassHelper; import org.labkey.test.util.DataRegionTable; import org.labkey.test.util.PortalHelper; +import org.labkey.test.util.TestDataGenerator; import java.io.File; +import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -426,6 +430,46 @@ public void testDateAndTimeFields() } + // GitHub Issue #1446 + @Test + public void testDeleteConfirmationCrossFolder() throws IOException, CommandException + { + final String folderA = "DeleteConfirmFolderA"; + final String folderB = "DeleteConfirmFolderB"; + final String pathA = getProjectName() + "/" + folderA; + final String pathB = getProjectName() + "/" + folderB; + final String markerA = "DeleteConfirmMarkerA"; + final String markerB = "DeleteConfirmMarkerB"; + final String unresolvedMsg = "1 of the selected items could not be found in this folder."; + + _containerHelper.createSubfolder(getProjectName(), folderA); + _containerHelper.createSubfolder(getProjectName(), folderB); + long rowIdA = insertDataClassRow(pathA, "DeleteConfirmClassA", markerA); + long rowIdB = insertDataClassRow(pathB, "DeleteConfirmClassB", markerB); + + log("Request delete confirmation in folder A for rows from both folders"); + beginAt(WebTestHelper.buildURL("experiment", pathA, "deleteSelectedData", Map.of("rowIds", rowIdA)) + "&rowIds=" + rowIdB); + assertTextPresent(markerA, unresolvedMsg); + assertTextNotPresent(markerB); + + log("Request delete confirmation in folder B for its own row"); + beginAt(WebTestHelper.buildURL("experiment", pathB, "deleteSelectedData", Map.of("rowIds", rowIdB))); + assertTextPresent(markerB); + assertTextNotPresent(unresolvedMsg); + } + + private long insertDataClassRow(String containerPath, String dataClassName, String rowName) throws IOException, CommandException + { + TestDataGenerator dgen = new DataClassDefinition(dataClassName).create(createDefaultConnection(), containerPath); + dgen.addCustomRow(Map.of("Name", rowName)); + Map row = dgen.insertRows(createDefaultConnection(), dgen.getRows()).getRows().getFirst(); + return row.entrySet().stream() + .filter(e -> "rowId".equalsIgnoreCase(e.getKey())) + .map(e -> ((Number) e.getValue()).longValue()) + .findFirst() + .orElseThrow(() -> new AssertionError("No RowId returned for inserted row " + rowName)); + } + private void viewRawTableMetadata(String dataClassName) { beginAt(WebTestHelper.buildURL("query", getProjectName(), "rawTableMetaData", Map.of("schemaName", "exp.data", "query.queryName", dataClassName)));