Generate code that respects dots in keys

without this change if the user has jsons that contain `.` in a key (e.g. `foo.bar.baz`) then the produced json path is wrong
with this change we're wrapping all keys in `[' ']` format (e.g. `['foo.bar.baz']`) so that the json path gets properly translated

fixes #269
This commit is contained in:
Marcin Grzejszczak
2017-04-25 14:57:07 +02:00
parent 0d1b76c471
commit cf2e7e0feb
5 changed files with 187 additions and 179 deletions

View File

@@ -16,12 +16,12 @@
package org.springframework.cloud.contract.verifier.util;
import static org.apache.commons.lang3.StringEscapeUtils.escapeJava;
import com.toomuchcoding.jsonassert.JsonVerifiable;
import java.util.LinkedList;
import java.util.regex.Pattern;
import com.toomuchcoding.jsonassert.JsonVerifiable;
import static org.apache.commons.lang3.StringEscapeUtils.escapeJava;
/**
* Implementation of the {@link MethodBufferingJsonVerifiable} that contains a list
@@ -84,9 +84,9 @@ class DelegatingJsonVerifiable implements MethodBufferingJsonVerifiable {
Object valueToPut = value instanceof ShouldTraverse ? ((ShouldTraverse) value).value : value;
DelegatingJsonVerifiable verifiable = new DelegatingJsonVerifiable(this.delegate.field(valueToPut), this.methodsBuffer);
if (this.delegate.isIteratingOverArray() && !(value instanceof ShouldTraverse)) {
verifiable.appendMethodWithQuotedValue("contains", valueToPut);
verifiable.appendMethodWithQuotedValue("contains", wrapInBrackets(valueToPut));
} else {
verifiable.appendMethodWithQuotedValue("field", valueToPut);
verifiable.appendMethodWithQuotedValue("field", wrapInBrackets(valueToPut));
}
return verifiable;
}
@@ -103,14 +103,14 @@ class DelegatingJsonVerifiable implements MethodBufferingJsonVerifiable {
@Override
public MethodBufferingJsonVerifiable array(Object value) {
DelegatingJsonVerifiable verifiable = new DelegatingJsonVerifiable(this.delegate.array(value), this.methodsBuffer);
verifiable.appendMethodWithQuotedValue("array", value);
verifiable.appendMethodWithQuotedValue("array", wrapInBrackets(value));
return verifiable;
}
@Override
public MethodBufferingJsonVerifiable arrayField(Object value) {
DelegatingJsonVerifiable verifiable = new DelegatingJsonVerifiable(this.delegate.field(value).arrayField(), this.methodsBuffer);
verifiable.appendMethodWithQuotedValue("array", value);
verifiable.appendMethodWithQuotedValue("array", wrapInBrackets(value));
return verifiable;
}
@@ -289,6 +289,14 @@ class DelegatingJsonVerifiable implements MethodBufferingJsonVerifiable {
return this.delegate.isAssertingAValueInArray();
}
// Related to https://github.com/spring-cloud/spring-cloud-contract/issues/269
private Object wrapInBrackets(Object name) {
if (name instanceof Number) {
return name;
}
return "['" + name.toString() + "']";
}
@Override
public String method() {
return createMethodString();

View File

@@ -279,7 +279,7 @@ class ContractHttpDocsSpec extends Specification {
response.header('Content-Type') == 'application/json'
and:
DocumentContext parsedJson = JsonPath.parse(response.body.asString())
assertThatJson(parsedJson).field("code").matches("(123123)?")
assertThatJson(parsedJson).field("['code']").matches("(123123)?")
"""
// end::optionals_test[]
stripped(blockBuilder.toString()) == stripped(expectedTest)

View File

@@ -52,8 +52,8 @@ class JaxRsClientMethodBuilderSpec extends Specification implements WireMockStub
when:
builder.appendTo(blockBuilder)
then:
blockBuilder.toString().contains("""assertThatJson(parsedJson).field("property1").isEqualTo("a")""")
blockBuilder.toString().contains("""assertThatJson(parsedJson).field("property2").isEqualTo("b")""")
blockBuilder.toString().contains("""assertThatJson(parsedJson).field("['property1']").isEqualTo("a")""")
blockBuilder.toString().contains("""assertThatJson(parsedJson).field("['property2']").isEqualTo("b")""")
and:
stubMappingIsValidWireMockStub(contractDsl)
and:
@@ -86,9 +86,9 @@ class JaxRsClientMethodBuilderSpec extends Specification implements WireMockStub
when:
builder.appendTo(blockBuilder)
then:
blockBuilder.toString().contains("""assertThatJson(parsedJson).field("property3").isEqualTo(false)""")
blockBuilder.toString().contains("""assertThatJson(parsedJson).field("property2").isNull()""")
blockBuilder.toString().contains("""assertThatJson(parsedJson).field("property1").isEqualTo("true")""")
blockBuilder.toString().contains("""assertThatJson(parsedJson).field("['property3']").isEqualTo(false)""")
blockBuilder.toString().contains("""assertThatJson(parsedJson).field("['property2']").isNull()""")
blockBuilder.toString().contains("""assertThatJson(parsedJson).field("['property1']").isEqualTo("true")""")
and:
stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new ContractMetadata(null, false, 0, null), contractDsl).toWireMockClientStub())
and:
@@ -123,9 +123,9 @@ class JaxRsClientMethodBuilderSpec extends Specification implements WireMockStub
when:
builder.appendTo(blockBuilder)
then:
blockBuilder.toString().contains("""assertThatJson(parsedJson).field("property1").isEqualTo("a")""")
blockBuilder.toString().contains("""assertThatJson(parsedJson).array("property2").contains("a").isEqualTo("sth")""")
blockBuilder.toString().contains("""assertThatJson(parsedJson).array("property2").contains("b").isEqualTo("sthElse")""")
blockBuilder.toString().contains("""assertThatJson(parsedJson).field("['property1']").isEqualTo("a")""")
blockBuilder.toString().contains("""assertThatJson(parsedJson).array("['property2']").contains("['a']").isEqualTo("sth")""")
blockBuilder.toString().contains("""assertThatJson(parsedJson).array("['property2']").contains("['b']").isEqualTo("sthElse")""")
and:
stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new ContractMetadata(null, false, 0, null), contractDsl).toWireMockClientStub())
and:
@@ -162,10 +162,10 @@ class JaxRsClientMethodBuilderSpec extends Specification implements WireMockStub
when:
builder.appendTo(blockBuilder)
then:
blockBuilder.toString().contains("""assertThatJson(parsedJson).field("property1").isEqualTo("a")""")
blockBuilder.toString().contains("""assertThatJson(parsedJson).array("property2").contains("a").isEqualTo("sth")""")
blockBuilder.toString().contains("""assertThatJson(parsedJson).array("property2").hasSize(2)""")
blockBuilder.toString().contains("""assertThatJson(parsedJson).array("property2").contains("b").isEqualTo("sthElse")""")
blockBuilder.toString().contains("""assertThatJson(parsedJson).field("['property1']").isEqualTo("a")""")
blockBuilder.toString().contains("""assertThatJson(parsedJson).array("['property2']").contains("['a']").isEqualTo("sth")""")
blockBuilder.toString().contains("""assertThatJson(parsedJson).array("['property2']").hasSize(2)""")
blockBuilder.toString().contains("""assertThatJson(parsedJson).array("['property2']").contains("['b']").isEqualTo("sthElse")""")
and:
stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new ContractMetadata(null, false, 0, null), contractDsl).toWireMockClientStub())
and:
@@ -261,8 +261,8 @@ class JaxRsClientMethodBuilderSpec extends Specification implements WireMockStub
when:
builder.appendTo(blockBuilder)
then:
blockBuilder.toString().contains("""assertThatJson(parsedJson).array().contains("property1").isEqualTo("a")""")
blockBuilder.toString().contains("""assertThatJson(parsedJson).array().contains("property2").isEqualTo("b")""")
blockBuilder.toString().contains("""assertThatJson(parsedJson).array().contains("['property1']").isEqualTo("a")""")
blockBuilder.toString().contains("""assertThatJson(parsedJson).array().contains("['property2']").isEqualTo("b")""")
and:
stubMappingIsValidWireMockStub(contractDsl)
and:
@@ -295,8 +295,8 @@ class JaxRsClientMethodBuilderSpec extends Specification implements WireMockStub
when:
builder.appendTo(blockBuilder)
then:
blockBuilder.toString().contains("""assertThatJson(parsedJson).array("property1").contains("property2").isEqualTo("test1")""")
blockBuilder.toString().contains("""assertThatJson(parsedJson).array("property1").contains("property3").isEqualTo("test2")""")
blockBuilder.toString().contains("""assertThatJson(parsedJson).array("['property1']").contains("['property2']").isEqualTo("test1")""")
blockBuilder.toString().contains("""assertThatJson(parsedJson).array("['property1']").contains("['property3']").isEqualTo("test2")""")
and:
stubMappingIsValidWireMockStub(contractDsl)
and:
@@ -329,8 +329,8 @@ class JaxRsClientMethodBuilderSpec extends Specification implements WireMockStub
when:
builder.appendTo(blockBuilder)
then:
blockBuilder.toString().contains("""assertThatJson(parsedJson).field("property2").field("property3").isEqualTo("b")""")
blockBuilder.toString().contains("""assertThatJson(parsedJson).field("property1").isEqualTo("a")""")
blockBuilder.toString().contains("""assertThatJson(parsedJson).field("['property2']").field("['property3']").isEqualTo("b")""")
blockBuilder.toString().contains("""assertThatJson(parsedJson).field("['property1']").isEqualTo("a")""")
and:
stubMappingIsValidWireMockStub(contractDsl)
and:
@@ -368,8 +368,8 @@ class JaxRsClientMethodBuilderSpec extends Specification implements WireMockStub
when:
builder.appendTo(blockBuilder)
then:
blockBuilder.toString().contains("""assertThatJson(parsedJson).field("property2").matches("[0-9]{3}")""")
blockBuilder.toString().contains("""assertThatJson(parsedJson).field("property1").isEqualTo("a")""")
blockBuilder.toString().contains("""assertThatJson(parsedJson).field("['property2']").matches("[0-9]{3}")""")
blockBuilder.toString().contains("""assertThatJson(parsedJson).field("['property1']").isEqualTo("a")""")
and:
stubMappingIsValidWireMockStub(contractDsl)
and:
@@ -400,8 +400,8 @@ class JaxRsClientMethodBuilderSpec extends Specification implements WireMockStub
when:
builder.appendTo(blockBuilder)
then:
blockBuilder.toString().contains("""assertThatJson(parsedJson).field("property2").matches("[0-9]{3}")""")
blockBuilder.toString().contains("""assertThatJson(parsedJson).field("property1").isEqualTo("a")""")
blockBuilder.toString().contains("""assertThatJson(parsedJson).field("['property2']").matches("[0-9]{3}")""")
blockBuilder.toString().contains("""assertThatJson(parsedJson).field("['property1']").isEqualTo("a")""")
and:
stubMappingIsValidWireMockStub(contractDsl)
and:
@@ -521,8 +521,8 @@ class JaxRsClientMethodBuilderSpec extends Specification implements WireMockStub
test.contains(modifyStringIfRequired.call("queryParam('age', '99'"))
test.contains(modifyStringIfRequired.call("queryParam('name', 'Denis.Stepanov'"))
test.contains(modifyStringIfRequired.call("queryParam('email', 'bob@email.com'"))
test.contains(modifyStringIfRequired.call("""assertThatJson(parsedJson).field("property1").isEqualTo("a")"""))
test.contains(modifyStringIfRequired.call("""assertThatJson(parsedJson).field("property2").isEqualTo("b")"""))
test.contains("""assertThatJson(parsedJson).field("['property1']").isEqualTo("a")""")
test.contains("""assertThatJson(parsedJson).field("['property2']").isEqualTo("b")""")
and:
stubMappingIsValidWireMockStub(contractDsl)
and:
@@ -578,8 +578,8 @@ class JaxRsClientMethodBuilderSpec extends Specification implements WireMockStub
test.contains(modifyStringIfRequired.call("queryParam('age', '99'"))
test.contains(modifyStringIfRequired.call("queryParam('name', 'Denis.Stepanov'"))
test.contains(modifyStringIfRequired.call("queryParam('email', 'bob@email.com'"))
test.contains(modifyStringIfRequired.call("""assertThatJson(parsedJson).field("property1").isEqualTo("a")"""))
test.contains(modifyStringIfRequired.call("""assertThatJson(parsedJson).field("property2").isEqualTo("b")"""))
test.contains("""assertThatJson(parsedJson).field("['property1']").isEqualTo("a")""")
test.contains("""assertThatJson(parsedJson).field("['property2']").isEqualTo("b")""")
and:
stubMappingIsValidWireMockStub(contractDsl)
and:
@@ -743,7 +743,7 @@ class JaxRsClientMethodBuilderSpec extends Specification implements WireMockStub
assertThat(response.getStatus()).isEqualTo(200);
// and:
DocumentContext parsedJson = JsonPath.parse(responseAsString);
assertThatJson(parsedJson).field("property1").isEqualTo("a");
assertThatJson(parsedJson).field("['property1']").isEqualTo("a");
'''
// end::jaxrs[]
stripped(test) == stripped(expectedResponse)
@@ -966,8 +966,8 @@ class JaxRsClientMethodBuilderSpec extends Specification implements WireMockStub
when:
builder.appendTo(blockBuilder)
then:
blockBuilder.toString().contains("""assertThatJson(parsedJson).field("property2").matches("[0-9]{3}")""")
blockBuilder.toString().contains("""assertThatJson(parsedJson).field("property1").isEqualTo("a")""")
blockBuilder.toString().contains("""assertThatJson(parsedJson).field("['property2']").matches("[0-9]{3}")""")
blockBuilder.toString().contains("""assertThatJson(parsedJson).field("['property1']").isEqualTo("a")""")
and:
stubMappingIsValidWireMockStub(contractDsl)
and:
@@ -1037,21 +1037,21 @@ class JaxRsClientMethodBuilderSpec extends Specification implements WireMockStub
builder.appendTo(blockBuilder)
def test = blockBuilder.toString()
then:
test.contains('assertThatJson(parsedJson).field("aBoolean").matches("(true|false)")')
test.contains('assertThatJson(parsedJson).field("alpha").matches("[\\\\p{L}]*")')
test.contains('assertThatJson(parsedJson).field("hostname").matches("((http[s]?|ftp):/)/?([^:/\\\\s]+)(:[0-9]{1,5})?")')
test.contains('assertThatJson(parsedJson).field("url").matches("^(?:(?:[A-Za-z][+-.\\\\w^_]*:/{2})?(?:\\\\S+(?::\\\\S*)?@)?(?:(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)|(?:(?:[a-z\\\\u00a1-\\\\uffff0-9]-*)*[a-z\\\\u00a1-\\\\uffff0-9]+)(?:\\\\.(?:[a-z\\\\u00a1-\\\\uffff0-9]-*)*[a-z\\\\u00a1-\\\\uffff0-9]+)*(?:\\\\.(?:[a-z\\\\u00a1-\\\\uffff]{2,})))(?::\\\\d{2,5})?(?:/\\\\S*)?)')
test.contains('assertThatJson(parsedJson).field("number").matches("-?\\\\d*(\\\\.\\\\d+)?")')
test.contains('assertThatJson(parsedJson).field("email").matches("[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\\\.[a-zA-Z]{2,4}")')
test.contains('assertThatJson(parsedJson).field("ip").matches("([01]?\\\\d\\\\d?|2[0-4]\\\\d|25[0-5])\\\\.([01]?\\\\d\\\\d?|2[0-4]\\\\d|25[0-5])\\\\.([01]?\\\\d\\\\d?|2[0-4]\\\\d|25[0-5])\\\\.([01]?\\\\d\\\\d?|2[0-4]\\\\d|25[0-5])")')
test.contains('assertThatJson(parsedJson).field("uuid").matches("[a-z0-9]{8}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{12}")')
test.contains('assertThatJson(parsedJson).field("date").matches("(\\\\d\\\\d\\\\d\\\\d)-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])")')
test.contains('assertThatJson(parsedJson).field("dateTime").matches("([0-9]{4})-(1[0-2]|0[1-9])-(3[01]|0[1-9]|[12][0-9])T(2[0-3]|[01][0-9]):([0-5][0-9]):([0-5][0-9])")')
test.contains('assertThatJson(parsedJson).field("time").matches("(2[0-3]|[01][0-9]):([0-5][0-9]):([0-5][0-9])")')
test.contains('assertThatJson(parsedJson).field("iso8601WithOffset").matches("([0-9]{4})-(1[0-2]|0[1-9])-(3[01]|0[1-9]|[12][0-9])T(2[0-3]|[01][0-9]):([0-5][0-9]):([0-5][0-9])(\\\\.\\\\d{3})?(Z|[+-][01]\\\\d:[0-5]\\\\d)")')
test.contains('assertThatJson(parsedJson).field("nonBlankString").matches(".*(\\\\S+|\\\\R).*|!^\\\\R*' + endOfLineRegexSymbol + '")')
test.contains('assertThatJson(parsedJson).field("nonEmptyString").matches(".+")')
test.contains('assertThatJson(parsedJson).field("anyOf").matches("^foo' + endOfLineRegexSymbol + '|^bar' + endOfLineRegexSymbol + '")')
test.contains('assertThatJson(parsedJson).field("[\'aBoolean\']").matches("(true|false)")')
test.contains('assertThatJson(parsedJson).field("[\'alpha\']").matches("[\\\\p{L}]*")')
test.contains('assertThatJson(parsedJson).field("[\'hostname\']").matches("((http[s]?|ftp):/)/?([^:/\\\\s]+)(:[0-9]{1,5})?")')
test.contains('assertThatJson(parsedJson).field("[\'url\']").matches("^(?:(?:[A-Za-z][+-.\\\\w^_]*:/{2})?(?:\\\\S+(?::\\\\S*)?@)?(?:(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)|(?:(?:[a-z\\\\u00a1-\\\\uffff0-9]-*)*[a-z\\\\u00a1-\\\\uffff0-9]+)(?:\\\\.(?:[a-z\\\\u00a1-\\\\uffff0-9]-*)*[a-z\\\\u00a1-\\\\uffff0-9]+)*(?:\\\\.(?:[a-z\\\\u00a1-\\\\uffff]{2,})))(?::\\\\d{2,5})?(?:/\\\\S*)?)')
test.contains('assertThatJson(parsedJson).field("[\'number\']").matches("-?\\\\d*(\\\\.\\\\d+)?")')
test.contains('assertThatJson(parsedJson).field("[\'email\']").matches("[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\\\.[a-zA-Z]{2,4}")')
test.contains('assertThatJson(parsedJson).field("[\'ip\']").matches("([01]?\\\\d\\\\d?|2[0-4]\\\\d|25[0-5])\\\\.([01]?\\\\d\\\\d?|2[0-4]\\\\d|25[0-5])\\\\.([01]?\\\\d\\\\d?|2[0-4]\\\\d|25[0-5])\\\\.([01]?\\\\d\\\\d?|2[0-4]\\\\d|25[0-5])")')
test.contains('assertThatJson(parsedJson).field("[\'uuid\']").matches("[a-z0-9]{8}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{12}")')
test.contains('assertThatJson(parsedJson).field("[\'date\']").matches("(\\\\d\\\\d\\\\d\\\\d)-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])")')
test.contains('assertThatJson(parsedJson).field("[\'dateTime\']").matches("([0-9]{4})-(1[0-2]|0[1-9])-(3[01]|0[1-9]|[12][0-9])T(2[0-3]|[01][0-9]):([0-5][0-9]):([0-5][0-9])")')
test.contains('assertThatJson(parsedJson).field("[\'time\']").matches("(2[0-3]|[01][0-9]):([0-5][0-9]):([0-5][0-9])")')
test.contains('assertThatJson(parsedJson).field("[\'iso8601WithOffset\']").matches("([0-9]{4})-(1[0-2]|0[1-9])-(3[01]|0[1-9]|[12][0-9])T(2[0-3]|[01][0-9]):([0-5][0-9]):([0-5][0-9])(\\\\.\\\\d{3})?(Z|[+-][01]\\\\d:[0-5]\\\\d)")')
test.contains('assertThatJson(parsedJson).field("[\'nonBlankString\']").matches(".*(\\\\S+|\\\\R).*|!^\\\\R*' + endOfLineRegexSymbol + '")')
test.contains('assertThatJson(parsedJson).field("[\'nonEmptyString\']").matches(".+")')
test.contains('assertThatJson(parsedJson).field("[\'anyOf\']").matches("^foo' + endOfLineRegexSymbol + '|^bar' + endOfLineRegexSymbol + '")')
!test.contains('cursor')
!test.contains('REGEXP>>')
and:

View File

@@ -127,8 +127,8 @@ class MockMvcMethodBodyBuilderSpec extends Specification implements WireMockStub
when:
builder.appendTo(blockBuilder)
then:
blockBuilder.toString().contains("""assertThatJson(parsedJson).field("property1").isEqualTo("a")""")
blockBuilder.toString().contains("""assertThatJson(parsedJson).field("property2").isEqualTo("b")""")
blockBuilder.toString().contains("""assertThatJson(parsedJson).field("['property1']").isEqualTo("a")""")
blockBuilder.toString().contains("""assertThatJson(parsedJson).field("['property2']").isEqualTo("b")""")
and:
stubMappingIsValidWireMockStub(contractDsl)
and:
@@ -161,9 +161,9 @@ class MockMvcMethodBodyBuilderSpec extends Specification implements WireMockStub
when:
builder.appendTo(blockBuilder)
then:
blockBuilder.toString().contains("""assertThatJson(parsedJson).field("property1").isEqualTo("true")""")
blockBuilder.toString().contains("""assertThatJson(parsedJson).field("property2").isNull()""")
blockBuilder.toString().contains("""assertThatJson(parsedJson).field("property3").isEqualTo(false)""")
blockBuilder.toString().contains("""assertThatJson(parsedJson).field("['property1']").isEqualTo("true")""")
blockBuilder.toString().contains("""assertThatJson(parsedJson).field("['property2']").isNull()""")
blockBuilder.toString().contains("""assertThatJson(parsedJson).field("['property3']").isEqualTo(false)""")
and:
stubMappingIsValidWireMockStub(contractDsl)
and:
@@ -198,9 +198,9 @@ class MockMvcMethodBodyBuilderSpec extends Specification implements WireMockStub
when:
builder.appendTo(blockBuilder)
then:
blockBuilder.toString().contains("""assertThatJson(parsedJson).field("property1").isEqualTo("a")""")
blockBuilder.toString().contains("""assertThatJson(parsedJson).array("property2").contains("a").isEqualTo("sth")""")
blockBuilder.toString().contains("""assertThatJson(parsedJson).array("property2").contains("b").isEqualTo("sthElse")""")
blockBuilder.toString().contains("""assertThatJson(parsedJson).field("['property1']").isEqualTo("a")""")
blockBuilder.toString().contains("""assertThatJson(parsedJson).array("['property2']").contains("['a']").isEqualTo("sth")""")
blockBuilder.toString().contains("""assertThatJson(parsedJson).array("['property2']").contains("['b']").isEqualTo("sthElse")""")
and:
stubMappingIsValidWireMockStub(contractDsl)
and:
@@ -237,10 +237,10 @@ class MockMvcMethodBodyBuilderSpec extends Specification implements WireMockStub
when:
builder.appendTo(blockBuilder)
then:
blockBuilder.toString().contains("""assertThatJson(parsedJson).field("property1").isEqualTo("a")""")
blockBuilder.toString().contains("""assertThatJson(parsedJson).array("property2").contains("a").isEqualTo("sth")""")
blockBuilder.toString().contains("""assertThatJson(parsedJson).array("property2").hasSize(2)""")
blockBuilder.toString().contains("""assertThatJson(parsedJson).array("property2").contains("b").isEqualTo("sthElse")""")
blockBuilder.toString().contains("""assertThatJson(parsedJson).field("['property1']").isEqualTo("a")""")
blockBuilder.toString().contains("""assertThatJson(parsedJson).array("['property2']").contains("['a']").isEqualTo("sth")""")
blockBuilder.toString().contains("""assertThatJson(parsedJson).array("['property2']").hasSize(2)""")
blockBuilder.toString().contains("""assertThatJson(parsedJson).array("['property2']").contains("['b']").isEqualTo("sthElse")""")
and:
stubMappingIsValidWireMockStub(contractDsl)
and:
@@ -336,8 +336,8 @@ class MockMvcMethodBodyBuilderSpec extends Specification implements WireMockStub
when:
builder.appendTo(blockBuilder)
then:
blockBuilder.toString().contains("""assertThatJson(parsedJson).field("property").field(7).isEqualTo(0.0)""")
blockBuilder.toString().contains("""assertThatJson(parsedJson).field("property").field(14).isEqualTo(0.0)""")
blockBuilder.toString().contains("""assertThatJson(parsedJson).field("['property']").field(7).isEqualTo(0.0)""")
blockBuilder.toString().contains("""assertThatJson(parsedJson).field("['property']").field(14).isEqualTo(0.0)""")
and:
stubMappingIsValidWireMockStub(contractDsl)
and:
@@ -371,8 +371,8 @@ class MockMvcMethodBodyBuilderSpec extends Specification implements WireMockStub
when:
builder.appendTo(blockBuilder)
then:
blockBuilder.toString().contains("""assertThatJson(parsedJson).array().contains("property2").isEqualTo("b")""")
blockBuilder.toString().contains("""assertThatJson(parsedJson).array().contains("property1").isEqualTo("a")""")
blockBuilder.toString().contains("""assertThatJson(parsedJson).array().contains("['property2']").isEqualTo("b")""")
blockBuilder.toString().contains("""assertThatJson(parsedJson).array().contains("['property1']").isEqualTo("a")""")
and:
stubMappingIsValidWireMockStub(contractDsl)
and:
@@ -405,8 +405,8 @@ class MockMvcMethodBodyBuilderSpec extends Specification implements WireMockStub
when:
builder.appendTo(blockBuilder)
then:
blockBuilder.toString().contains("""assertThatJson(parsedJson).array("property1").contains("property2").isEqualTo("test1")""")
blockBuilder.toString().contains("""assertThatJson(parsedJson).array("property1").contains("property3").isEqualTo("test2")""")
blockBuilder.toString().contains("""assertThatJson(parsedJson).array("['property1']").contains("['property2']").isEqualTo("test1")""")
blockBuilder.toString().contains("""assertThatJson(parsedJson).array("['property1']").contains("['property3']").isEqualTo("test2")""")
and:
stubMappingIsValidWireMockStub(contractDsl)
and:
@@ -439,8 +439,8 @@ class MockMvcMethodBodyBuilderSpec extends Specification implements WireMockStub
when:
builder.appendTo(blockBuilder)
then:
blockBuilder.toString().contains("""assertThatJson(parsedJson).field("property2").field("property3").isEqualTo("b")""")
blockBuilder.toString().contains("""assertThatJson(parsedJson).field("property1").isEqualTo("a")""")
blockBuilder.toString().contains("""assertThatJson(parsedJson).field("['property2']").field("['property3']").isEqualTo("b")""")
blockBuilder.toString().contains("""assertThatJson(parsedJson).field("['property1']").isEqualTo("a")""")
and:
stubMappingIsValidWireMockStub(contractDsl)
and:
@@ -477,8 +477,8 @@ class MockMvcMethodBodyBuilderSpec extends Specification implements WireMockStub
when:
builder.appendTo(blockBuilder)
then:
blockBuilder.toString().contains("""assertThatJson(parsedJson).field("property2").matches("[0-9]{3}")""")
blockBuilder.toString().contains("""assertThatJson(parsedJson).field("property1").isEqualTo("a")""")
blockBuilder.toString().contains("""assertThatJson(parsedJson).field("['property2']").matches("[0-9]{3}")""")
blockBuilder.toString().contains("""assertThatJson(parsedJson).field("['property1']").isEqualTo("a")""")
and:
stubMappingIsValidWireMockStub(contractDsl)
and:
@@ -511,8 +511,8 @@ class MockMvcMethodBodyBuilderSpec extends Specification implements WireMockStub
when:
builder.appendTo(blockBuilder)
then:
blockBuilder.toString().contains("""assertThatJson(parsedJson).field("property2").matches("[0-9]{3}")""")
blockBuilder.toString().contains("""assertThatJson(parsedJson).field("property1").isEqualTo("a")""")
blockBuilder.toString().contains("""assertThatJson(parsedJson).field("['property2']").matches("[0-9]{3}")""")
blockBuilder.toString().contains("""assertThatJson(parsedJson).field("['property1']").isEqualTo("a")""")
and:
stubMappingIsValidWireMockStub(contractDsl)
and:
@@ -546,7 +546,7 @@ class MockMvcMethodBodyBuilderSpec extends Specification implements WireMockStub
when:
builder.appendTo(blockBuilder)
then:
blockBuilder.toString().contains("""assertThatJson(parsedJson).field("property").matches("\\\\d+")""")
blockBuilder.toString().contains("""assertThatJson(parsedJson).field("['property']").matches("\\\\d+")""")
and:
stubMappingIsValidWireMockStub(contractDsl)
and:
@@ -602,8 +602,8 @@ class MockMvcMethodBodyBuilderSpec extends Specification implements WireMockStub
test.contains('''.queryParam("name","Denis.Stepanov")''')
test.contains('''.queryParam("email","bob@email.com")''')
test.contains('''.get("/users")''')
test.contains('assertThatJson(parsedJson).field("property1").isEqualTo("a")')
test.contains('assertThatJson(parsedJson).field("property2").isEqualTo("b")')
test.contains('assertThatJson(parsedJson).field("[\'property1\']").isEqualTo("a")')
test.contains('assertThatJson(parsedJson).field("[\'property2\']").isEqualTo("b")')
and:
stubMappingIsValidWireMockStub(contractDsl)
and:
@@ -660,8 +660,8 @@ class MockMvcMethodBodyBuilderSpec extends Specification implements WireMockStub
test.contains('''.queryParam("name","Denis.Stepanov")''')
test.contains('''.queryParam("email","bob@email.com")''')
test.contains('''.get("/foo/123456")''')
test.contains('assertThatJson(parsedJson).field("property1").isEqualTo("a")')
test.contains('assertThatJson(parsedJson).field("property2").isEqualTo("b")')
test.contains('assertThatJson(parsedJson).field("[\'property1\']").isEqualTo("a")')
test.contains('assertThatJson(parsedJson).field("[\'property2\']").isEqualTo("b")')
and:
stubMappingIsValidWireMockStub(contractDsl)
and:
@@ -844,8 +844,8 @@ class MockMvcMethodBodyBuilderSpec extends Specification implements WireMockStub
builder.appendTo(blockBuilder)
def test = blockBuilder.toString()
then:
test.contains("""assertThatJson(parsedJson).array("errors").contains("property").isEqualTo("bank_account_number")""")
test.contains("""assertThatJson(parsedJson).array("errors").contains("message").isEqualTo("incorrect_format")""")
test.contains("""assertThatJson(parsedJson).array("['errors']").contains("['property']").isEqualTo("bank_account_number")""")
test.contains("""assertThatJson(parsedJson).array("['errors']").contains("['message']").isEqualTo("incorrect_format")""")
and:
stubMappingIsValidWireMockStub(contractDsl)
and:
@@ -923,7 +923,7 @@ class MockMvcMethodBodyBuilderSpec extends Specification implements WireMockStub
builder.appendTo(blockBuilder)
def test = blockBuilder.toString()
then:
test.contains("""assertThatJson(parsedJson).field("message").matches("User not found by email = \\\\\\\\[[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\\\\\\\.[a-zA-Z]{2,4}\\\\\\\\]")""")
test.contains("""assertThatJson(parsedJson).field("['message']").matches("User not found by email = \\\\\\\\[[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\\\\\\\.[a-zA-Z]{2,4}\\\\\\\\]")""")
and:
// no static compilation due to bug in Groovy https://issues.apache.org/jira/browse/GROOVY-8055
SyntaxChecker.tryToCompileWithoutCompileStatic(methodBuilderName, blockBuilder.toString())
@@ -943,7 +943,7 @@ class MockMvcMethodBodyBuilderSpec extends Specification implements WireMockStub
def test = blockBuilder.toString()
then:
test.contains('''"email":"abc@abc.com"''')
test.contains("""assertThatJson(parsedJson).field("code").matches("(123123)?")""")
test.contains("""assertThatJson(parsedJson).field("['code']").matches("(123123)?")""")
!test.contains('''REGEXP''')
!test.contains('''OPTIONAL''')
!test.contains('''OptionalProperty''')
@@ -963,7 +963,7 @@ class MockMvcMethodBodyBuilderSpec extends Specification implements WireMockStub
def test = blockBuilder.toString()
then:
test.contains('\\"email\\":\\"abc@abc.com\\"')
test.contains('assertThatJson(parsedJson).field("code").matches("(123123)?");')
test.contains('assertThatJson(parsedJson).field("[\'code\']").matches("(123123)?");')
!test.contains('''REGEXP''')
!test.contains('''OPTIONAL''')
!test.contains('''OptionalProperty''')
@@ -1274,7 +1274,7 @@ World.'''"""
builder.appendTo(blockBuilder)
def test = blockBuilder.toString()
then:
test.contains('''assertThatJson(parsedJson).array("authorities").arrayField().matches("^[a-zA-Z0-9_\\\\- ]+\\$").value()''')
test.contains('''assertThatJson(parsedJson).array("[\'authorities']").arrayField().matches("^[a-zA-Z0-9_\\\\- ]+\\$").value()''')
and:
SyntaxChecker.tryToCompileGroovy(blockBuilder.toString())
}
@@ -1310,7 +1310,7 @@ World.'''"""
builder.appendTo(blockBuilder)
def test = blockBuilder.toString()
then:
test.contains('''assertThatJson(parsedJson).array("authorities").arrayField().matches("^[a-zA-Z0-9_\\\\- ]+$").value()''')
test.contains('''assertThatJson(parsedJson).array("[\'authorities']").arrayField().matches("^[a-zA-Z0-9_\\\\- ]+$").value()''')
and:
SyntaxChecker.tryToCompileJava(blockBuilder.toString())
}
@@ -1337,7 +1337,7 @@ World.'''"""
builder.appendTo(blockBuilder)
def test = blockBuilder.toString()
then:
!test.contains('''assertThatJson(parsedJson).field("rejectionReason").isEqualTo("assertThatRejectionReasonIsNull("''')
!test.contains('''assertThatJson(parsedJson).field("[\'rejectionReason']").isEqualTo("assertThatRejectionReasonIsNull("''')
test.contains('''assertThatRejectionReasonIsNull(''')
where:
methodBuilderName | methodBuilder
@@ -1373,7 +1373,7 @@ World.'''"""
builder.appendTo(blockBuilder)
def test = blockBuilder.toString()
then:
test.contains('assertThatJson(parsedJson).array().contains("id").matches("[0-9]+")')
test.contains('assertThatJson(parsedJson).array().contains("[\'id\']").matches("[0-9]+")')
and:
SyntaxChecker.tryToCompileGroovy(blockBuilder.toString())
}
@@ -1540,8 +1540,8 @@ World.'''"""
builder.appendTo(blockBuilder)
def test = blockBuilder.toString()
then:
test.contains('assertThatJson(parsedJson).array("partners").array("payment_methods").arrayField().isEqualTo("BANK").value()')
test.contains('assertThatJson(parsedJson).array("partners").array("payment_methods").arrayField().isEqualTo("CASH").value()')
test.contains('assertThatJson(parsedJson).array("[\'partners\']").array("[\'payment_methods\']").arrayField().isEqualTo("BANK").value()')
test.contains('assertThatJson(parsedJson).array("[\'partners\']").array("[\'payment_methods\']").arrayField().isEqualTo("CASH").value()')
and:
SyntaxChecker.tryToCompile(methodBuilderName, blockBuilder.toString())
where:
@@ -1569,7 +1569,7 @@ World.'''"""
builder.appendTo(blockBuilder)
def test = blockBuilder.toString()
then:
test.contains('assertThatJson(parsedJson).field("message").matches("^(?!\\\\s*\\$).+")')
test.contains('assertThatJson(parsedJson).field("[\'message\']").matches("^(?!\\\\s*\\$).+")')
and:
SyntaxChecker.tryToCompileGroovy(blockBuilder.toString(), false)
}
@@ -1661,7 +1661,7 @@ World.'''"""
strippedTest.matches(""".*put\\("/foo/[0-9]{5}"\\).*""")
strippedTest.contains("""response.header('Content-Type') ==~ java.util.regex.Pattern.compile('application/vnd\\\\.fraud\\\\.v1\\\\+json.*')""")
"application/vnd.fraud.v1+json;charset=UTF-8".matches('application/vnd\\.fraud\\.v1\\+json.*')
strippedTest.contains("""assertThatJson(parsedJson).field("responseElement").matches("[0-9]{7}")""")
strippedTest.contains("""assertThatJson(parsedJson).field("['responseElement']").matches("[0-9]{7}")""")
and:
SyntaxChecker.tryToCompileGroovy(blockBuilder.toString())
}
@@ -1938,21 +1938,21 @@ World.'''"""
builder.appendTo(blockBuilder)
def test = blockBuilder.toString()
then:
test.contains('assertThatJson(parsedJson).field("aBoolean").matches("(true|false)")')
test.contains('assertThatJson(parsedJson).field("alpha").matches("[\\\\p{L}]*")')
test.contains('assertThatJson(parsedJson).field("hostname").matches("((http[s]?|ftp):/)/?([^:/\\\\s]+)(:[0-9]{1,5})?")')
test.contains('assertThatJson(parsedJson).field("url").matches("^(?:(?:[A-Za-z][+-.\\\\w^_]*:/{2})?(?:\\\\S+(?::\\\\S*)?@)?(?:(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)|(?:(?:[a-z\\\\u00a1-\\\\uffff0-9]-*)*[a-z\\\\u00a1-\\\\uffff0-9]+)(?:\\\\.(?:[a-z\\\\u00a1-\\\\uffff0-9]-*)*[a-z\\\\u00a1-\\\\uffff0-9]+)*(?:\\\\.(?:[a-z\\\\u00a1-\\\\uffff]{2,})))(?::\\\\d{2,5})?(?:/\\\\S*)?)')
test.contains('assertThatJson(parsedJson).field("number").matches("-?\\\\d*(\\\\.\\\\d+)?")')
test.contains('assertThatJson(parsedJson).field("email").matches("[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\\\.[a-zA-Z]{2,4}")')
test.contains('assertThatJson(parsedJson).field("ip").matches("([01]?\\\\d\\\\d?|2[0-4]\\\\d|25[0-5])\\\\.([01]?\\\\d\\\\d?|2[0-4]\\\\d|25[0-5])\\\\.([01]?\\\\d\\\\d?|2[0-4]\\\\d|25[0-5])\\\\.([01]?\\\\d\\\\d?|2[0-4]\\\\d|25[0-5])")')
test.contains('assertThatJson(parsedJson).field("uuid").matches("[a-z0-9]{8}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{12}")')
test.contains('assertThatJson(parsedJson).field("date").matches("(\\\\d\\\\d\\\\d\\\\d)-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])')
test.contains('assertThatJson(parsedJson).field("dateTime").matches("([0-9]{4})-(1[0-2]|0[1-9])-(3[01]|0[1-9]|[12][0-9])T(2[0-3]|[01][0-9]):([0-5][0-9]):([0-5][0-9])')
test.contains('assertThatJson(parsedJson).field("time").matches("(2[0-3]|[01][0-9]):([0-5][0-9]):([0-5][0-9])")')
test.contains('assertThatJson(parsedJson).field("iso8601WithOffset").matches("([0-9]{4})-(1[0-2]|0[1-9])-(3[01]|0[1-9]|[12][0-9])T(2[0-3]|[01][0-9]):([0-5][0-9]):([0-5][0-9])(\\\\.\\\\d{3})?(Z|[+-][01]\\\\d:[0-5]\\\\d)")')
test.contains('assertThatJson(parsedJson).field("nonBlankString").matches(".*(\\\\S+|\\\\R).*|!^\\\\R*' + endOfLineRegExSymbol + '")')
test.contains('assertThatJson(parsedJson).field("nonEmptyString").matches(".+")')
test.contains('assertThatJson(parsedJson).field("anyOf").matches("^foo' + endOfLineRegExSymbol + '|^bar' + endOfLineRegExSymbol + '")')
test.contains('assertThatJson(parsedJson).field("[\'aBoolean\']").matches("(true|false)")')
test.contains('assertThatJson(parsedJson).field("[\'alpha\']").matches("[\\\\p{L}]*")')
test.contains('assertThatJson(parsedJson).field("[\'hostname\']").matches("((http[s]?|ftp):/)/?([^:/\\\\s]+)(:[0-9]{1,5})?")')
test.contains('assertThatJson(parsedJson).field("[\'url\']").matches("^(?:(?:[A-Za-z][+-.\\\\w^_]*:/{2})?(?:\\\\S+(?::\\\\S*)?@)?(?:(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)|(?:(?:[a-z\\\\u00a1-\\\\uffff0-9]-*)*[a-z\\\\u00a1-\\\\uffff0-9]+)(?:\\\\.(?:[a-z\\\\u00a1-\\\\uffff0-9]-*)*[a-z\\\\u00a1-\\\\uffff0-9]+)*(?:\\\\.(?:[a-z\\\\u00a1-\\\\uffff]{2,})))(?::\\\\d{2,5})?(?:/\\\\S*)?)')
test.contains('assertThatJson(parsedJson).field("[\'number\']").matches("-?\\\\d*(\\\\.\\\\d+)?")')
test.contains('assertThatJson(parsedJson).field("[\'email\']").matches("[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\\\.[a-zA-Z]{2,4}")')
test.contains('assertThatJson(parsedJson).field("[\'ip\']").matches("([01]?\\\\d\\\\d?|2[0-4]\\\\d|25[0-5])\\\\.([01]?\\\\d\\\\d?|2[0-4]\\\\d|25[0-5])\\\\.([01]?\\\\d\\\\d?|2[0-4]\\\\d|25[0-5])\\\\.([01]?\\\\d\\\\d?|2[0-4]\\\\d|25[0-5])")')
test.contains('assertThatJson(parsedJson).field("[\'uuid\']").matches("[a-z0-9]{8}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{12}")')
test.contains('assertThatJson(parsedJson).field("[\'date\']").matches("(\\\\d\\\\d\\\\d\\\\d)-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])')
test.contains('assertThatJson(parsedJson).field("[\'dateTime\']").matches("([0-9]{4})-(1[0-2]|0[1-9])-(3[01]|0[1-9]|[12][0-9])T(2[0-3]|[01][0-9]):([0-5][0-9]):([0-5][0-9])')
test.contains('assertThatJson(parsedJson).field("[\'time\']").matches("(2[0-3]|[01][0-9]):([0-5][0-9]):([0-5][0-9])")')
test.contains('assertThatJson(parsedJson).field("[\'iso8601WithOffset\']").matches("([0-9]{4})-(1[0-2]|0[1-9])-(3[01]|0[1-9]|[12][0-9])T(2[0-3]|[01][0-9]):([0-5][0-9]):([0-5][0-9])(\\\\.\\\\d{3})?(Z|[+-][01]\\\\d:[0-5]\\\\d)")')
test.contains('assertThatJson(parsedJson).field("[\'nonBlankString\']").matches(".*(\\\\S+|\\\\R).*|!^\\\\R*' + endOfLineRegExSymbol + '")')
test.contains('assertThatJson(parsedJson).field("[\'nonEmptyString\']").matches(".+")')
test.contains('assertThatJson(parsedJson).field("[\'anyOf\']").matches("^foo' + endOfLineRegExSymbol + '|^bar' + endOfLineRegExSymbol + '")')
!test.contains('cursor')
!test.contains('REGEXP>>')
and:
@@ -2066,7 +2066,7 @@ DocumentContext parsedJson = JsonPath.parse(json);
builder.appendTo(blockBuilder)
def test = blockBuilder.toString()
then:
!test.contains('assertThatJson(parsedJson).field("a").isEqualTo(1)')
!test.contains('assertThatJson(parsedJson).field("[\'a\']").isEqualTo(1)')
test.contains(expectedAssertion)
and:
SyntaxChecker.tryToCompile(methodBuilderName, blockBuilder.toString())
@@ -2103,8 +2103,8 @@ DocumentContext parsedJson = JsonPath.parse(json);
builder.appendTo(blockBuilder)
def test = blockBuilder.toString()
then:
// test.contains('assertThatJson(parsedJson).field("bar").matches("some value \\"with quote\\"|bar")')
// and:
test.contains('assertThatJson(parsedJson).field("[\'bar\']").matches("some value \\"with quote\\"|bar")')
and:
SyntaxChecker.tryToCompile(methodBuilderName, blockBuilder.toString())
where:
//order is inverted cause Intellij didn't parse this properly
@@ -2172,8 +2172,8 @@ DocumentContext parsedJson = JsonPath.parse(json);
when:
SyntaxChecker.tryToCompile(methodBuilderName, test)
then:
test.contains('assertThatJson(parsedJson).array("list").isEmpty()')
!test.contains('assertThatJson(parsedJson).array("foo").isEmpty()')
test.contains('assertThatJson(parsedJson).array("[\'list\']").isEmpty()')
!test.contains('assertThatJson(parsedJson).array("[\'foo\']").isEmpty()')
where:
methodBuilderName | methodBuilder
"MockMvcSpockMethodBuilder" | { Contract dsl -> new MockMvcSpockMethodRequestProcessingBodyBuilder(dsl, properties) }

View File

@@ -38,23 +38,23 @@ class JsonToJsonPathsConverterSpec extends Specification {
JsonPaths pathAndValues = new JsonToJsonPathsConverter().transformToJsonPathWithTestsSideValues(new JsonSlurper().parseText(json))
then:
pathAndValues.find {
it.method() == """.array().field("some").field("nested").field("json").isEqualTo("with value")""" &&
it.method() == """.array().field("['some']").field("['nested']").field("['json']").isEqualTo("with value")""" &&
it.jsonPath() == '''$[*].some.nested[?(@.json == 'with value')]'''
}
pathAndValues.find {
it.method() == """.array().field("some").field("nested").field("anothervalue").isEqualTo(4)""" &&
it.method() == """.array().field("['some']").field("['nested']").field("['anothervalue']").isEqualTo(4)""" &&
it.jsonPath() == '''$[*].some.nested[?(@.anothervalue == 4)]'''
}
pathAndValues.find {
it.method() == """.array().field("some").field("nested").array("withlist").contains("name").isEqualTo("name1")""" &&
it.method() == """.array().field("['some']").field("['nested']").array("['withlist']").contains("['name']").isEqualTo("name1")""" &&
it.jsonPath() == '''$[*].some.nested.withlist[*][?(@.name == 'name1')]'''
}
pathAndValues.find {
it.method() == """.array().field("some").field("nested").array("withlist").contains("name").isEqualTo("name2")""" &&
it.method() == """.array().field("['some']").field("['nested']").array("['withlist']").contains("['name']").isEqualTo("name2")""" &&
it.jsonPath() == '''$[*].some.nested.withlist[*][?(@.name == 'name2')]'''
}
pathAndValues.find {
it.method() == """.array().field("some").field("nested").array("withlist").field("anothernested").field("name").isEqualTo("name3")""" &&
it.method() == """.array().field("['some']").field("['nested']").array("['withlist']").field("['anothernested']").field("['name']").isEqualTo("name3")""" &&
it.jsonPath() == '''$[*].some.nested.withlist[*].anothernested[?(@.name == 'name3')]'''
}
and:
@@ -131,19 +131,19 @@ class JsonToJsonPathsConverterSpec extends Specification {
JsonPaths pathAndValues = new JsonToJsonPathsConverter().transformToJsonPathWithTestsSideValues(new JsonSlurper().parseText(json))
then:
pathAndValues.find {
it.method() == """.field("some").field("nested").field("json").isEqualTo("with value")""" &&
it.method() == """.field("['some']").field("['nested']").field("['json']").isEqualTo("with value")""" &&
it.jsonPath() == '''$.some.nested[?(@.json == 'with value')]'''
}
pathAndValues.find {
it.method() == """.field("some").field("nested").field("anothervalue").isEqualTo(4)""" &&
it.method() == """.field("['some']").field("['nested']").field("['anothervalue']").isEqualTo(4)""" &&
it.jsonPath() == '''$.some.nested[?(@.anothervalue == 4)]'''
}
pathAndValues.find {
it.method() == """.field("some").field("nested").array("withlist").contains("name").isEqualTo("name1")""" &&
it.method() == """.field("['some']").field("['nested']").array("['withlist']").contains("['name']").isEqualTo("name1")""" &&
it.jsonPath() == '''$.some.nested.withlist[*][?(@.name == 'name1')]'''
}
pathAndValues.find {
it.method() == """.field("some").field("nested").array("withlist").contains("name").isEqualTo("name2")""" &&
it.method() == """.field("['some']").field("['nested']").array("['withlist']").contains("['name']").isEqualTo("name2")""" &&
it.jsonPath() == '''$.some.nested.withlist[*][?(@.name == 'name2')]'''
}
and:
@@ -161,7 +161,7 @@ class JsonToJsonPathsConverterSpec extends Specification {
JsonPaths pathAndValues = new JsonToJsonPathsConverter().transformToJsonPathWithTestsSideValues(new JsonSlurper().parseText(json))
then:
pathAndValues.find {
it.method() == """.array("items").arrayField().isEqualTo("HOP").value()""" &&
it.method() == """.array("['items']").arrayField().isEqualTo("HOP").value()""" &&
it.jsonPath() == '''$.items[?(@ == 'HOP')]'''
}
and:
@@ -180,11 +180,11 @@ class JsonToJsonPathsConverterSpec extends Specification {
JsonPaths pathAndValues = new JsonToJsonPathsConverter().transformToJsonPathWithTestsSideValues(new JsonSlurper().parseText(json))
then:
pathAndValues.find {
it.method() == """.field("property1").isNull()""" &&
it.method() == """.field("['property1']").isNull()""" &&
it.jsonPath() == '''$[?(@.property1 == null)]'''
}
pathAndValues.find {
it.method() == """.field("property2").isEqualTo(true)""" &&
it.method() == """.field("['property2']").isEqualTo(true)""" &&
it.jsonPath() == '''$[?(@.property2 == true)]'''
}
}
@@ -199,15 +199,15 @@ class JsonToJsonPathsConverterSpec extends Specification {
JsonPaths pathAndValues = new JsonToJsonPathsConverter().transformToJsonPathWithTestsSideValues(new JsonSlurper().parseText(json))
then:
pathAndValues.find {
it.method() == """.field("extensions").field("7").isEqualTo(28.00)""" &&
it.method() == """.field("['extensions']").field("['7']").isEqualTo(28.00)""" &&
it.jsonPath() == '''$.extensions[?(@.7 == 28.00)]'''
}
pathAndValues.find {
it.method() == """.field("extensions").field("14").isEqualTo(41.00)""" &&
it.method() == """.field("['extensions']").field("['14']").isEqualTo(41.00)""" &&
it.jsonPath() == '''$.extensions[?(@.14 == 41.00)]'''
}
pathAndValues.find {
it.method() == """.field("extensions").field("30").isEqualTo(60.00)""" &&
it.method() == """.field("['extensions']").field("['30']").isEqualTo(60.00)""" &&
it.jsonPath() == '''$.extensions[?(@.30 == 60.00)]'''
}
and:
@@ -228,15 +228,15 @@ class JsonToJsonPathsConverterSpec extends Specification {
JsonPaths pathAndValues = new JsonToJsonPathsConverter().transformToJsonPathWithTestsSideValues(new JsonSlurper().parseText(json))
then:
pathAndValues.find {
it.method() == """.array("errors").contains("property").isEqualTo("email")""" &&
it.method() == """.array("['errors']").contains("['property']").isEqualTo("email")""" &&
it.jsonPath() == '''$.errors[*][?(@.property == 'email')]'''
}
pathAndValues.find {
it.method() == """.array("errors").contains("message").isEqualTo("inconsistent value")""" &&
it.method() == """.array("['errors']").contains("['message']").isEqualTo("inconsistent value")""" &&
it.jsonPath() == '''$.errors[*][?(@.message == 'inconsistent value')]'''
}
pathAndValues.find {
it.method() == """.array("errors").contains("message").isEqualTo("inconsistent value2")""" &&
it.method() == """.array("['errors']").contains("['message']").isEqualTo("inconsistent value2")""" &&
it.jsonPath() == '''$.errors[*][?(@.message == 'inconsistent value2')]'''
}
and:
@@ -279,23 +279,23 @@ class JsonToJsonPathsConverterSpec extends Specification {
JsonPaths pathAndValues = new JsonToJsonPathsConverter().transformToJsonPathWithTestsSideValues(json)
then:
pathAndValues.find {
it.method() == """.array().field("some").field("nested").field("json").isEqualTo("with value")""" &&
it.method() == """.array().field("['some']").field("['nested']").field("['json']").isEqualTo("with value")""" &&
it.jsonPath() == '''$[*].some.nested[?(@.json == 'with value')]'''
}
pathAndValues.find {
it.method() == """.array().field("some").field("nested").field("anothervalue").isEqualTo(4)""" &&
it.method() == """.array().field("['some']").field("['nested']").field("['anothervalue']").isEqualTo(4)""" &&
it.jsonPath() == '''$[*].some.nested[?(@.anothervalue == 4)]'''
}
pathAndValues.find {
it.method() == """.array().field("some").field("nested").array("withlist").contains("name").isEqualTo("name1")""" &&
it.method() == """.array().field("['some']").field("['nested']").array("['withlist']").contains("['name']").isEqualTo("name1")""" &&
it.jsonPath() == '''$[*].some.nested.withlist[*][?(@.name == 'name1')]'''
}
pathAndValues.find {
it.method() == """.array().field("some").field("nested").array("withlist").contains("name").isEqualTo("name2")""" &&
it.method() == """.array().field("['some']").field("['nested']").array("['withlist']").contains("['name']").isEqualTo("name2")""" &&
it.jsonPath() == '''$[*].some.nested.withlist[*][?(@.name == 'name2')]'''
}
pathAndValues.find {
it.method() == """.array().field("some").field("nested").array("withlist").field("anothernested").field("name").matches("[a-zA-Z]+")""" &&
it.method() == """.array().field("['some']").field("['nested']").array("['withlist']").field("['anothernested']").field("['name']").matches("[a-zA-Z]+")""" &&
it.jsonPath() == '''$[*].some.nested.withlist[*].anothernested[?(@.name =~ /[a-zA-Z]+/)]'''
}
when:
@@ -315,11 +315,11 @@ class JsonToJsonPathsConverterSpec extends Specification {
JsonPaths pathAndValues = new JsonToJsonPathsConverter().transformToJsonPathWithTestsSideValues(new JsonSlurper().parseText(json))
then:
pathAndValues.find {
it.method()== """.field("property1").isEqualTo("a")""" &&
it.method()== """.field("['property1']").isEqualTo("a")""" &&
it.jsonPath() == """\$[?(@.property1 == 'a')]"""
}
pathAndValues.find {
it.method()== """.field("property2").isEqualTo("b")""" &&
it.method()== """.field("['property2']").isEqualTo("b")""" &&
it.jsonPath() == """\$[?(@.property2 == 'b')]"""
}
and:
@@ -337,15 +337,15 @@ class JsonToJsonPathsConverterSpec extends Specification {
JsonPaths pathAndValues = new JsonToJsonPathsConverter().transformToJsonPathWithTestsSideValues(new JsonSlurper().parseText(json))
then:
pathAndValues.find {
it.method()== """.field("property1").isEqualTo("true")""" &&
it.method()== """.field("['property1']").isEqualTo("true")""" &&
it.jsonPath() == """\$[?(@.property1 == 'true')]"""
}
pathAndValues.find {
it.method()== """.field("property2").isNull()""" &&
it.method()== """.field("['property2']").isNull()""" &&
it.jsonPath() == """\$[?(@.property2 == null)]"""
}
pathAndValues.find {
it.method()== """.field("property3").isEqualTo(false)""" &&
it.method()== """.field("['property3']").isEqualTo(false)""" &&
it.jsonPath() == """\$[?(@.property3 == false)]"""
}
and:
@@ -365,15 +365,15 @@ class JsonToJsonPathsConverterSpec extends Specification {
JsonPaths pathAndValues = new JsonToJsonPathsConverter().transformToJsonPathWithTestsSideValues(json)
then:
pathAndValues.find {
it.method()== """.field("property1").isEqualTo("a")""" &&
it.method()== """.field("['property1']").isEqualTo("a")""" &&
it.jsonPath() == """\$[?(@.property1 == 'a')]"""
}
pathAndValues.find {
it.method()== """.array("property2").contains("a").isEqualTo("sth")""" &&
it.method()== """.array("['property2']").contains("['a']").isEqualTo("sth")""" &&
it.jsonPath() == """\$.property2[*][?(@.a == 'sth')]"""
}
pathAndValues.find {
it.method()== """.array("property2").contains("b").isEqualTo("sthElse")""" &&
it.method()== """.array("['property2']").contains("['b']").isEqualTo("sthElse")""" &&
it.jsonPath() == """\$.property2[*][?(@.b == 'sthElse')]"""
}
and:
@@ -395,19 +395,19 @@ class JsonToJsonPathsConverterSpec extends Specification {
JsonPaths pathAndValues = new JsonToJsonPathsConverter().transformToJsonPathWithTestsSideValues(json)
then:
pathAndValues.find {
it.method()== """.field("property1").isEqualTo("a")""" &&
it.method()== """.field("['property1']").isEqualTo("a")""" &&
it.jsonPath() == """\$[?(@.property1 == 'a')]"""
}
pathAndValues.find {
it.method()== """.array("property2").contains("a").isEqualTo("sth")""" &&
it.method()== """.array("['property2']").contains("['a']").isEqualTo("sth")""" &&
it.jsonPath() == """\$.property2[*][?(@.a == 'sth')]"""
}
pathAndValues.find {
it.method()== """.array("property2").hasSize(2)""" &&
it.method()== """.array("['property2']").hasSize(2)""" &&
it.jsonPath() == """\$.property2[*]"""
}
pathAndValues.find {
it.method()== """.array("property2").contains("b").isEqualTo("sthElse")""" &&
it.method()== """.array("['property2']").contains("['b']").isEqualTo("sthElse")""" &&
it.jsonPath() == """\$.property2[*][?(@.b == 'sthElse')]"""
}
and:
@@ -426,11 +426,11 @@ class JsonToJsonPathsConverterSpec extends Specification {
JsonPaths pathAndValues = new JsonToJsonPathsConverter().transformToJsonPathWithTestsSideValues(json)
then:
pathAndValues.find {
it.method()== """.field("property").field(7).isEqualTo(0.0)""" &&
it.method()== """.field("['property']").field(7).isEqualTo(0.0)""" &&
it.jsonPath() == """\$.property[?(@.7 == 0.0)]"""
}
pathAndValues.find {
it.method()== """.field("property").field(14).isEqualTo(0.0)""" &&
it.method()== """.field("['property']").field(14).isEqualTo(0.0)""" &&
it.jsonPath() == """\$.property[?(@.14 == 0.0)]"""
}
and:
@@ -450,11 +450,11 @@ class JsonToJsonPathsConverterSpec extends Specification {
JsonPaths pathAndValues = new JsonToJsonPathsConverter().transformToJsonPathWithTestsSideValues(new JsonSlurper().parseText(json))
then:
pathAndValues.find {
it.method()== """.array().contains("property1").isEqualTo("a")""" &&
it.method()== """.array().contains("['property1']").isEqualTo("a")""" &&
it.jsonPath() == """\$[*][?(@.property1 == 'a')]"""
}
pathAndValues.find {
it.method()== """.array().contains("property2").isEqualTo("b")""" &&
it.method()== """.array().contains("['property2']").isEqualTo("b")""" &&
it.jsonPath() == """\$[*][?(@.property2 == 'b')]"""
}
and:
@@ -476,11 +476,11 @@ class JsonToJsonPathsConverterSpec extends Specification {
JsonPaths pathAndValues = new JsonToJsonPathsConverter().transformToJsonPathWithTestsSideValues(new JsonSlurper().parseText(json))
then:
pathAndValues.find {
it.method()== """.array().contains("property1").isEqualTo("a")""" &&
it.method()== """.array().contains("['property1']").isEqualTo("a")""" &&
it.jsonPath() == """\$[*][?(@.property1 == 'a')]"""
}
pathAndValues.find {
it.method()== """.array().contains("property2").isEqualTo("b")""" &&
it.method()== """.array().contains("['property2']").isEqualTo("b")""" &&
it.jsonPath() == """\$[*][?(@.property2 == 'b')]"""
}
pathAndValues.find {
@@ -503,11 +503,11 @@ class JsonToJsonPathsConverterSpec extends Specification {
JsonPaths pathAndValues = new JsonToJsonPathsConverter().transformToJsonPathWithTestsSideValues(new JsonSlurper().parseText(json))
then:
pathAndValues.find {
it.method()== """.array("property1").contains("property2").isEqualTo("test1")""" &&
it.method()== """.array("['property1']").contains("['property2']").isEqualTo("test1")""" &&
it.jsonPath() == """\$.property1[*][?(@.property2 == 'test1')]"""
}
pathAndValues.find {
it.method()== """.array("property1").contains("property3").isEqualTo("test2")""" &&
it.method()== """.array("['property1']").contains("['property3']").isEqualTo("test2")""" &&
it.jsonPath() == """\$.property1[*][?(@.property3 == 'test2')]"""
}
and:
@@ -528,15 +528,15 @@ class JsonToJsonPathsConverterSpec extends Specification {
JsonPaths pathAndValues = new JsonToJsonPathsConverter().transformToJsonPathWithTestsSideValues(new JsonSlurper().parseText(json))
then:
pathAndValues.find {
it.method()== """.array("property1").contains("property2").isEqualTo("test1")""" &&
it.method()== """.array("['property1']").contains("['property2']").isEqualTo("test1")""" &&
it.jsonPath() == """\$.property1[*][?(@.property2 == 'test1')]"""
}
pathAndValues.find {
it.method()== """.array("property1").contains("property3").isEqualTo("test2")""" &&
it.method()== """.array("['property1']").contains("['property3']").isEqualTo("test2")""" &&
it.jsonPath() == """\$.property1[*][?(@.property3 == 'test2')]"""
}
pathAndValues.find {
it.method()== """.array("property1").hasSize(2)""" &&
it.method()== """.array("['property1']").hasSize(2)""" &&
it.jsonPath() == """\$.property1[*]"""
}
and:
@@ -553,11 +553,11 @@ class JsonToJsonPathsConverterSpec extends Specification {
JsonPaths pathAndValues = new JsonToJsonPathsConverter().transformToJsonPathWithTestsSideValues(new JsonSlurper().parseText(json))
then:
pathAndValues.find {
it.method()== """.field("property2").field("property3").isEqualTo("b")""" &&
it.method()== """.field("['property2']").field("['property3']").isEqualTo("b")""" &&
it.jsonPath() == """\$.property2[?(@.property3 == 'b')]"""
}
pathAndValues.find {
it.method()== """.field("property1").isEqualTo("a")""" &&
it.method()== """.field("['property1']").isEqualTo("a")""" &&
it.jsonPath() == """\$[?(@.property1 == 'a')]"""
}
and:
@@ -574,11 +574,11 @@ class JsonToJsonPathsConverterSpec extends Specification {
JsonPaths pathAndValues = new JsonToJsonPathsConverter().transformToJsonPathWithTestsSideValues(json)
then:
pathAndValues.find {
it.method()== """.field("property2").matches("[0-9]{3}")""" &&
it.method()== """.field("['property2']").matches("[0-9]{3}")""" &&
it.jsonPath() == """\$[?(@.property2 =~ /[0-9]{3}/)]"""
}
pathAndValues.find {
it.method()== """.field("property1").isEqualTo("a")""" &&
it.method()== """.field("['property1']").isEqualTo("a")""" &&
it.jsonPath() == """\$[?(@.property1 == 'a')]"""
}
and:
@@ -594,7 +594,7 @@ class JsonToJsonPathsConverterSpec extends Specification {
JsonPaths pathAndValues = new JsonToJsonPathsConverter().transformToJsonPathWithTestsSideValues(json)
then:
pathAndValues.find {
it.method()== """.field("property2").matches("\\\\d+")""" &&
it.method()== """.field("['property2']").matches("\\\\d+")""" &&
it.jsonPath() == """\$[?(@.property2 =~ /\\d+/)]"""
}
and:
@@ -613,11 +613,11 @@ class JsonToJsonPathsConverterSpec extends Specification {
JsonPaths pathAndValues = new JsonToJsonPathsConverter().transformToJsonPathWithTestsSideValues(json)
then:
pathAndValues.find {
it.method()== """.array("errors").contains("property").isEqualTo("bank_account_number")""" &&
it.method()== """.array("['errors']").contains("['property']").isEqualTo("bank_account_number")""" &&
it.jsonPath() == """\$.errors[*][?(@.property == 'bank_account_number')]"""
}
pathAndValues.find {
it.method()== """.array("errors").contains("message").isEqualTo("incorrect_format")""" &&
it.method()== """.array("['errors']").contains("['message']").isEqualTo("incorrect_format")""" &&
it.jsonPath() == """\$.errors[*][?(@.message == 'incorrect_format')]"""
}
and:
@@ -638,15 +638,15 @@ class JsonToJsonPathsConverterSpec extends Specification {
JsonPaths pathAndValues = new JsonToJsonPathsConverter().transformToJsonPathWithTestsSideValues(json)
then:
pathAndValues.find {
it.method()== """.array("errors").contains("property").isEqualTo("bank_account_number")""" &&
it.method()== """.array("['errors']").contains("['property']").isEqualTo("bank_account_number")""" &&
it.jsonPath() == """\$.errors[*][?(@.property == 'bank_account_number')]"""
}
pathAndValues.find {
it.method()== """.array("errors").contains("message").isEqualTo("incorrect_format")""" &&
it.method()== """.array("['errors']").contains("['message']").isEqualTo("incorrect_format")""" &&
it.jsonPath() == """\$.errors[*][?(@.message == 'incorrect_format')]"""
}
pathAndValues.find {
it.method()== """.array("errors").hasSize(1)""" &&
it.method()== """.array("['errors']").hasSize(1)""" &&
it.jsonPath() == """\$.errors[*]"""
}
and:
@@ -674,19 +674,19 @@ class JsonToJsonPathsConverterSpec extends Specification {
JsonPaths pathAndValues = new JsonToJsonPathsConverter().transformToJsonPathWithTestsSideValues(new JsonSlurper().parseText(json))
then:
pathAndValues.find {
it.method()== """.array().field("place").field("bounding_box").array("coordinates").array().arrayField().isEqualTo(38.995548)""" &&
it.method()== """.array().field("['place']").field("['bounding_box']").array("['coordinates']").array().arrayField().isEqualTo(38.995548)""" &&
it.jsonPath() == """\$[*].place.bounding_box.coordinates[*][*][?(@ == 38.995548)]"""
}
pathAndValues.find {
it.method()== """.array().field("place").field("bounding_box").array("coordinates").array().arrayField().isEqualTo(-77.119759)""" &&
it.method()== """.array().field("['place']").field("['bounding_box']").array("['coordinates']").array().arrayField().isEqualTo(-77.119759)""" &&
it.jsonPath() == """\$[*].place.bounding_box.coordinates[*][*][?(@ == -77.119759)]"""
}
pathAndValues.find {
it.method()== """.array().field("place").field("bounding_box").array("coordinates").array().arrayField().isEqualTo(-76.909393)""" &&
it.method()== """.array().field("['place']").field("['bounding_box']").array("['coordinates']").array().arrayField().isEqualTo(-76.909393)""" &&
it.jsonPath() == """\$[*].place.bounding_box.coordinates[*][*][?(@ == -76.909393)]"""
}
pathAndValues.find {
it.method()== """.array().field("place").field("bounding_box").array("coordinates").array().arrayField().isEqualTo(38.791645)""" &&
it.method()== """.array().field("['place']").field("['bounding_box']").array("['coordinates']").array().arrayField().isEqualTo(38.791645)""" &&
it.jsonPath() == """\$[*].place.bounding_box.coordinates[*][*][?(@ == 38.791645)]"""
}
and:
@@ -720,19 +720,19 @@ class JsonToJsonPathsConverterSpec extends Specification {
JsonPaths pathAndValues = new JsonToJsonPathsConverter().transformToJsonPathWithTestsSideValues(new JsonSlurper().parseText(json))
then:
pathAndValues.find {
it.method()== """.array().field("place").field("bounding_box").array("coordinates").array().arrayField().isEqualTo(38.995548)""" &&
it.method()== """.array().field("['place']").field("['bounding_box']").array("['coordinates']").array().arrayField().isEqualTo(38.995548)""" &&
it.jsonPath() == """\$[*].place.bounding_box.coordinates[*][*][?(@ == 38.995548)]"""
}
pathAndValues.find {
it.method()== """.array().field("place").field("bounding_box").array("coordinates").array().arrayField().isEqualTo(-77.119759)""" &&
it.method()== """.array().field("['place']").field("['bounding_box']").array("['coordinates']").array().arrayField().isEqualTo(-77.119759)""" &&
it.jsonPath() == """\$[*].place.bounding_box.coordinates[*][*][?(@ == -77.119759)]"""
}
pathAndValues.find {
it.method()== """.array().field("place").field("bounding_box").array("coordinates").array().arrayField().isEqualTo(-76.909393)""" &&
it.method()== """.array().field("['place']").field("['bounding_box']").array("['coordinates']").array().arrayField().isEqualTo(-76.909393)""" &&
it.jsonPath() == """\$[*].place.bounding_box.coordinates[*][*][?(@ == -76.909393)]"""
}
pathAndValues.find {
it.method()== """.array().field("place").field("bounding_box").array("coordinates").array().arrayField().isEqualTo(38.791645)""" &&
it.method()== """.array().field("['place']").field("['bounding_box']").array("['coordinates']").array().arrayField().isEqualTo(38.791645)""" &&
it.jsonPath() == """\$[*].place.bounding_box.coordinates[*][*][?(@ == 38.791645)]"""
}
pathAndValues.find {
@@ -740,11 +740,11 @@ class JsonToJsonPathsConverterSpec extends Specification {
it.jsonPath() == """\$"""
}
pathAndValues.find {
it.method()== """.array().field("place").field("bounding_box").array("coordinates").array().hasSize(2)""" &&
it.method()== """.array().field("['place']").field("['bounding_box']").array("['coordinates']").array().hasSize(2)""" &&
it.jsonPath() == """\$[*].place.bounding_box.coordinates[*][*]"""
}
pathAndValues.find {
it.method()== """.array().field("place").field("bounding_box").array("coordinates").hasSize(1)""" &&
it.method()== """.array().field("['place']").field("['bounding_box']").array("['coordinates']").hasSize(1)""" &&
it.jsonPath() == """\$[*].place.bounding_box.coordinates[*]"""
}
and: