Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 5 additions & 11 deletions src/org/labkey/test/components/domain/AdvancedSettingsDialog.java
Original file line number Diff line number Diff line change
Expand Up @@ -170,16 +170,10 @@ public AdvancedSettingsDialog setRecommendedVariable(boolean checked)
return this;
}

public boolean isUniqueConstraint()
public AdvancedSettingsDialog setSingleFieldIndex(String type)
{
return elementCache().uniqueConstraint.get();
}

public AdvancedSettingsDialog setUniqueConstraint(boolean checked)
{
elementCache().uniqueConstraint.set(checked);
getWrapper().waitFor(()-> elementCache().uniqueConstraint.get().equals(checked),
"uniqueConstraint checkbox was not set as expected", 1000);
if (type == null) type = "No Index";
elementCache().indexSelect.selectByVisibleText(type);
return this;
}

Expand Down Expand Up @@ -256,8 +250,8 @@ protected class ElementCache extends ModalDialog.ElementCache
Locator.input("domainpropertiesrow-recommendedVariable").findWhenNeeded(this));
public Checkbox enableMissingValues = new Checkbox(
Locator.input("domainpropertiesrow-mvEnabled").findWhenNeeded(this));
public Checkbox uniqueConstraint = new Checkbox(
Locator.input("domainpropertiesrow-uniqueConstraint").findWhenNeeded(this));
public Select indexSelect = SelectWrapper.Select(Locator.tagWithAttribute("select", "name", "domainpropertiesrow-singleFieldConstraint"))
.findWhenNeeded(this);
}

}
27 changes: 19 additions & 8 deletions src/org/labkey/test/tests/DataClassTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -262,12 +262,12 @@ public void testFieldUniqueConstraint()
DomainFormPanel domainFormPanel = createPage.getDomainEditor();
domainFormPanel.manuallyDefineFields(fieldName1)
.setType(FieldDefinition.ColumnType.Integer)
.expand().clickAdvancedSettings().setUniqueConstraint(true).apply();
log("Add another field with a unique constraint");
.expand().clickAdvancedSettings().setSingleFieldIndex("Index and require unique values").apply();
log("Add another field with a non-unique constraint");
String fieldName2 = "fieldName_2";
domainFormPanel.addField(fieldName2)
.setType(FieldDefinition.ColumnType.DateAndTime)
.expand().clickAdvancedSettings().setUniqueConstraint(true).apply();
.expand().clickAdvancedSettings().setSingleFieldIndex("Index").apply();
log("Add another field which does not have a unique constraint");
String fieldName3 = "FieldName@3";
domainFormPanel.addField(fieldName3)
Expand All @@ -276,21 +276,26 @@ public void testFieldUniqueConstraint()

viewRawTableMetadata(dataClassName);
verifyTableIndices("unique_constraint_test_", List.of("field_name1", "fieldname_2"));
assertTextNotPresent("unique_constraint_test_fieldname_3");
verifyTableIndexNonUnique("unique_constraint_test_", "field_name1", true);
verifyTableIndexNonUnique("unique_constraint_test_", "fieldname_2", false);

log("Remove a field unique constraint and add a new one");
goToProjectHome();
CreateDataClassPage updatePage = goToDataClass(dataClassName);
domainFormPanel = updatePage.getDomainEditor();
domainFormPanel.getField(fieldName2)
.expand().clickAdvancedSettings().setUniqueConstraint(false)
domainFormPanel.getField(fieldName1)
.expand().clickAdvancedSettings().setSingleFieldIndex(null)
.apply();
domainFormPanel.getField(fieldName3)
.expand().clickAdvancedSettings().setUniqueConstraint(true)
.expand().clickAdvancedSettings().setSingleFieldIndex("Index and require unique values")
.apply();
updatePage.clickSave();
viewRawTableMetadata(dataClassName);
verifyTableIndices("unique_constraint_test_", List.of("field_name1", "fieldname_3"));
assertTextNotPresent("unique_constraint_test_fieldname_2");
verifyTableIndices("unique_constraint_test_", List.of("fieldname_2", "fieldname_3"));
assertTextNotPresent("unique_constraint_test_field_name1");
verifyTableIndexNonUnique("unique_constraint_test_", "fieldname_2", false);
verifyTableIndexNonUnique("unique_constraint_test_", "fieldname_3", true);
}

@Test
Expand Down Expand Up @@ -406,6 +411,12 @@ private void verifyTableIndices(String prefix, List<String> indexSuffixes)
assertTextPresentCaseInsensitive(prefix + suffix);
}

private void verifyTableIndexNonUnique(String prefix, String suffix, boolean isUnique)
{
Locator locator = Locator.xpath("//td[contains(text(), '" + prefix + suffix + "')]/preceding-sibling::td[2][text()='" + !isUnique + "']");
checker().verifyTrue("Non_Unique value not as expected in metadata for locator: " + locator, locator.existsIn(getDriver()));
}

private CreateDataClassPage goToCreateNewDataClass()
{
DataRegionTable drt = DataRegion(getDriver()).find();
Expand Down
23 changes: 17 additions & 6 deletions src/org/labkey/test/tests/SampleTypeTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -1825,17 +1825,17 @@ public void testFieldUniqueConstraint()
.goToCreateNewSampleType()
.setName(sampleTypeName);

log("Add a field with a unique constraint");
log("Add a field with a non-unique constraint");
String fieldName1 = "field Name1";
DomainFormPanel domainFormPanel = createPage.getFieldsPanel();
domainFormPanel.manuallyDefineFields(fieldName1)
.setType(ColumnType.Integer)
.expand().clickAdvancedSettings().setUniqueConstraint(true).apply();
.expand().clickAdvancedSettings().setSingleFieldIndex("Index").apply();
log("Add another field with a unique constraint");
String fieldName2 = "fieldName_2";
domainFormPanel.addField(fieldName2)
.setType(ColumnType.DateAndTime)
.expand().clickAdvancedSettings().setUniqueConstraint(true).apply();
.expand().clickAdvancedSettings().setSingleFieldIndex("Index and require unique values").apply();
log("Add another field which does not have a unique constraint");
String fieldName3 = "FieldName@3";
domainFormPanel.addField(fieldName3)
Expand All @@ -1844,21 +1844,26 @@ public void testFieldUniqueConstraint()

viewRawTableMetadata(sampleTypeName);
verifyTableIndices("unique_constraint_test_", List.of("field_name1", "fieldname_2"));
assertTextNotPresent("unique_constraint_test_fieldname_3");
verifyTableIndexNonUnique("unique_constraint_test_", "field_name1", false);
verifyTableIndexNonUnique("unique_constraint_test_", "fieldname_2", true);

log("Remove a field unique constraint and add a new one");
goToProjectHome();
UpdateSampleTypePage updatePage = sampleHelper.goToEditSampleType(sampleTypeName);
domainFormPanel = updatePage.getFieldsPanel();
domainFormPanel.getField(fieldName2)
.expand().clickAdvancedSettings().setUniqueConstraint(false)
.expand().clickAdvancedSettings().setSingleFieldIndex("Index")
.apply();
domainFormPanel.getField(fieldName3)
.expand().clickAdvancedSettings().setUniqueConstraint(true)
.expand().clickAdvancedSettings().setSingleFieldIndex("Index and require unique values")
.apply();
updatePage.clickSave();
viewRawTableMetadata(sampleTypeName);
verifyTableIndices("unique_constraint_test_", List.of("field_name1", "fieldname_3"));
assertTextNotPresent("unique_constraint_test_fieldname_2");
verifyTableIndexNonUnique("unique_constraint_test_", "field_name1", false);
verifyTableIndexNonUnique("unique_constraint_test_", "fieldname_2", false);
verifyTableIndexNonUnique("unique_constraint_test_", "fieldname_3", true);
}

@Test
Expand Down Expand Up @@ -2020,6 +2025,12 @@ private void verifyTableIndices(String prefix, List<String> indexSuffixes)
assertTextPresentCaseInsensitive(prefix + suffix);
}

private void verifyTableIndexNonUnique(String prefix, String suffix, boolean isUnique)
{
Locator locator = Locator.xpath("//td[contains(text(), '" + prefix + suffix + "')]/preceding-sibling::td[2][text()='" + !isUnique + "']");
checker().verifyTrue("Non_Unique value not as expected in metadata for locator: " + locator, locator.existsIn(getDriver()));
}

private void setFileAttachment(int index, File attachment)
{
DataRegionTable drt = DataRegionTable.findDataRegionWithinWebpart(this, "Sample Type Contents");
Expand Down
41 changes: 29 additions & 12 deletions src/org/labkey/test/tests/list/ListTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -1589,45 +1589,56 @@ public void testFieldUniqueConstraint()
viewRawTableMetadata(listName);
verifyTableIndices("unique_constraint_list_", Collections.emptyList());

// set two fields to have unique constraints
// set fields to have constraints
EditListDefinitionPage listDefinitionPage = _listHelper.goToEditDesign(listName);
listDefinitionPage.getFieldsPanel()
.getField(fieldName1).expand().clickAdvancedSettings().setUniqueConstraint(true)
.getField(fieldName1).expand().clickAdvancedSettings().setSingleFieldIndex("Index and require unique values")
.apply();
listDefinitionPage.getFieldsPanel()
.getField(fieldName2).expand().clickAdvancedSettings().setUniqueConstraint(true)
.getField(fieldName2).expand().clickAdvancedSettings().setSingleFieldIndex("Index and require unique values")
.apply();
// set one field to have non-unique constraint
listDefinitionPage.getFieldsPanel()
.getField(fieldName3).expand().clickAdvancedSettings().setSingleFieldIndex("Index")
.apply();
listDefinitionPage.clickSave();

AuditLogHelper.DetailedAuditEventRow expectedDomainEvent = new AuditLogHelper.DetailedAuditEventRow(null, listName, null,
"The descriptor of domain " + listName + " was updated.",
"", null, null, "Indices: > [field Name1, unique: true, fieldName_2, unique: true]");
"", null, null, "Indices: > [FieldName@3, unique: false, field Name1, unique: true, fieldName_2, unique: true]");
boolean pass = _auditLogHelper.validateLastDomainAuditEvents(listName, getProjectName(), expectedDomainEvent, Collections.emptyMap());
checker().verifyTrue("Domain audit comment not as expected after updating field unique constraint", pass);

viewRawTableMetadata(listName);
verifyTableIndices("unique_constraint_list_", List.of("field_name1", "fieldname_2"));
assertTextNotPresent("unique_constraint_list_fieldname_3");
verifyTableIndices("unique_constraint_list_", List.of("field_name1", "fieldname_2", "fieldname_3"));
verifyTableIndexNonUnique("unique_constraint_list_", "field_name1", true);
verifyTableIndexNonUnique("unique_constraint_list_", "fieldname_2", true);
verifyTableIndexNonUnique("unique_constraint_list_", "fieldname_3", false);

// remove a field unique constraint and add a new one
// remove a field unique constraint, change a field from unique -> non-unique, and change one from non-unique -> unique
listDefinitionPage = _listHelper.goToEditDesign(listName);
listDefinitionPage.getFieldsPanel()
.getField(fieldName2).expand().clickAdvancedSettings().setUniqueConstraint(false)
.getField(fieldName1).expand().clickAdvancedSettings().setSingleFieldIndex(null)
.apply();
listDefinitionPage.getFieldsPanel()
.getField(fieldName2).expand().clickAdvancedSettings().setSingleFieldIndex("Index")
.apply();
listDefinitionPage.getFieldsPanel()
.getField(fieldName3).expand().clickAdvancedSettings().setUniqueConstraint(true)
.getField(fieldName3).expand().clickAdvancedSettings().setSingleFieldIndex("Index and require unique values")
.apply();
listDefinitionPage.clickSave();

expectedDomainEvent = new AuditLogHelper.DetailedAuditEventRow(null, listName, null,
"The descriptor of domain " + listName + " was updated.",
"", null, null, "Indices: [field name1, unique: true, fieldname_2, unique: true] > [FieldName@3, unique: true, field Name1, unique: true]");
"", null, null, "Indices: [field name1, unique: true, fieldname@3, unique: false, fieldname_2, unique: true] > [FieldName@3, unique: true, fieldName_2, unique: false]");
pass = _auditLogHelper.validateLastDomainAuditEvents(listName, getProjectName(), expectedDomainEvent, Collections.emptyMap());
checker().verifyTrue("Domain audit comment not as expected after updating field unique constraint", pass);

viewRawTableMetadata(listName);
verifyTableIndices("unique_constraint_list_", List.of("field_name1", "fieldname_3"));
assertTextNotPresent("unique_constraint_list_fieldname_2");
verifyTableIndices("unique_constraint_list_", List.of("fieldname_2", "fieldname_3"));
assertTextNotPresent("unique_constraint_list_field_name1");
verifyTableIndexNonUnique("unique_constraint_list_", "fieldname_2", false);
verifyTableIndexNonUnique("unique_constraint_list_", "fieldname_3", true);
}

@Test // Issue 52247
Expand Down Expand Up @@ -1698,6 +1709,12 @@ private void verifyTableIndices(String prefix, List<String> indexSuffixes)
assertTextPresentCaseInsensitive(prefix + suffix);
}

private void verifyTableIndexNonUnique(String prefix, String suffix, boolean isUnique)
{
Locator locator = Locator.xpath("//td[contains(text(), '" + prefix + suffix + "')]/preceding-sibling::td[2][text()='" + !isUnique + "']");
checker().verifyTrue("Non_Unique value not as expected in metadata for locator: " + locator, locator.existsIn(getDriver()));
}

/**
* Test "tricky characters" in field names, including key field. This will test CrUD operation for list items in
* lists with an auto-key and user defined key. This will also use file import for validation.
Expand Down