@@ -90,7 +90,9 @@ class DelegatingJsonVerifiable implements MethodBufferingJsonVerifiable {
|
||||
|
||||
@Override
|
||||
public MethodBufferingJsonVerifiable arrayField() {
|
||||
return new DelegatingJsonVerifiable(delegate.arrayField(), methodsBuffer);
|
||||
DelegatingJsonVerifiable verifiable = new DelegatingJsonVerifiable(delegate.arrayField(), methodsBuffer);
|
||||
verifiable.methodsBuffer.append(".arrayField()");
|
||||
return verifiable;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -59,6 +59,11 @@ class JsonToJsonPathsConverter {
|
||||
return convertWithKey(List, key, value as Map, closure)
|
||||
} else if (value instanceof Map) {
|
||||
return convertWithKey(Map, key, value as Map, closure)
|
||||
// JSON with a list of primitives ["a", "b", "c"] in root issue #266
|
||||
} else if (key.isIteratingOverNamelessArray() && value instanceof List && listContainsOnlyPrimitives(value)) {
|
||||
value.each {
|
||||
traverseRecursively(Object, key.arrayField().contains(it), it, closure)
|
||||
}
|
||||
} else if (value instanceof List) {
|
||||
MethodBufferingJsonVerifiable jsonPathVerifiable = createAsserterFromList(key, value)
|
||||
value.each { def element ->
|
||||
|
||||
@@ -1199,6 +1199,39 @@ World.'''"""
|
||||
test.contains('assertThatJson(parsedJson).array().contains("id").matches("[0-9]+")')
|
||||
}
|
||||
|
||||
@Issue('266')
|
||||
def "should generate proper test code with top level array using #methodBuilderName"() {
|
||||
given:
|
||||
GroovyDsl contractDsl = GroovyDsl.make {
|
||||
request {
|
||||
method 'GET'
|
||||
urlPath '/api/tags'
|
||||
}
|
||||
response {
|
||||
status 200
|
||||
body(["Java", "Java8", "Spring", "SpringBoot", "Stream"])
|
||||
headers {
|
||||
header('Content-Type': 'application/json;charset=UTF-8')
|
||||
}
|
||||
}
|
||||
}
|
||||
MethodBodyBuilder builder = methodBuilder(contractDsl)
|
||||
BlockBuilder blockBuilder = new BlockBuilder(" ")
|
||||
when:
|
||||
builder.then(blockBuilder)
|
||||
def test = blockBuilder.toString()
|
||||
then:
|
||||
test.contains('assertThatJson(parsedJson).arrayField().contains("Java8").value()')
|
||||
test.contains('assertThatJson(parsedJson).arrayField().contains("Spring").value()')
|
||||
test.contains('assertThatJson(parsedJson).arrayField().contains("Java").value()')
|
||||
test.contains('assertThatJson(parsedJson).arrayField().contains("Stream").value()')
|
||||
test.contains('assertThatJson(parsedJson).arrayField().contains("SpringBoot").value()')
|
||||
where:
|
||||
methodBuilderName | methodBuilder
|
||||
"MockMvcSpockMethodBuilder" | { GroovyDsl dsl -> new MockMvcSpockMethodRequestProcessingBodyBuilder(dsl) }
|
||||
"MockMvcJUnitMethodBuilder" | { GroovyDsl dsl -> new MockMvcJUnitMethodBodyBuilder(dsl) }
|
||||
}
|
||||
|
||||
|
||||
GroovyDsl dslForDocs =
|
||||
// tag::dsl_example[]
|
||||
|
||||
@@ -4,6 +4,7 @@ import com.jayway.jsonpath.Configuration
|
||||
import com.jayway.jsonpath.DocumentContext
|
||||
import com.jayway.jsonpath.JsonPath
|
||||
import com.jayway.jsonpath.Option
|
||||
import com.toomuchcoding.jsonassert.JsonAssertion
|
||||
import groovy.json.JsonOutput
|
||||
import groovy.json.JsonSlurper
|
||||
import net.minidev.json.JSONArray
|
||||
@@ -533,23 +534,27 @@ class JsonToJsonPathsConverterSpec extends Specification {
|
||||
JsonPaths pathAndValues = JsonToJsonPathsConverter.transformToJsonPathWithTestsSideValues(new JsonSlurper().parseText(json))
|
||||
then:
|
||||
pathAndValues.find {
|
||||
it.method()== """.array().field("place").field("bounding_box").array("coordinates").array().contains(38.995548).value()""" &&
|
||||
it.method()== """.array().field("place").field("bounding_box").array("coordinates").array().arrayField().contains(38.995548).value()""" &&
|
||||
it.jsonPath() == """\$[*].place.bounding_box.coordinates[*][*][?(@ == 38.995548)]"""
|
||||
}
|
||||
pathAndValues.find {
|
||||
it.method()== """.array().field("place").field("bounding_box").array("coordinates").array().contains(-77.119759).value()""" &&
|
||||
it.method()== """.array().field("place").field("bounding_box").array("coordinates").array().arrayField().contains(-77.119759).value()""" &&
|
||||
it.jsonPath() == """\$[*].place.bounding_box.coordinates[*][*][?(@ == -77.119759)]"""
|
||||
}
|
||||
pathAndValues.find {
|
||||
it.method()== """.array().field("place").field("bounding_box").array("coordinates").array().contains(-76.909393).value()""" &&
|
||||
it.method()== """.array().field("place").field("bounding_box").array("coordinates").array().arrayField().contains(-76.909393).value()""" &&
|
||||
it.jsonPath() == """\$[*].place.bounding_box.coordinates[*][*][?(@ == -76.909393)]"""
|
||||
}
|
||||
pathAndValues.find {
|
||||
it.method()== """.array().field("place").field("bounding_box").array("coordinates").array().contains(38.791645).value()""" &&
|
||||
it.method()== """.array().field("place").field("bounding_box").array("coordinates").array().arrayField().contains(38.791645).value()""" &&
|
||||
it.jsonPath() == """\$[*].place.bounding_box.coordinates[*][*][?(@ == 38.791645)]"""
|
||||
}
|
||||
and:
|
||||
pathAndValues.size() == 4
|
||||
pathAndValues.size() == 4
|
||||
and:
|
||||
pathAndValues.each {
|
||||
JsonAssertion.assertThat(json).matchesJsonPath(it.jsonPath())
|
||||
}
|
||||
}
|
||||
|
||||
private void assertThatJsonPathsInMapAreValid(String json, JsonPaths pathAndValues) {
|
||||
|
||||
@@ -2,7 +2,7 @@ nexusUsername =
|
||||
nexusPassword =
|
||||
|
||||
wiremockVersion = 2.0.10-beta
|
||||
jsonassertVersion = 0.4.1
|
||||
jsonassertVersion = 0.4.2
|
||||
|
||||
BOM_VERSION=Brixton-1.0.0.RC1
|
||||
springBootVersion=1.3.3.RELEASE
|
||||
|
||||
Reference in New Issue
Block a user