diff --git a/src/org/labkey/test/tests/list/ListTest.java b/src/org/labkey/test/tests/list/ListTest.java index 418b3cbfc0..cd51c7f9de 100644 --- a/src/org/labkey/test/tests/list/ListTest.java +++ b/src/org/labkey/test/tests/list/ListTest.java @@ -1396,6 +1396,52 @@ public void doRenameFieldsTest() assertTextBefore(newFieldName, origFieldName); } + + @Test + public void requiredFieldsTest() + { + log("Test changing required property of field"); + String listName = "requiredColList"; + String fieldA = "c$a"; + String fieldB = "c_b"; + + _listHelper.createList(PROJECT_VERIFY, listName, "key", + new FieldDefinition(fieldA, ColumnType.String).setDescription("first column").setRequired(false), + new FieldDefinition(fieldB, ColumnType.String).setDescription("second column").setRequired(false) + ); + + // insert a row with a NULL value and NON-NULL value + Map row = new HashMap<>(); + row.put(fieldA, "not null"); + row.put(fieldB, ""); + _listHelper.insertNewRow(row, false); + row.put(fieldA, "still not null"); + row.put(fieldB, "also not null"); + _listHelper.insertNewRow(row, false); + + // fieldA can be set to required==true + EditListDefinitionPage listDefinitionPage = _listHelper.goToEditDesign(listName); + listDefinitionPage.getFieldsPanel() + .getField(fieldA) + .setRequiredField(true); + listDefinitionPage.clickSave(); + + // fieldB can not be set to required==true + listDefinitionPage = _listHelper.goToEditDesign(listName); + listDefinitionPage.getFieldsPanel() + .getField(fieldB) + .setRequiredField(true); + List errors = listDefinitionPage.clickSaveExpectingErrors(); + assertEquals(2, errors.size()); + assertEquals("The property \"" + fieldB + "\" cannot be required when it contains rows with blank values.", errors.get(0)); + assertEquals("Please correct errors in " + listName + " before saving.", errors.get(1)); + + goToProjectHome(); + clickAndWait(Locator.linkWithText(listName)); + _listHelper.deleteList(); + } + + @Test public void exportPhiFileColumn() throws Exception {