Skip to content

Commit cd729a7

Browse files
authored
Merge pull request wiremock#2390 from wiremock/fix-simple-json-schema-matching
Fix json string schema rejecting numbers
2 parents fb2bc27 + 1c8e98f commit cd729a7

File tree

3 files changed

+34
-11
lines changed

3 files changed

+34
-11
lines changed

src/main/java/com/github/tomakehurst/wiremock/matching/MatchesJsonSchemaPattern.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ public MatchResult match(String json) {
8080
jsonNode = new TextNode(json);
8181
}
8282

83-
final Set<ValidationMessage> validationMessages = schema.validate(jsonNode);
83+
final Set<ValidationMessage> validationMessages = validate(jsonNode, json);
8484
if (validationMessages.isEmpty()) {
8585
return MatchResult.exactMatch();
8686
}
@@ -101,4 +101,13 @@ public double getDistance() {
101101
}
102102
};
103103
}
104+
105+
private Set<ValidationMessage> validate(JsonNode jsonNode, String originalJson) {
106+
final Set<ValidationMessage> validationMessages = schema.validate(jsonNode);
107+
if (validationMessages.isEmpty() || jsonNode.isTextual() || jsonNode.isContainerNode()) {
108+
return validationMessages;
109+
} else {
110+
return schema.validate(new TextNode(originalJson));
111+
}
112+
}
104113
}

src/test/java/com/github/tomakehurst/wiremock/matching/MatchesJsonSchemaPatternTest.java

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,13 @@ void matchesAString(String toMatch) {
155155
}
156156

157157
private static Stream<Arguments> validStrings() {
158-
return Stream.of(Arguments.of("\"12\""), Arguments.of("\"123\""), Arguments.of("\"1234\""));
158+
return Stream.of(
159+
Arguments.of("\"12\""),
160+
Arguments.of("\"123\""),
161+
Arguments.of("\"1234\""),
162+
Arguments.of("12"),
163+
Arguments.of("123"),
164+
Arguments.of("1234"));
159165
}
160166

161167
@ParameterizedTest
@@ -173,9 +179,8 @@ private static Stream<Arguments> invalidStrings() {
173179
Arguments.of("\"\""),
174180
Arguments.of("\"1\""),
175181
Arguments.of("\"12345\""),
176-
Arguments.of("12"),
177-
Arguments.of("123"),
178-
Arguments.of("1234"));
182+
Arguments.of("1"),
183+
Arguments.of("12345"));
179184
}
180185

181186
@ParameterizedTest
@@ -272,7 +277,7 @@ void corercesNumericActualValueToJsonNumber() {
272277
}
273278

274279
@Test
275-
void corercesNumericActualValueToJsonString() {
280+
void coercesNumericActualValueToJsonString() {
276281
String schema = file("schema-validation/stringy.schema.json");
277282

278283
MatchesJsonSchemaPattern pattern =
@@ -281,7 +286,9 @@ void corercesNumericActualValueToJsonString() {
281286
assertThat(pattern.match("abcd").isExactMatch(), is(true));
282287
assertThat(pattern.match("abcde").isExactMatch(), is(true));
283288
assertThat(pattern.match("abcdef").isExactMatch(), is(false));
284-
assertThat(pattern.match("0").isExactMatch(), is(false));
289+
assertThat(pattern.match("1").isExactMatch(), is(true));
290+
assertThat(pattern.match("12345").isExactMatch(), is(true));
291+
assertThat(pattern.match("123456").isExactMatch(), is(false));
285292
}
286293

287294
private static Stream<Arguments> recursiveSchemaNonMatchingExamples() {

src/test/java/com/github/tomakehurst/wiremock/matching/RequestPatternTest.java

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -579,7 +579,15 @@ void matchesAPathParamAgainstAStringSchema(String toMatch) {
579579
}
580580

581581
private static Stream<Arguments> validStrings() {
582-
return Stream.of(Arguments.of("\"12\""), Arguments.of("\"123\""), Arguments.of("\"1234\""));
582+
return Stream.of(
583+
Arguments.of("ab"),
584+
Arguments.of("\"ab\""),
585+
Arguments.of("\"12\""),
586+
Arguments.of("\"123\""),
587+
Arguments.of("\"1234\""),
588+
Arguments.of("12"),
589+
Arguments.of("123"),
590+
Arguments.of("1234"));
583591
}
584592

585593
@ParameterizedTest
@@ -604,9 +612,8 @@ private static Stream<Arguments> invalidStrings() {
604612
Arguments.of("\"\""),
605613
Arguments.of("\"1\""),
606614
Arguments.of("\"12345\""),
607-
Arguments.of("12"),
608-
Arguments.of("123"),
609-
Arguments.of("1234"));
615+
Arguments.of("1"),
616+
Arguments.of("12345"));
610617
}
611618

612619
static final String ALL_BODY_PATTERNS_EXAMPLE =

0 commit comments

Comments
 (0)