Skip to content

Commit 86f03fe

Browse files
authored
Merge pull request #774 from bserdar/enum-validator-unit-test
Fix #775 - simple array constraints
2 parents 9187bd3 + 65a09d5 commit 86f03fe

File tree

8 files changed

+126
-11
lines changed

8 files changed

+126
-11
lines changed

crud/src/main/java/com/redhat/lightblue/crud/ConstraintValidator.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -231,7 +231,7 @@ private void checkConstraints(JsonDoc doc, Path currentValuePath, JsonNode curre
231231
skip=currentFieldNode.getFullPath();
232232
}
233233
if(skip==null) {
234-
LOGGER.debug("checking field {}", currentFieldPath);
234+
LOGGER.debug("checking field {} for {} - {}", currentFieldPath,currentFieldNode);
235235
Error.push(currentFieldPath.toString());
236236
try {
237237
List<FieldConstraint> constraints = null;
@@ -240,6 +240,7 @@ private void checkConstraints(JsonDoc doc, Path currentValuePath, JsonNode curre
240240
} else if (currentFieldNode instanceof SimpleArrayElement) {
241241
constraints = ((SimpleArrayElement) currentFieldNode).getConstraints();
242242
}
243+
LOGGER.debug("Constraints:{}",constraints);
243244
if (constraints != null && !constraints.isEmpty()) {
244245
checkFieldConstraints(doc, constraints, currentValuePath, currentValue);
245246
}

crud/src/test/java/com/redhat/lightblue/crud/ConstraintValidatorTest.java

Lines changed: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -36,21 +36,15 @@
3636
import com.fasterxml.jackson.databind.JsonNode;
3737
import com.fasterxml.jackson.databind.node.JsonNodeFactory;
3838
import com.redhat.lightblue.TestDataStoreParser;
39-
import com.redhat.lightblue.crud.validator.DefaultFieldConstraintValidators;
40-
import com.redhat.lightblue.crud.validator.EmptyEntityConstraintValidators;
41-
import com.redhat.lightblue.crud.validator.StringLengthChecker;
39+
import com.redhat.lightblue.crud.validator.*;
4240
import com.redhat.lightblue.metadata.EntityConstraint;
4341
import com.redhat.lightblue.metadata.CompositeMetadata;
4442
import com.redhat.lightblue.metadata.EntityMetadata;
4543
import com.redhat.lightblue.metadata.FieldConstraint;
4644
import com.redhat.lightblue.metadata.SimpleArrayElement;
4745
import com.redhat.lightblue.metadata.constraints.*;
4846
import com.redhat.lightblue.metadata.Type;
49-
import com.redhat.lightblue.metadata.parser.Extensions;
50-
import com.redhat.lightblue.metadata.parser.FieldConstraintParser;
51-
import com.redhat.lightblue.metadata.parser.StringLengthConstraintParser;
52-
import com.redhat.lightblue.metadata.parser.JSONMetadataParser;
53-
import com.redhat.lightblue.metadata.parser.MetadataParser;
47+
import com.redhat.lightblue.metadata.parser.*;
5448
import com.redhat.lightblue.metadata.types.DefaultTypes;
5549
import com.redhat.lightblue.util.DefaultRegistry;
5650
import com.redhat.lightblue.util.Error;
@@ -271,6 +265,27 @@ public void testSimpleArrayConstraint() throws IOException {
271265
Assert.assertTrue(validator.hasErrors());
272266
}
273267

268+
@Test
269+
public void testSimpleArrayEnum() throws IOException {
270+
JsonNode node = loadJsonNode("crud/validator/testSimpleArrayEnum.json");
271+
Map<String, FieldConstraintParser<JsonNode>> fcp = new HashMap<>();
272+
fcp.put(EnumConstraint.ENUM, new EnumConstraintParser<JsonNode>());
273+
EntityMetadata md = createEntityMetadata(node, null, fcp);
274+
275+
Assert.assertEquals(1, ((SimpleArrayElement) md.resolve(new Path("array1.*"))).getConstraints().size());
276+
277+
Map<String, FieldConstraintChecker> fcc = new HashMap<>();
278+
fcc.put(EnumConstraint.ENUM, new EnumChecker());
279+
ConstraintValidator validator = createConstraintValidator(md, fcc, null);
280+
281+
JsonDoc doc = new JsonDoc(loadJsonNode("crud/validator/simple-array-enum-constraint-doc.json"));
282+
validator.validateDoc(doc);
283+
List<Error> errors=validator.getDocErrors().get(doc);
284+
Assert.assertEquals(1,errors.size());
285+
Assert.assertEquals("crud:InvalidEnum",errors.get(0).getErrorCode());
286+
System.out.println(errors);
287+
}
288+
274289
/**
275290
* No {@link FieldConstraintChecker} exists for the {@link FieldConstraint}.
276291
* This causes the registry to return a null value. A {@link Error} is
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{
2+
"array1": [ "v1", "v2", "failure" ]
3+
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
{
2+
"entityInfo": {
3+
"name": "testEnum",
4+
"datastore": {
5+
"backend":"mongo",
6+
"datasource":"mongodata",
7+
"collection":"testEnum"
8+
},
9+
"enums":[
10+
{
11+
"name":"testEnum",
12+
"values":["v1","v2"]
13+
}
14+
]
15+
},
16+
"schema": {
17+
"access":{
18+
"insert":["anyone"],
19+
"find":["anyone"],
20+
"update":["anyone"]
21+
},
22+
"name": "testEnum",
23+
"version": {
24+
"value": "1.0.0-SNAPSHOT",
25+
"changelog": "blahblah"
26+
},
27+
"status": {
28+
"value": "active"
29+
},
30+
"fields": {
31+
"array1": {
32+
"type":"array",
33+
"items" : {
34+
"type":"string",
35+
"constraints": {
36+
"enum":"testEnum"
37+
}
38+
}
39+
}
40+
}
41+
}
42+
}

metadata/src/main/java/com/redhat/lightblue/metadata/CompositeMetadata.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -444,7 +444,10 @@ private static void copyFields(Fields dest,
444444
gmd);
445445
path.pop();
446446
} else {
447-
newElement = new SimpleArrayElement(((SimpleArrayElement) sourceEl).getType());
447+
SimpleArrayElement simpleElement=new SimpleArrayElement(((SimpleArrayElement) sourceEl).getType());
448+
simpleElement.setConstraints(((SimpleArrayElement)sourceEl).getConstraints());
449+
LOGGER.debug("Constraints:{}",simpleElement.getConstraints());
450+
newElement=simpleElement;
448451
}
449452
newElement.getProperties().putAll(sourceEl.getProperties());
450453
ArrayField newField = new ArrayField(field.getName(), newElement);

metadata/src/main/java/com/redhat/lightblue/metadata/parser/MetadataParser.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1489,8 +1489,11 @@ private void convertArrayField(ArrayField field, T fieldObject) {
14891489
putString(items, STR_TYPE, el.getType().getName());
14901490
if (el instanceof ObjectArrayElement) {
14911491
convertObjectArrayElement((ObjectArrayElement) el, items);
1492+
} else {
1493+
convertFieldConstraints(items, ((SimpleArrayElement)el).getConstraints());
14921494
}
1493-
}
1495+
convertProperties(field, fieldObject);
1496+
}
14941497

14951498
private void convertReferenceField(ReferenceField field, T fieldObject) {
14961499
putString(fieldObject, STR_ENTITY, field.getEntityName());

metadata/src/test/java/com/redhat/lightblue/metadata/parser/JSONMetadataParserTest.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,8 @@
5353
import com.redhat.lightblue.metadata.Enums;
5454
import com.redhat.lightblue.metadata.MetadataConstants;
5555
import com.redhat.lightblue.metadata.SimpleField;
56+
import com.redhat.lightblue.metadata.SimpleArrayElement;
57+
import com.redhat.lightblue.metadata.ArrayField;
5658
import com.redhat.lightblue.metadata.ValueGenerator;
5759
import com.redhat.lightblue.metadata.EntitySchema;
5860
import com.redhat.lightblue.metadata.Fields;
@@ -630,6 +632,22 @@ public void testParseConvertValueGenerator() throws IOException {
630632
Assert.assertEquals("1000", props.get("initialValue").asText());
631633
}
632634

635+
@Test
636+
public void testParseConvertArrayConstraints() throws IOException {
637+
JsonNode object = loadJsonNode("JSONMetadataParserTest-array.json");
638+
EntitySchema em = parser.parseEntitySchema(object);
639+
ArrayField field = (ArrayField) em.resolve(new Path("name"));
640+
Assert.assertNotNull(field);
641+
Assert.assertEquals(1,((SimpleArrayElement)field.getElement()).getConstraints().size());
642+
643+
Fields fields=new Fields(null);
644+
fields.put(field);
645+
646+
ObjectNode obj=(ObjectNode)parser.convert(fields);
647+
System.out.println("array:"+obj);
648+
Assert.assertTrue(obj.get("name").get("items").get("constraints").get("required").booleanValue());
649+
}
650+
633651
@Test
634652
public void testProperties() throws IOException {
635653
JsonNode object = loadJsonNode("JSONMetadataParserTest-properties.json");
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
{
2+
"name": "test",
3+
"version": {
4+
"value": "1.0.0",
5+
"changelog": "Initial version"
6+
},
7+
"status": {
8+
"value": "active"
9+
},
10+
"access": {
11+
"insert": ["admin"],
12+
"find": ["admin", "all"],
13+
"update": ["admin"],
14+
"delete": ["admin"]
15+
},
16+
"datastore": {
17+
"backend": "empty"
18+
},
19+
"fields": {
20+
"name": {
21+
"type": "array",
22+
"items": {
23+
"type":"string",
24+
"constraints": {
25+
"required":true
26+
}
27+
}
28+
}
29+
}
30+
}

0 commit comments

Comments
 (0)