From 0296d91a123f86bcfaa1313aa703431715ee697f Mon Sep 17 00:00:00 2001 From: XingY Date: Mon, 17 Aug 2026 13:10:43 -0700 Subject: [PATCH 1/2] GitHub Issue 1474: block reserved fields to be used as import alias --- .../test/tests/SampleTypeParentColumnTest.java | 16 ++++++++++++++++ src/org/labkey/test/tests/SampleTypeTest.java | 12 ++++++++++++ 2 files changed, 28 insertions(+) diff --git a/src/org/labkey/test/tests/SampleTypeParentColumnTest.java b/src/org/labkey/test/tests/SampleTypeParentColumnTest.java index 402129f106..87cf6b5b47 100644 --- a/src/org/labkey/test/tests/SampleTypeParentColumnTest.java +++ b/src/org/labkey/test/tests/SampleTypeParentColumnTest.java @@ -782,6 +782,22 @@ public void testAliasNameConflictsWithFieldName() assertThat("Error message", String.join("\n", errors), CoreMatchers.containsString(errorMsgExpectedTxt)); updatePage.clickCancel(); + + // GH Issue 1474: import aliases must not collide with a reserved field name + clickFolder(SUB_FOLDER_NAME); + sampleHelper.goToSampleType(SAMPLE_TYPE_NAME); + log("Check that an import alias cannot collide with a reserved field name."); + for (String reservedName : Arrays.asList("Folder", "Container", "genId", "CpasType", "FreezeThawCount")) + { + waitAndClickAndWait(Locator.lkButton("Edit Type")); + updatePage = new UpdateSampleTypePage(getDriver()); + updatePage.getFieldsPanel().getField("DupeAliasCheck").setImportAliases(reservedName); + errors = updatePage.clickSaveExpectingErrors(); + errorMsgExpectedTxt = "Import alias '" + reservedName + "' on field 'DupeAliasCheck' conflicts with a reserved field name."; + assertThat("Error message for reserved import alias '" + reservedName + "'", + String.join("\n", errors), CoreMatchers.containsString(errorMsgExpectedTxt)); + updatePage.clickCancel(); + } } @Test diff --git a/src/org/labkey/test/tests/SampleTypeTest.java b/src/org/labkey/test/tests/SampleTypeTest.java index 79f6264e96..956932ba6d 100644 --- a/src/org/labkey/test/tests/SampleTypeTest.java +++ b/src/org/labkey/test/tests/SampleTypeTest.java @@ -351,6 +351,18 @@ public void testOverlappingAliases() containsString("Import alias '" + fieldTwo.toLowerCase() + "' on field '" + fieldOne + "' conflicts with a field name.")); checker().screenShotIfNewError("importAliasConflictsWithFieldNameIgnoringCase"); + // GH Issue 1474: import aliases must not collide with a reserved field name + log("Verify an import alias cannot collide with a reserved field name. GH Issue 1474"); + for (String reservedName : Arrays.asList("Folder", "Container", "genId", "CpasType", "FreezeThawCount")) + { + createPage = new CreateSampleTypePage(this.getDriver()); + fieldsPanel.getField(fieldOne).setImportAliases(reservedName); + checker().verifyThat("Expected an error when an import alias matches reserved field name '" + reservedName + "'", + String.join("\n", createPage.clickSaveExpectingErrors()), + containsString("Import alias '" + reservedName + "' on field '" + fieldOne + "' conflicts with a reserved field name.")); + checker().screenShotIfNewError("importAliasConflictsWithReservedName_" + reservedName); + } + log("An alias that repeats its own field's name is redundant but not ambiguous, so it should be allowed."); fieldsPanel.getField(fieldOne).setImportAliases(fieldOne); createPage.clickSave(); From 27dbe481125ef3361864499b7a28e75597f8cb49 Mon Sep 17 00:00:00 2001 From: XingY Date: Mon, 17 Aug 2026 18:07:32 -0700 Subject: [PATCH 2/2] add test --- src/org/labkey/test/tests/DataClassTest.java | 15 +++++++++++++++ .../test/tests/SampleTypeParentColumnTest.java | 7 +++---- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/src/org/labkey/test/tests/DataClassTest.java b/src/org/labkey/test/tests/DataClassTest.java index 0f0a6979ce..91b905ab65 100644 --- a/src/org/labkey/test/tests/DataClassTest.java +++ b/src/org/labkey/test/tests/DataClassTest.java @@ -16,6 +16,7 @@ package org.labkey.test.tests; +import org.hamcrest.CoreMatchers; import org.junit.BeforeClass; import org.junit.Test; import org.junit.experimental.categories.Category; @@ -26,6 +27,7 @@ import org.labkey.test.categories.Daily; import org.labkey.test.components.domain.AdvancedSettingsDialog; import org.labkey.test.components.domain.BaseDomainDesigner; +import org.labkey.test.components.domain.DomainFieldRow; import org.labkey.test.components.domain.DomainFormPanel; import org.labkey.test.pages.core.admin.BaseSettingsPage.DATE_FORMAT; import org.labkey.test.pages.core.admin.BaseSettingsPage.TIME_FORMAT; @@ -180,6 +182,19 @@ public void testReservedFieldNames() "'Name Expression' is a reserved field name in 'Reserved Field Names Test'.", "Please correct errors in Reserved Field Names Test before saving."), createPage.clickSaveExpectingErrors()); + domainFormPanel.removeAllFields(false); + + log("Verify a reserved field name cannot be used as a field import alias. GH Issue 1474"); + String aliasHostField = "AliasHostField"; + DomainFieldRow fieldRow = domainFormPanel.manuallyDefineFields(aliasHostField); + for (String reservedName : Arrays.asList("Container", "Folder", "genId", "runid", "DataFileUrl", "NameExpression")) + { + fieldRow.setImportAliases(reservedName); + checker().verifyThat("Expected an error when an import alias matches reserved field name '" + reservedName + "'", + String.join("\n", createPage.clickSaveExpectingErrors()), + CoreMatchers.containsString("Import alias '" + reservedName + "' on field '" + aliasHostField + "' conflicts with a reserved field name.")); + checker().screenShotIfNewError("importAliasConflictsWithReservedName_" + reservedName); + } createPage.clickCancel(); } diff --git a/src/org/labkey/test/tests/SampleTypeParentColumnTest.java b/src/org/labkey/test/tests/SampleTypeParentColumnTest.java index 87cf6b5b47..93f7320ecb 100644 --- a/src/org/labkey/test/tests/SampleTypeParentColumnTest.java +++ b/src/org/labkey/test/tests/SampleTypeParentColumnTest.java @@ -785,19 +785,18 @@ public void testAliasNameConflictsWithFieldName() // GH Issue 1474: import aliases must not collide with a reserved field name clickFolder(SUB_FOLDER_NAME); - sampleHelper.goToSampleType(SAMPLE_TYPE_NAME); + updatePage = sampleHelper.goToEditSampleType(SAMPLE_TYPE_NAME); log("Check that an import alias cannot collide with a reserved field name."); for (String reservedName : Arrays.asList("Folder", "Container", "genId", "CpasType", "FreezeThawCount")) { - waitAndClickAndWait(Locator.lkButton("Edit Type")); - updatePage = new UpdateSampleTypePage(getDriver()); updatePage.getFieldsPanel().getField("DupeAliasCheck").setImportAliases(reservedName); errors = updatePage.clickSaveExpectingErrors(); errorMsgExpectedTxt = "Import alias '" + reservedName + "' on field 'DupeAliasCheck' conflicts with a reserved field name."; assertThat("Error message for reserved import alias '" + reservedName + "'", String.join("\n", errors), CoreMatchers.containsString(errorMsgExpectedTxt)); - updatePage.clickCancel(); + } + updatePage.clickCancel(); } @Test