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 }