Skip to content

Commit 58d3b75

Browse files
committed
Selenium test updates to check non-unique index for fields via the schema browser table viewer
1 parent 710f100 commit 58d3b75

File tree

4 files changed

+70
-37
lines changed

4 files changed

+70
-37
lines changed

src/org/labkey/test/components/domain/AdvancedSettingsDialog.java

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -170,16 +170,10 @@ public AdvancedSettingsDialog setRecommendedVariable(boolean checked)
170170
return this;
171171
}
172172

173-
public boolean isUniqueConstraint()
173+
public AdvancedSettingsDialog setSingleFieldIndex(String type)
174174
{
175-
return elementCache().uniqueConstraint.get();
176-
}
177-
178-
public AdvancedSettingsDialog setUniqueConstraint(boolean checked)
179-
{
180-
elementCache().uniqueConstraint.set(checked);
181-
getWrapper().waitFor(()-> elementCache().uniqueConstraint.get().equals(checked),
182-
"uniqueConstraint checkbox was not set as expected", 1000);
175+
if (type == null) type = "None";
176+
elementCache().indexSelect.selectByVisibleText(type);
183177
return this;
184178
}
185179

@@ -256,8 +250,8 @@ protected class ElementCache extends ModalDialog.ElementCache
256250
Locator.input("domainpropertiesrow-recommendedVariable").findWhenNeeded(this));
257251
public Checkbox enableMissingValues = new Checkbox(
258252
Locator.input("domainpropertiesrow-mvEnabled").findWhenNeeded(this));
259-
public Checkbox uniqueConstraint = new Checkbox(
260-
Locator.input("domainpropertiesrow-uniqueConstraint").findWhenNeeded(this));
253+
public Select indexSelect = SelectWrapper.Select(Locator.tagWithAttribute("select", "name", "domainpropertiesrow-singleFieldConstraint"))
254+
.findWhenNeeded(this);
261255
}
262256

263257
}

src/org/labkey/test/tests/DataClassTest.java

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -262,12 +262,12 @@ public void testFieldUniqueConstraint()
262262
DomainFormPanel domainFormPanel = createPage.getDomainEditor();
263263
domainFormPanel.manuallyDefineFields(fieldName1)
264264
.setType(FieldDefinition.ColumnType.Integer)
265-
.expand().clickAdvancedSettings().setUniqueConstraint(true).apply();
266-
log("Add another field with a unique constraint");
265+
.expand().clickAdvancedSettings().setSingleFieldIndex("Unique").apply();
266+
log("Add another field with a non-unique constraint");
267267
String fieldName2 = "fieldName_2";
268268
domainFormPanel.addField(fieldName2)
269269
.setType(FieldDefinition.ColumnType.DateAndTime)
270-
.expand().clickAdvancedSettings().setUniqueConstraint(true).apply();
270+
.expand().clickAdvancedSettings().setSingleFieldIndex("Non-Unique").apply();
271271
log("Add another field which does not have a unique constraint");
272272
String fieldName3 = "FieldName@3";
273273
domainFormPanel.addField(fieldName3)
@@ -276,21 +276,26 @@ public void testFieldUniqueConstraint()
276276

277277
viewRawTableMetadata(dataClassName);
278278
verifyTableIndices("unique_constraint_test_", List.of("field_name1", "fieldname_2"));
279+
assertTextNotPresent("unique_constraint_test_fieldname_3");
280+
verifyTableIndexNonUnique("unique_constraint_test_", "field_name1", true);
281+
verifyTableIndexNonUnique("unique_constraint_test_", "fieldname_2", false);
279282

280283
log("Remove a field unique constraint and add a new one");
281284
goToProjectHome();
282285
CreateDataClassPage updatePage = goToDataClass(dataClassName);
283286
domainFormPanel = updatePage.getDomainEditor();
284-
domainFormPanel.getField(fieldName2)
285-
.expand().clickAdvancedSettings().setUniqueConstraint(false)
287+
domainFormPanel.getField(fieldName1)
288+
.expand().clickAdvancedSettings().setSingleFieldIndex(null)
286289
.apply();
287290
domainFormPanel.getField(fieldName3)
288-
.expand().clickAdvancedSettings().setUniqueConstraint(true)
291+
.expand().clickAdvancedSettings().setSingleFieldIndex("Unique")
289292
.apply();
290293
updatePage.clickSave();
291294
viewRawTableMetadata(dataClassName);
292-
verifyTableIndices("unique_constraint_test_", List.of("field_name1", "fieldname_3"));
293-
assertTextNotPresent("unique_constraint_test_fieldname_2");
295+
verifyTableIndices("unique_constraint_test_", List.of("fieldname_2", "fieldname_3"));
296+
assertTextNotPresent("unique_constraint_test_field_name1");
297+
verifyTableIndexNonUnique("unique_constraint_test_", "fieldname_2", false);
298+
verifyTableIndexNonUnique("unique_constraint_test_", "fieldname_3", true);
294299
}
295300

296301
@Test
@@ -406,6 +411,12 @@ private void verifyTableIndices(String prefix, List<String> indexSuffixes)
406411
assertTextPresentCaseInsensitive(prefix + suffix);
407412
}
408413

414+
private void verifyTableIndexNonUnique(String prefix, String suffix, boolean isUnique)
415+
{
416+
Locator locator = Locator.xpath("//td[contains(text(), '" + prefix + suffix + "')]/preceding-sibling::td[2][text()='" + !isUnique + "']");
417+
checker().verifyTrue("Non_Unique value not as expected in metadata for locator: " + locator, locator.existsIn(getDriver()));
418+
}
419+
409420
private CreateDataClassPage goToCreateNewDataClass()
410421
{
411422
DataRegionTable drt = DataRegion(getDriver()).find();

src/org/labkey/test/tests/SampleTypeTest.java

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1825,17 +1825,17 @@ public void testFieldUniqueConstraint()
18251825
.goToCreateNewSampleType()
18261826
.setName(sampleTypeName);
18271827

1828-
log("Add a field with a unique constraint");
1828+
log("Add a field with a non-unique constraint");
18291829
String fieldName1 = "field Name1";
18301830
DomainFormPanel domainFormPanel = createPage.getFieldsPanel();
18311831
domainFormPanel.manuallyDefineFields(fieldName1)
18321832
.setType(ColumnType.Integer)
1833-
.expand().clickAdvancedSettings().setUniqueConstraint(true).apply();
1833+
.expand().clickAdvancedSettings().setSingleFieldIndex("Non-Unique").apply();
18341834
log("Add another field with a unique constraint");
18351835
String fieldName2 = "fieldName_2";
18361836
domainFormPanel.addField(fieldName2)
18371837
.setType(ColumnType.DateAndTime)
1838-
.expand().clickAdvancedSettings().setUniqueConstraint(true).apply();
1838+
.expand().clickAdvancedSettings().setSingleFieldIndex("Unique").apply();
18391839
log("Add another field which does not have a unique constraint");
18401840
String fieldName3 = "FieldName@3";
18411841
domainFormPanel.addField(fieldName3)
@@ -1844,21 +1844,26 @@ public void testFieldUniqueConstraint()
18441844

18451845
viewRawTableMetadata(sampleTypeName);
18461846
verifyTableIndices("unique_constraint_test_", List.of("field_name1", "fieldname_2"));
1847+
assertTextNotPresent("unique_constraint_test_fieldname_3");
1848+
verifyTableIndexNonUnique("unique_constraint_test_", "field_name1", false);
1849+
verifyTableIndexNonUnique("unique_constraint_test_", "fieldname_2", true);
18471850

18481851
log("Remove a field unique constraint and add a new one");
18491852
goToProjectHome();
18501853
UpdateSampleTypePage updatePage = sampleHelper.goToEditSampleType(sampleTypeName);
18511854
domainFormPanel = updatePage.getFieldsPanel();
18521855
domainFormPanel.getField(fieldName2)
1853-
.expand().clickAdvancedSettings().setUniqueConstraint(false)
1856+
.expand().clickAdvancedSettings().setSingleFieldIndex("Non-Unique")
18541857
.apply();
18551858
domainFormPanel.getField(fieldName3)
1856-
.expand().clickAdvancedSettings().setUniqueConstraint(true)
1859+
.expand().clickAdvancedSettings().setSingleFieldIndex("Unique")
18571860
.apply();
18581861
updatePage.clickSave();
18591862
viewRawTableMetadata(sampleTypeName);
18601863
verifyTableIndices("unique_constraint_test_", List.of("field_name1", "fieldname_3"));
1861-
assertTextNotPresent("unique_constraint_test_fieldname_2");
1864+
verifyTableIndexNonUnique("unique_constraint_test_", "field_name1", false);
1865+
verifyTableIndexNonUnique("unique_constraint_test_", "fieldname_2", false);
1866+
verifyTableIndexNonUnique("unique_constraint_test_", "fieldname_3", true);
18621867
}
18631868

18641869
@Test
@@ -2020,6 +2025,12 @@ private void verifyTableIndices(String prefix, List<String> indexSuffixes)
20202025
assertTextPresentCaseInsensitive(prefix + suffix);
20212026
}
20222027

2028+
private void verifyTableIndexNonUnique(String prefix, String suffix, boolean isUnique)
2029+
{
2030+
Locator locator = Locator.xpath("//td[contains(text(), '" + prefix + suffix + "')]/preceding-sibling::td[2][text()='" + !isUnique + "']");
2031+
checker().verifyTrue("Non_Unique value not as expected in metadata for locator: " + locator, locator.existsIn(getDriver()));
2032+
}
2033+
20232034
private void setFileAttachment(int index, File attachment)
20242035
{
20252036
DataRegionTable drt = DataRegionTable.findDataRegionWithinWebpart(this, "Sample Type Contents");

src/org/labkey/test/tests/list/ListTest.java

Lines changed: 29 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1589,45 +1589,56 @@ public void testFieldUniqueConstraint()
15891589
viewRawTableMetadata(listName);
15901590
verifyTableIndices("unique_constraint_list_", Collections.emptyList());
15911591

1592-
// set two fields to have unique constraints
1592+
// set fields to have constraints
15931593
EditListDefinitionPage listDefinitionPage = _listHelper.goToEditDesign(listName);
15941594
listDefinitionPage.getFieldsPanel()
1595-
.getField(fieldName1).expand().clickAdvancedSettings().setUniqueConstraint(true)
1595+
.getField(fieldName1).expand().clickAdvancedSettings().setSingleFieldIndex("Unique")
15961596
.apply();
15971597
listDefinitionPage.getFieldsPanel()
1598-
.getField(fieldName2).expand().clickAdvancedSettings().setUniqueConstraint(true)
1598+
.getField(fieldName2).expand().clickAdvancedSettings().setSingleFieldIndex("Unique")
1599+
.apply();
1600+
// set one field to have non-unique constraint
1601+
listDefinitionPage.getFieldsPanel()
1602+
.getField(fieldName3).expand().clickAdvancedSettings().setSingleFieldIndex("Non-Unique")
15991603
.apply();
16001604
listDefinitionPage.clickSave();
16011605

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

16081612
viewRawTableMetadata(listName);
1609-
verifyTableIndices("unique_constraint_list_", List.of("field_name1", "fieldname_2"));
1610-
assertTextNotPresent("unique_constraint_list_fieldname_3");
1613+
verifyTableIndices("unique_constraint_list_", List.of("field_name1", "fieldname_2", "fieldname_3"));
1614+
verifyTableIndexNonUnique("unique_constraint_list_", "field_name1", true);
1615+
verifyTableIndexNonUnique("unique_constraint_list_", "fieldname_2", true);
1616+
verifyTableIndexNonUnique("unique_constraint_list_", "fieldname_3", false);
16111617

1612-
// remove a field unique constraint and add a new one
1618+
// remove a field unique constraint, change a field from unique -> non-unique, and change one from non-unique -> unique
16131619
listDefinitionPage = _listHelper.goToEditDesign(listName);
16141620
listDefinitionPage.getFieldsPanel()
1615-
.getField(fieldName2).expand().clickAdvancedSettings().setUniqueConstraint(false)
1621+
.getField(fieldName1).expand().clickAdvancedSettings().setSingleFieldIndex(null)
1622+
.apply();
1623+
listDefinitionPage.getFieldsPanel()
1624+
.getField(fieldName2).expand().clickAdvancedSettings().setSingleFieldIndex("Non-Unique")
16161625
.apply();
16171626
listDefinitionPage.getFieldsPanel()
1618-
.getField(fieldName3).expand().clickAdvancedSettings().setUniqueConstraint(true)
1627+
.getField(fieldName3).expand().clickAdvancedSettings().setSingleFieldIndex("Unique")
16191628
.apply();
16201629
listDefinitionPage.clickSave();
16211630

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

16281637
viewRawTableMetadata(listName);
1629-
verifyTableIndices("unique_constraint_list_", List.of("field_name1", "fieldname_3"));
1630-
assertTextNotPresent("unique_constraint_list_fieldname_2");
1638+
verifyTableIndices("unique_constraint_list_", List.of("fieldname_2", "fieldname_3"));
1639+
assertTextNotPresent("unique_constraint_list_field_name1");
1640+
verifyTableIndexNonUnique("unique_constraint_list_", "fieldname_2", false);
1641+
verifyTableIndexNonUnique("unique_constraint_list_", "fieldname_3", true);
16311642
}
16321643

16331644
@Test // Issue 52247
@@ -1698,6 +1709,12 @@ private void verifyTableIndices(String prefix, List<String> indexSuffixes)
16981709
assertTextPresentCaseInsensitive(prefix + suffix);
16991710
}
17001711

1712+
private void verifyTableIndexNonUnique(String prefix, String suffix, boolean isUnique)
1713+
{
1714+
Locator locator = Locator.xpath("//td[contains(text(), '" + prefix + suffix + "')]/preceding-sibling::td[2][text()='" + !isUnique + "']");
1715+
checker().verifyTrue("Non_Unique value not as expected in metadata for locator: " + locator, locator.existsIn(getDriver()));
1716+
}
1717+
17011718
/**
17021719
* Test "tricky characters" in field names, including key field. This will test CrUD operation for list items in
17031720
* lists with an auto-key and user defined key. This will also use file import for validation.

0 commit comments

Comments
 (0)