From 5c498fcc12c983f0be2a0d68a828b40477c19b5f Mon Sep 17 00:00:00 2001 From: labkey-susanh Date: Tue, 16 Jun 2026 16:57:16 -0700 Subject: [PATCH 1/4] Issue #980: Deprecate the UI for deriving samples in LKS --- src/org/labkey/test/tests/SampleTypeLimitsTest.java | 2 ++ src/org/labkey/test/tests/SampleTypeLineageTest.java | 6 +++++- src/org/labkey/test/tests/SampleTypeLinkToStudyTest.java | 3 +++ src/org/labkey/test/tests/SampleTypeNameExpressionTest.java | 3 ++- 4 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/org/labkey/test/tests/SampleTypeLimitsTest.java b/src/org/labkey/test/tests/SampleTypeLimitsTest.java index c9cdd5a0c4..81e8e1da0e 100644 --- a/src/org/labkey/test/tests/SampleTypeLimitsTest.java +++ b/src/org/labkey/test/tests/SampleTypeLimitsTest.java @@ -36,6 +36,7 @@ import org.labkey.test.params.list.ListDefinition; import org.labkey.test.params.list.VarListDefinition; import org.labkey.test.util.DataRegionTable; +import org.labkey.test.util.OptionalFeatureHelper; import org.labkey.test.util.PortalHelper; import org.labkey.test.util.SampleTypeHelper; import org.labkey.test.util.TestDataGenerator; @@ -196,6 +197,7 @@ private void insertSampleTypeRow(String regionName, String rowValue) public void testDeriveSamplesLookupFields() throws IOException, CommandException { goToProjectHome(); + OptionalFeatureHelper.setOptionalFeature(createDefaultConnection(), "deriveSamplesNotInApp", true); log("Create sample type with lookup field to " + SAMPLE_TYPE_NAME); String sampleTypeName = "SampleTypeWithLookup"; diff --git a/src/org/labkey/test/tests/SampleTypeLineageTest.java b/src/org/labkey/test/tests/SampleTypeLineageTest.java index d64c912d99..b792c2ed09 100644 --- a/src/org/labkey/test/tests/SampleTypeLineageTest.java +++ b/src/org/labkey/test/tests/SampleTypeLineageTest.java @@ -38,6 +38,7 @@ import org.labkey.test.params.experiment.DataClassDefinition; import org.labkey.test.params.experiment.SampleTypeDefinition; import org.labkey.test.util.DataRegionTable; +import org.labkey.test.util.OptionalFeatureHelper; import org.labkey.test.util.PortalHelper; import org.labkey.test.util.SampleTypeHelper; import org.labkey.test.util.TestDataGenerator; @@ -86,7 +87,7 @@ public static void setupProject() { SampleTypeLineageTest init = getCurrentTest(); - // Comment out this line (after you run once) it will make iterating on tests much easier. + // Comment out this line (after you run once) it will make iterating on tests much easier. init.doSetup(); } @@ -101,6 +102,7 @@ private void doSetup() portalHelper.addWebPart("Sample Types"); portalHelper.exitAdminMode(); + OptionalFeatureHelper.setOptionalFeature(createDefaultConnection(), "deriveSamplesNotInApp", true); } @Override @@ -604,6 +606,8 @@ public void testDeriveSampleByImport() @Test public void testDeriveSampleByUI() throws CommandException, IOException { + OptionalFeatureHelper.setOptionalFeature(createDefaultConnection(), "deriveSamplesNotInApp", true); + String sampleTypeName= "LineageUI_01"; String namePrefix = "SampleUI-"; int newSampleIndex = 6; diff --git a/src/org/labkey/test/tests/SampleTypeLinkToStudyTest.java b/src/org/labkey/test/tests/SampleTypeLinkToStudyTest.java index a652b4d807..bc87ececdc 100644 --- a/src/org/labkey/test/tests/SampleTypeLinkToStudyTest.java +++ b/src/org/labkey/test/tests/SampleTypeLinkToStudyTest.java @@ -40,6 +40,7 @@ import org.labkey.test.params.FieldDefinition; import org.labkey.test.params.experiment.SampleTypeDefinition; import org.labkey.test.util.DataRegionTable; +import org.labkey.test.util.OptionalFeatureHelper; import org.labkey.test.util.PortalHelper; import org.labkey.test.util.SampleTypeHelper; import org.labkey.test.util.StudyHelper; @@ -105,6 +106,8 @@ private void doSetup() new PortalHelper(getDriver()).addBodyWebPart("Datasets"); createSampleTypes(); + OptionalFeatureHelper.setOptionalFeature(createDefaultConnection(), "deriveSamplesNotInApp", true); + } private void createSampleTypes() diff --git a/src/org/labkey/test/tests/SampleTypeNameExpressionTest.java b/src/org/labkey/test/tests/SampleTypeNameExpressionTest.java index 25af8ca18e..d191fed745 100644 --- a/src/org/labkey/test/tests/SampleTypeNameExpressionTest.java +++ b/src/org/labkey/test/tests/SampleTypeNameExpressionTest.java @@ -39,6 +39,7 @@ import org.labkey.test.util.AuditLogHelper; import org.labkey.test.util.DataRegionTable; import org.labkey.test.util.EscapeUtil; +import org.labkey.test.util.OptionalFeatureHelper; import org.labkey.test.util.PortalHelper; import org.labkey.test.util.SampleTypeHelper; import org.labkey.test.util.TestDataGenerator; @@ -196,7 +197,7 @@ private void doSetup() throws IOException, CommandException // Just want to get an updated view of the sample types. refresh(); - + OptionalFeatureHelper.setOptionalFeature(createDefaultConnection(), "deriveSamplesNotInApp", true); } @Before From 7c9d000565f8d90caa41d146b64e0896c768a9b8 Mon Sep 17 00:00:00 2001 From: labkey-susanh Date: Wed, 17 Jun 2026 08:38:55 -0700 Subject: [PATCH 2/4] Stash and restore previous deriveSamplesNotInApp setting --- src/org/labkey/test/tests/SampleTypeLimitsTest.java | 11 ++++++++++- src/org/labkey/test/tests/SampleTypeLineageTest.java | 11 +++-------- .../labkey/test/tests/SampleTypeLinkToStudyTest.java | 8 +++++++- .../test/tests/SampleTypeNameExpressionTest.java | 12 +++++++++++- 4 files changed, 31 insertions(+), 11 deletions(-) diff --git a/src/org/labkey/test/tests/SampleTypeLimitsTest.java b/src/org/labkey/test/tests/SampleTypeLimitsTest.java index 81e8e1da0e..0e5c9acf08 100644 --- a/src/org/labkey/test/tests/SampleTypeLimitsTest.java +++ b/src/org/labkey/test/tests/SampleTypeLimitsTest.java @@ -62,6 +62,7 @@ public class SampleTypeLimitsTest extends BaseWebDriverTest { private static final String PROJECT_NAME = "SampleTypeLimitsTest"; private static final String SAMPLE_TYPE_NAME = "10000Samples"; // Testing with 10,000 samples because as per the product the lookup is converted into text field only when the samples exceed 10,000 samples + private Boolean previousDeriveSamplesSetting = null; @Override public List getAssociatedModules() @@ -118,6 +119,14 @@ private void doSetup() } } + @Override + protected void doCleanup(boolean afterTest) + { + super.doCleanup(afterTest); + if (previousDeriveSamplesSetting != null) + OptionalFeatureHelper.setOptionalFeature(createDefaultConnection(), "deriveSamplesNotInApp", previousDeriveSamplesSetting); + } + @Test public void testStringLookupFields() throws IOException, CommandException { @@ -197,7 +206,7 @@ private void insertSampleTypeRow(String regionName, String rowValue) public void testDeriveSamplesLookupFields() throws IOException, CommandException { goToProjectHome(); - OptionalFeatureHelper.setOptionalFeature(createDefaultConnection(), "deriveSamplesNotInApp", true); + previousDeriveSamplesSetting = OptionalFeatureHelper.setOptionalFeature(createDefaultConnection(), "deriveSamplesNotInApp", true); log("Create sample type with lookup field to " + SAMPLE_TYPE_NAME); String sampleTypeName = "SampleTypeWithLookup"; diff --git a/src/org/labkey/test/tests/SampleTypeLineageTest.java b/src/org/labkey/test/tests/SampleTypeLineageTest.java index b792c2ed09..4006e5dd31 100644 --- a/src/org/labkey/test/tests/SampleTypeLineageTest.java +++ b/src/org/labkey/test/tests/SampleTypeLineageTest.java @@ -70,6 +70,8 @@ public class SampleTypeLineageTest extends BaseWebDriverTest private static final String PROJECT_NAME = "SampleType_Lineage_Test_Project"; private static final String SUB_FOLDER_NAME = "SubFolder_A"; + private Boolean previousDeriveSamplesSetting = null; + @Override public List getAssociatedModules() { @@ -87,7 +89,6 @@ public static void setupProject() { SampleTypeLineageTest init = getCurrentTest(); - // Comment out this line (after you run once) it will make iterating on tests much easier. init.doSetup(); } @@ -102,17 +103,13 @@ private void doSetup() portalHelper.addWebPart("Sample Types"); portalHelper.exitAdminMode(); - OptionalFeatureHelper.setOptionalFeature(createDefaultConnection(), "deriveSamplesNotInApp", true); + previousDeriveSamplesSetting = OptionalFeatureHelper.setOptionalFeature(createDefaultConnection(), "deriveSamplesNotInApp", true); } @Override protected void doCleanup(boolean afterTest) throws TestTimeoutException { super.doCleanup(afterTest); - - // If you are debugging tests change this function to do nothing. - // It can make re-running faster but you need to valid the integrity of the test data on your own. -// log("Do nothing."); } /** @@ -606,8 +603,6 @@ public void testDeriveSampleByImport() @Test public void testDeriveSampleByUI() throws CommandException, IOException { - OptionalFeatureHelper.setOptionalFeature(createDefaultConnection(), "deriveSamplesNotInApp", true); - String sampleTypeName= "LineageUI_01"; String namePrefix = "SampleUI-"; int newSampleIndex = 6; diff --git a/src/org/labkey/test/tests/SampleTypeLinkToStudyTest.java b/src/org/labkey/test/tests/SampleTypeLinkToStudyTest.java index bc87ececdc..85484ad5cf 100644 --- a/src/org/labkey/test/tests/SampleTypeLinkToStudyTest.java +++ b/src/org/labkey/test/tests/SampleTypeLinkToStudyTest.java @@ -74,6 +74,8 @@ public class SampleTypeLinkToStudyTest extends BaseWebDriverTest protected DateTimeFormatter _dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); protected String now = LocalDateTime.now().format(_dateTimeFormatter); + private Boolean previousDeriveSamplesSetting = null; + @BeforeClass public static void setupProject() throws IOException @@ -106,10 +108,12 @@ private void doSetup() new PortalHelper(getDriver()).addBodyWebPart("Datasets"); createSampleTypes(); - OptionalFeatureHelper.setOptionalFeature(createDefaultConnection(), "deriveSamplesNotInApp", true); + previousDeriveSamplesSetting = OptionalFeatureHelper.setOptionalFeature(createDefaultConnection(), "deriveSamplesNotInApp", true); } + + private void createSampleTypes() { SampleTypeHelper sampleHelper = new SampleTypeHelper(this); @@ -884,5 +888,7 @@ protected void doCleanup(boolean afterTest) throws TestTimeoutException _containerHelper.deleteProject(DATE_BASED_STUDY, false); _containerHelper.deleteProject(SAMPLE_TYPE_PROJECT + " Study 1", false); _containerHelper.deleteProject(SAMPLE_TYPE_PROJECT + " Study 2", false); + if (previousDeriveSamplesSetting != null) + OptionalFeatureHelper.setOptionalFeature(createDefaultConnection(), "deriveSamplesNotInApp", previousDeriveSamplesSetting); } } diff --git a/src/org/labkey/test/tests/SampleTypeNameExpressionTest.java b/src/org/labkey/test/tests/SampleTypeNameExpressionTest.java index d191fed745..025513e212 100644 --- a/src/org/labkey/test/tests/SampleTypeNameExpressionTest.java +++ b/src/org/labkey/test/tests/SampleTypeNameExpressionTest.java @@ -113,6 +113,8 @@ public class SampleTypeNameExpressionTest extends BaseWebDriverTest protected final AuditLogHelper _auditLogHelper = new AuditLogHelper(this); + private Boolean previousDeriveSamplesSetting = null; + @Override public List getAssociatedModules() { @@ -133,6 +135,14 @@ public static void setupProject() throws IOException, CommandException test.doSetup(); } + @Override + protected void doCleanup(boolean afterTest) + { + super.doCleanup(afterTest); + if (previousDeriveSamplesSetting != null) + OptionalFeatureHelper.setOptionalFeature(createDefaultConnection(), "deriveSamplesNotInApp", previousDeriveSamplesSetting); + } + private void addDataRow(TestDataGenerator dataGenerator, String name, int intVal) { Map sampleData = new HashMap<>(); @@ -197,7 +207,7 @@ private void doSetup() throws IOException, CommandException // Just want to get an updated view of the sample types. refresh(); - OptionalFeatureHelper.setOptionalFeature(createDefaultConnection(), "deriveSamplesNotInApp", true); + previousDeriveSamplesSetting = OptionalFeatureHelper.setOptionalFeature(createDefaultConnection(), "deriveSamplesNotInApp", true); } @Before From b9732c39ccd27f14a3ff9d388d9389ac53a3c5c0 Mon Sep 17 00:00:00 2001 From: labkey-susanh Date: Wed, 17 Jun 2026 08:46:08 -0700 Subject: [PATCH 3/4] Add missing reset of setting --- src/org/labkey/test/tests/SampleTypeLineageTest.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/org/labkey/test/tests/SampleTypeLineageTest.java b/src/org/labkey/test/tests/SampleTypeLineageTest.java index 4006e5dd31..c974630ba0 100644 --- a/src/org/labkey/test/tests/SampleTypeLineageTest.java +++ b/src/org/labkey/test/tests/SampleTypeLineageTest.java @@ -110,6 +110,8 @@ private void doSetup() protected void doCleanup(boolean afterTest) throws TestTimeoutException { super.doCleanup(afterTest); + if (previousDeriveSamplesSetting != null) + OptionalFeatureHelper.setOptionalFeature(createDefaultConnection(), "deriveSamplesNotInApp", previousDeriveSamplesSetting); } /** From 0a5c462abfcc481732ef34a528d8c169d2351c85 Mon Sep 17 00:00:00 2001 From: labkey-susanh Date: Wed, 17 Jun 2026 12:55:41 -0700 Subject: [PATCH 4/4] Use resetOptionalFeature --- src/org/labkey/test/tests/SampleTypeLimitsTest.java | 6 ++---- src/org/labkey/test/tests/SampleTypeLineageTest.java | 8 +++----- src/org/labkey/test/tests/SampleTypeLinkToStudyTest.java | 7 ++----- .../labkey/test/tests/SampleTypeNameExpressionTest.java | 7 ++----- 4 files changed, 9 insertions(+), 19 deletions(-) diff --git a/src/org/labkey/test/tests/SampleTypeLimitsTest.java b/src/org/labkey/test/tests/SampleTypeLimitsTest.java index 0e5c9acf08..4933febe16 100644 --- a/src/org/labkey/test/tests/SampleTypeLimitsTest.java +++ b/src/org/labkey/test/tests/SampleTypeLimitsTest.java @@ -62,7 +62,6 @@ public class SampleTypeLimitsTest extends BaseWebDriverTest { private static final String PROJECT_NAME = "SampleTypeLimitsTest"; private static final String SAMPLE_TYPE_NAME = "10000Samples"; // Testing with 10,000 samples because as per the product the lookup is converted into text field only when the samples exceed 10,000 samples - private Boolean previousDeriveSamplesSetting = null; @Override public List getAssociatedModules() @@ -123,8 +122,7 @@ private void doSetup() protected void doCleanup(boolean afterTest) { super.doCleanup(afterTest); - if (previousDeriveSamplesSetting != null) - OptionalFeatureHelper.setOptionalFeature(createDefaultConnection(), "deriveSamplesNotInApp", previousDeriveSamplesSetting); + OptionalFeatureHelper.resetOptionalFeature(createDefaultConnection(), "deriveSamplesNotInApp"); } @Test @@ -206,7 +204,7 @@ private void insertSampleTypeRow(String regionName, String rowValue) public void testDeriveSamplesLookupFields() throws IOException, CommandException { goToProjectHome(); - previousDeriveSamplesSetting = OptionalFeatureHelper.setOptionalFeature(createDefaultConnection(), "deriveSamplesNotInApp", true); + OptionalFeatureHelper.setOptionalFeature(createDefaultConnection(), "deriveSamplesNotInApp", true); log("Create sample type with lookup field to " + SAMPLE_TYPE_NAME); String sampleTypeName = "SampleTypeWithLookup"; diff --git a/src/org/labkey/test/tests/SampleTypeLineageTest.java b/src/org/labkey/test/tests/SampleTypeLineageTest.java index c974630ba0..0858a0f9c1 100644 --- a/src/org/labkey/test/tests/SampleTypeLineageTest.java +++ b/src/org/labkey/test/tests/SampleTypeLineageTest.java @@ -70,8 +70,6 @@ public class SampleTypeLineageTest extends BaseWebDriverTest private static final String PROJECT_NAME = "SampleType_Lineage_Test_Project"; private static final String SUB_FOLDER_NAME = "SubFolder_A"; - private Boolean previousDeriveSamplesSetting = null; - @Override public List getAssociatedModules() { @@ -103,15 +101,15 @@ private void doSetup() portalHelper.addWebPart("Sample Types"); portalHelper.exitAdminMode(); - previousDeriveSamplesSetting = OptionalFeatureHelper.setOptionalFeature(createDefaultConnection(), "deriveSamplesNotInApp", true); + OptionalFeatureHelper.setOptionalFeature(createDefaultConnection(), "deriveSamplesNotInApp", true); } @Override protected void doCleanup(boolean afterTest) throws TestTimeoutException { super.doCleanup(afterTest); - if (previousDeriveSamplesSetting != null) - OptionalFeatureHelper.setOptionalFeature(createDefaultConnection(), "deriveSamplesNotInApp", previousDeriveSamplesSetting); + + OptionalFeatureHelper.resetOptionalFeature(createDefaultConnection(), "deriveSamplesNotInApp"); } /** diff --git a/src/org/labkey/test/tests/SampleTypeLinkToStudyTest.java b/src/org/labkey/test/tests/SampleTypeLinkToStudyTest.java index 85484ad5cf..f35c7089f3 100644 --- a/src/org/labkey/test/tests/SampleTypeLinkToStudyTest.java +++ b/src/org/labkey/test/tests/SampleTypeLinkToStudyTest.java @@ -74,8 +74,6 @@ public class SampleTypeLinkToStudyTest extends BaseWebDriverTest protected DateTimeFormatter _dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); protected String now = LocalDateTime.now().format(_dateTimeFormatter); - private Boolean previousDeriveSamplesSetting = null; - @BeforeClass public static void setupProject() throws IOException @@ -108,7 +106,7 @@ private void doSetup() new PortalHelper(getDriver()).addBodyWebPart("Datasets"); createSampleTypes(); - previousDeriveSamplesSetting = OptionalFeatureHelper.setOptionalFeature(createDefaultConnection(), "deriveSamplesNotInApp", true); + OptionalFeatureHelper.setOptionalFeature(createDefaultConnection(), "deriveSamplesNotInApp", true); } @@ -888,7 +886,6 @@ protected void doCleanup(boolean afterTest) throws TestTimeoutException _containerHelper.deleteProject(DATE_BASED_STUDY, false); _containerHelper.deleteProject(SAMPLE_TYPE_PROJECT + " Study 1", false); _containerHelper.deleteProject(SAMPLE_TYPE_PROJECT + " Study 2", false); - if (previousDeriveSamplesSetting != null) - OptionalFeatureHelper.setOptionalFeature(createDefaultConnection(), "deriveSamplesNotInApp", previousDeriveSamplesSetting); + OptionalFeatureHelper.resetOptionalFeature(createDefaultConnection(), "deriveSamplesNotInApp"); } } diff --git a/src/org/labkey/test/tests/SampleTypeNameExpressionTest.java b/src/org/labkey/test/tests/SampleTypeNameExpressionTest.java index 025513e212..7b3ab760d0 100644 --- a/src/org/labkey/test/tests/SampleTypeNameExpressionTest.java +++ b/src/org/labkey/test/tests/SampleTypeNameExpressionTest.java @@ -113,8 +113,6 @@ public class SampleTypeNameExpressionTest extends BaseWebDriverTest protected final AuditLogHelper _auditLogHelper = new AuditLogHelper(this); - private Boolean previousDeriveSamplesSetting = null; - @Override public List getAssociatedModules() { @@ -139,8 +137,7 @@ public static void setupProject() throws IOException, CommandException protected void doCleanup(boolean afterTest) { super.doCleanup(afterTest); - if (previousDeriveSamplesSetting != null) - OptionalFeatureHelper.setOptionalFeature(createDefaultConnection(), "deriveSamplesNotInApp", previousDeriveSamplesSetting); + OptionalFeatureHelper.resetOptionalFeature(createDefaultConnection(), "deriveSamplesNotInApp"); } private void addDataRow(TestDataGenerator dataGenerator, String name, int intVal) @@ -207,7 +204,7 @@ private void doSetup() throws IOException, CommandException // Just want to get an updated view of the sample types. refresh(); - previousDeriveSamplesSetting = OptionalFeatureHelper.setOptionalFeature(createDefaultConnection(), "deriveSamplesNotInApp", true); + OptionalFeatureHelper.setOptionalFeature(createDefaultConnection(), "deriveSamplesNotInApp", true); } @Before