Fixed top level array issues (#267)

Fixes #266
This commit is contained in:
Marcin Grzejszczak
2016-05-08 17:35:51 +02:00
parent 4c85a4bca8
commit 38cc614fc7
5 changed files with 52 additions and 7 deletions

View File

@@ -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

View File

@@ -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 ->

View File

@@ -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[]

View File

@@ -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) {

View File

@@ -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