I am new to contract testing and want to write a groovy contract for a response which contains sub objects with strings list of dictionaries and so on. I have a response like this:
{
"data": [
{
"categories": [
{
"categories": [],
"oid": "abc",
"type": "xyz"
},
{
"categories": [],
"oid": "abb",
"type": "xyy"
}
],
"oid": "ab"
}
],
"meta": {
"datatype": "text",
"language": "x",
"market": "qw",
"provider": "AFP",
"status": "ok",
"statusInfo": {},
"supportedLanguages": [
"x"
]
}
}
and for that I have written the following contract:
Contract.make {
request {
method 'GET'
url '/foo'
}
response {
status 200
body(
"data" : [
(
"categories": [
(
"categories" : [],
"oid" : anyNonEmptyString(),
"type" : "xyz"
),
(
"categories" : [],
"oid" : anyNonEmptyString(),
"type" : "xyy"
)
]
"oid" : regex('\w')
)
],
"meta" : (
"datatype": "text",
"language": "x",
"market": "qw",
"provider": "AFP",
"status": "ok",
"statusInfo": (),
"supportedLanguages": ["x"]
)
)
headers {
contentType(applicationJson())
}
}
}
But is not working properly. Can you help me to know what I am doing wrong over here.
Your contract is invalid. You're using parentheses where you should be using brackets
Contract.make {
request {
method 'GET'
url '/foo'
}
response {
status 200
body(
"data" : [
(
"categories": [
[ // was (
"categories" : [],
"oid" : anyNonEmptyString(),
"type" : "xyz"
], // was )
[ // was (
"categories" : [],
"oid" : anyNonEmptyString(),
"type" : "xyy"
] // was )
]
"oid" : regex('\w')
)
],
"meta" : [ // was (
"datatype": "text",
"language": "x",
"market": "qw",
"provider": "AFP",
"status": "ok",
"statusInfo": [:], // was ()
"supportedLanguages": ["x"]
] // was )
)
headers {
contentType(applicationJson())
}
}
}