blob: 1740481663ff87e5c96c82db3f4de2cd1c6d1746 [file] [log] [blame]
package demo
import grails.testing.mixin.integration.Integration
import groovy.json.JsonOutput
import org.grails.gorm.graphql.plugin.testing.GraphQLSpec
import spock.lang.IgnoreIf
import spock.lang.Specification
import spock.lang.Stepwise
@Stepwise
@Integration
@IgnoreIf({ os.windows })
class SpeakerIntegrationSpec extends Specification implements GraphQLSpec {
void "test creating a speaker"() {
when:
String curlCommand = '''
// tag::curlCommand[]
curl -X "POST" "{url}" \
-H "Content-Type: application/graphql" \
-d $'
mutation {
speakerCreate(speaker: {
firstName: "James"
lastName: "Kleeh"
}) {
id
firstName
lastName
errors {
field
message
}
}
}'
// end::curlCommand[]
'''.toString().replace('{url}', getUrl())
Process process = [ 'bash', '-c', curlCommand ].execute()
process.waitFor()
then:
JsonOutput.prettyPrint(process.text) ==
"""
// tag::response[]
{
"data": {
"speakerCreate": {
"id": 8,
"firstName": "James",
"lastName": "Kleeh",
"errors": [
]
}
}
}
// end::response[]
""".replace('\n// tag::response[]\n', '')
.replace('\n// end::response[]\n', '')
}
void "test updating a speaker"() {
when:
String curlCommand = '''
// tag::updateCurlCommand[]
curl -X "POST" "{url}" \
-H "Content-Type: application/graphql" \
-d $'
mutation {
speakerUpdate(id: 7, speaker: {
bio: "Zachary is a member of the Grails team at OCI"
}) {
id
bio
talks {
id
duration
}
errors {
field
message
}
}
}'
// end::updateCurlCommand[]
'''.toString().replace('{url}', getUrl())
Process process = [ 'bash', '-c', curlCommand ].execute()
process.waitFor()
then:
JsonOutput.prettyPrint(process.text) ==
"""
// tag::updateResponse[]
{
"data": {
"speakerUpdate": {
"id": 7,
"bio": "Zachary is a member of the Grails team at OCI",
"talks": [
{
"id": 14,
"duration": 50
},
{
"id": 15,
"duration": 50
}
],
"errors": [
]
}
}
}
// end::updateResponse[]
""".replace('\n// tag::updateResponse[]\n', '')
.replace('\n// end::updateResponse[]\n', '')
}
void "test deleting a speaker"() {
when:
String curlCommand = '''
// tag::deleteCurlCommand[]
curl -X "POST" "{url}" \
-H "Content-Type: application/graphql" \
-d $'
mutation {
speakerDelete(id: 8) {
success
error
}
}'
// end::deleteCurlCommand[]
'''.toString().replace('{url}', getUrl())
Process process = [ 'bash', '-c', curlCommand ].execute()
process.waitFor()
then:
JsonOutput.prettyPrint(process.text) ==
"""
// tag::deleteResponse[]
{
"data": {
"speakerDelete": {
"success": true,
"error": null //<1>
}
}
}
// end::deleteResponse[]
""".replace('\n// tag::deleteResponse[]\n', '')
.replace('\n// end::deleteResponse[]\n', '')
.replace(' //<1>', '')
}
void "test reading a speaker"() {
when:
String curlCommand = '''
// tag::readCurlCommand[]
curl -X "POST" "{url}" \
-H "Content-Type: application/graphql" \
-d $'
{
speaker(id: 1) {
firstName
lastName
bio
}
}'
// end::readCurlCommand[]
'''.toString().replace('{url}', getUrl())
Process process = [ 'bash', '-c', curlCommand ].execute()
process.waitFor()
then:
JsonOutput.prettyPrint(process.text) ==
"""
// tag::readResponse[]
{
"data": {
"speaker": {
"firstName": "Jeff Scott",
"lastName": "Brown",
"bio": "Jeff is a co-founder of the Grails framework, and a core member of the Grails development team."
}
}
}
// end::readResponse[]
""".replace('\n// tag::readResponse[]\n', '')
.replace('\n// end::readResponse[]\n', '')
}
void "test fetch speaker's list"() {
when:
String curlCommand = '''
// tag::listCurlCommand[]
curl -X "POST" "{url}" \
-H "Content-Type: application/graphql" \
-d $'
{
speakerList(max: 3) {
id
name
talks {
title
}
}
}'
// end::listCurlCommand[]
'''.toString().replace('{url}', getUrl())
Process process = [ 'bash', '-c', curlCommand ].execute()
process.waitFor()
then:
JsonOutput.prettyPrint(process.text) ==
"""
// tag::listResponse[]
{
"data": {
"speakerList": [
{
"id": 1,
"name": "Jeff Scott Brown",
"talks": [
{
"title": "Polyglot Web Development with Grails 3"
},
{
"title": "REST With Grails 3"
},
{
"title": "Testing in Grails 3"
}
]
},
{
"id": 2,
"name": "Graeme Rocher",
"talks": [
{
"title": "What's New in Grails?"
},
{
"title": "The Latest and Greatest in GORM"
}
]
},
{
"id": 3,
"name": "Paul King",
"talks": [
{
"title": "Groovy: The Awesome Parts"
}
]
}
]
}
}
// end::listResponse[]
""".replace('\n// tag::listResponse[]\n', '')
.replace('\n// end::listResponse[]\n', '')
}
void "test fetch speaker count"() {
when:
String curlCommand = '''
// tag::countCurlCommand[]
curl -X "POST" "{url}" \
-H "Content-Type: application/graphql" \
-d $'
{
speakerCount
}'
// end::countCurlCommand[]
'''.toString().replace('{url}', getUrl())
Process process = [ 'bash', '-c', curlCommand ].execute()
process.waitFor()
then:
JsonOutput.prettyPrint(process.text) ==
"""
// tag::countResponse[]
{
"data": {
"speakerCount": 7
}
}
// end::countResponse[]
""".replace('\n// tag::countResponse[]\n', '')
.replace('\n// end::countResponse[]\n', '')
}
}