diff --git a/src/org/labkey/test/tests/SampleTypeParentColumnTest.java b/src/org/labkey/test/tests/SampleTypeParentColumnTest.java index 3cb68c6e6a..402129f106 100644 --- a/src/org/labkey/test/tests/SampleTypeParentColumnTest.java +++ b/src/org/labkey/test/tests/SampleTypeParentColumnTest.java @@ -27,6 +27,7 @@ import org.labkey.test.BaseWebDriverTest; import org.labkey.test.Locator; import org.labkey.test.categories.Daily; +import org.labkey.test.components.domain.DomainFieldRow; import org.labkey.test.components.ui.domainproperties.samples.SampleTypeDesigner; import org.labkey.test.pages.ImportDataPage; import org.labkey.test.pages.experiment.CreateSampleTypePage; @@ -699,8 +700,6 @@ public void testAliasNameConflictsWithFieldName() goToProjectHome(); projectMenu().navigateToFolder(PROJECT_NAME, SUB_FOLDER_NAME); - String path = PROJECT_NAME + "/" + SUB_FOLDER_NAME; - List fields = new ArrayList<>(); fields.add(new FieldDefinition(ALIAS_NAME_CONFLICT, FieldDefinition.ColumnType.String)); @@ -726,7 +725,7 @@ public void testAliasNameConflictsWithFieldName() String.join("\n", errors)); updatePage.removeParentAlias(0); - log("Now add a valid parent column and check that you cannot now add a field in the sample type with the same name."); + log("Now add a valid parent column and check that you cannot add a field in the sample type with the same name."); updatePage.addParentAlias(GOOD_PARENT_NAME, SampleTypeDesigner.CURRENT_SAMPLE_TYPE); updatePage.clickSave(); @@ -751,7 +750,38 @@ public void testAliasNameConflictsWithFieldName() updatePage.clickCancel(); - log("Validated name conflicts."); + // GH Issue 1257 + clickFolder(SUB_FOLDER_NAME); + log("Check that you cannot add a field with an import alias that conflicts with the parent import alias"); + updatePage = sampleHelper.goToEditSampleType(SAMPLE_TYPE_NAME); + DomainFieldRow fieldRow = updatePage.getFieldsPanel().addField("DupeAliasCheck"); + fieldRow.setImportAliases(GOOD_PARENT_NAME); + errors = updatePage.clickSaveExpectingErrors(); + errorMsgExpectedTxt = "Field 'DupeAliasCheck' has an import alias '" + GOOD_PARENT_NAME + "' that conflicts with a parent alias header."; + assertThat("Error message", String.join("\n", errors), CoreMatchers.containsString(errorMsgExpectedTxt)); + + log("Check that you cannot add a parent import alias that conflicts with a field alias"); + String fieldAlias1 = "Alias1"; + String fieldAlias2 = "Alias2"; + fieldRow.setImportAliases(fieldAlias1 + " " + fieldAlias2); + updatePage.removeParentAlias(GOOD_PARENT_NAME); + updatePage.addParentAlias(fieldAlias2); + errors = updatePage.clickSaveExpectingErrors(); + errorMsgExpectedTxt = "Field 'DupeAliasCheck' has an import alias '" + fieldAlias2 + "' that conflicts with a parent alias header."; + assertThat("Error message", String.join("\n", errors), CoreMatchers.containsString(errorMsgExpectedTxt)); + updatePage.removeParentAlias(fieldAlias2); + log("Save with the import aliases defined for a field."); + updatePage.clickSave(); + + log("Verify an update to add a conflicting alias for an existing field alias also fails"); + clickFolder(SUB_FOLDER_NAME); + updatePage = sampleHelper.goToEditSampleType(SAMPLE_TYPE_NAME); + updatePage.addParentAlias(fieldAlias1); + errors = updatePage.clickSaveExpectingErrors(); + errorMsgExpectedTxt = "Field 'DupeAliasCheck' has an import alias '" + fieldAlias1 + "' that conflicts with a parent alias header."; + assertThat("Error message", 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 8e01befc55..79f6264e96 100644 --- a/src/org/labkey/test/tests/SampleTypeTest.java +++ b/src/org/labkey/test/tests/SampleTypeTest.java @@ -301,7 +301,69 @@ public void testCustomProperties() assertTextPresent(stringCol1.getLabel(), stringCol2.getLabel(), stringCol3.getLabel(), calcCol.getLabel(), "PlainValue", "PercentValue", "PlainValueConcat"); } - // Issue 47280: LKSM: Trailing/Leading whitespace in Source name won't resolve when deriving samples + @Test // GH Issue 1257 + public void testOverlappingAliases() + { + final String sampleTypeName = "OverlappingAliasSampleType"; + final String fieldOne = "AliasFieldOne"; + final String fieldTwo = "AliasFieldTwo"; + final String sharedAlias = "sharedAlias"; + + SampleTypeHelper sampleHelper = new SampleTypeHelper(this); + + clickProject(PROJECT_NAME); + CreateSampleTypePage createPage = sampleHelper + .goToCreateNewSampleType() + .setName(sampleTypeName); + DomainFormPanel fieldsPanel = createPage.getFieldsPanel(); + + log("Verify there can be no duplicate import aliases for different fields in a sample type (case-insensitive). "); + fieldsPanel.addField(fieldOne).setImportAliases(sharedAlias); + fieldsPanel.addField(fieldTwo).setImportAliases(sharedAlias); + + checker().verifyThat("Expected an error when two fields share an import alias", + String.join("\n", createPage.clickSaveExpectingErrors()), + containsString("You have 2 field errors.")); + checker().screenShotIfNewError("duplicateImportAlias"); + + log("Aliases differing only by case are still duplicates."); + createPage = new CreateSampleTypePage(this.getDriver()); + fieldsPanel.getField(fieldTwo).setImportAliases(sharedAlias.toUpperCase()); + checker().verifyThat("Expected an error when two fields share an import alias differing only by case", + String.join("\n", createPage.clickSaveExpectingErrors()), + containsString("You have 2 field errors.")); + checker().screenShotIfNewError("duplicateImportAliasIgnoringCase"); + + log("Verify there can be no import aliases that collide with field names (case-insensitive)."); + createPage = new CreateSampleTypePage(this.getDriver()); + fieldsPanel.getField(fieldTwo).setImportAliases(""); + fieldsPanel.getField(fieldOne).setImportAliases(fieldTwo); + checker().verifyThat("Expected an error when an import alias matches another field's name", + String.join("\n", createPage.clickSaveExpectingErrors()), + containsString("Import alias '" + fieldTwo + "' on field '" + fieldOne + "' conflicts with a field name.")); + checker().screenShotIfNewError("importAliasConflictsWithFieldName"); + + log("An alias that matches a field name except for case is still a conflict."); + createPage = new CreateSampleTypePage(this.getDriver()); + fieldsPanel.getField(fieldOne).setImportAliases(fieldTwo.toLowerCase()); + checker().verifyThat("Expected an error when an import alias matches another field's name except for case", + String.join("\n", createPage.clickSaveExpectingErrors()), + containsString("Import alias '" + fieldTwo.toLowerCase() + "' on field '" + fieldOne + "' conflicts with a field name.")); + checker().screenShotIfNewError("importAliasConflictsWithFieldNameIgnoringCase"); + + 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(); + + clickProject(PROJECT_NAME); + UpdateSampleTypePage updatePage = sampleHelper.goToEditSampleType(sampleTypeName); + checker().verifyEquals("Import alias matching its own field name was not saved", + fieldOne, updatePage.getFieldsPanel().getField(fieldOne).getImportAliases()); + checker().screenShotIfNewError("selfReferencingImportAlias"); + updatePage.clickCancel(); + } + + // Issue 47280: LKSM: Trailing/Leading whitespace in Source name won't resolve when deriving samples @Test public void testImportSamplesWithTrailingSpace() throws IOException, CommandException {