• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 package com.networknt.schema;
2 
3 import com.fasterxml.jackson.databind.JsonNode;
4 import com.fasterxml.jackson.databind.ObjectMapper;
5 import com.networknt.schema.SpecVersion.VersionFlag;
6 import java.io.InputStream;
7 import java.util.HashMap;
8 import java.util.Map;
9 import java.util.Set;
10 import org.junit.jupiter.api.Assertions;
11 import org.junit.jupiter.api.Test;
12 
13 public class OverwritingCustomMessageBugTest {
getJsonSchemaFromStreamContentV7(InputStream schemaContent)14   private JsonSchema getJsonSchemaFromStreamContentV7(InputStream schemaContent) {
15     JsonSchemaFactory factory = JsonSchemaFactory.getInstance(VersionFlag.V7);
16     return factory.getSchema(schemaContent);
17   }
18 
getJsonNodeFromStreamContent(InputStream content)19   private JsonNode getJsonNodeFromStreamContent(InputStream content) throws Exception {
20     ObjectMapper mapper = new ObjectMapper();
21     return mapper.readTree(content);
22   }
23 
24   @Test
customMessageIsNotOverwritten()25   public void customMessageIsNotOverwritten() throws Exception {
26     Set<ValidationMessage> errors = validate();
27     Map<String, String> errorMsgMap = transferErrorMsg(errors);
28     Assertions.assertTrue(errorMsgMap.containsKey("$.toplevel[1].foos"), "error message must contains key: $.foos");
29     Assertions.assertTrue(errorMsgMap.containsKey("$.toplevel[1].bars"), "error message must contains key: $.bars");
30     Assertions.assertEquals("$.toplevel[1].foos: Must be a string with the a shape foofoofoofoo... with at least one foo", errorMsgMap.get("$.toplevel[1].foos"));
31     Assertions.assertEquals("$.toplevel[1].bars: Must be a string with the a shape barbarbar... with at least one bar", errorMsgMap.get("$.toplevel[1].bars"));
32   }
33 
34 
validate()35   private Set<ValidationMessage> validate() throws Exception {
36     String schemaPath = "/schema/OverwritingCustomMessageBug.json";
37     String dataPath = "/data/OverwritingCustomMessageBug.json";
38     InputStream schemaInputStream = OverwritingCustomMessageBugTest.class.getResourceAsStream(schemaPath);
39     JsonSchema schema = getJsonSchemaFromStreamContentV7(schemaInputStream);
40     InputStream dataInputStream = OverwritingCustomMessageBugTest.class.getResourceAsStream(dataPath);
41     JsonNode node = getJsonNodeFromStreamContent(dataInputStream);
42     return schema.validate(node);
43   }
44 
transferErrorMsg(Set<ValidationMessage> validationMessages)45   private Map<String, String> transferErrorMsg(Set<ValidationMessage> validationMessages) {
46     Map<String, String> pathToMessage = new HashMap<>();
47     validationMessages.forEach(msg -> {
48       pathToMessage.put(msg.getInstanceLocation().toString(), msg.getMessage());
49     });
50     return pathToMessage;
51   }
52 }