grails-profiles/rest-api/templates/artifacts/scaffolding/Spec.groovy (159 lines of code) (raw):

<%=packageName ? "package ${packageName}" : ''%> import spock.lang.* import static org.springframework.http.HttpStatus.OK import static org.springframework.http.HttpStatus.NOT_FOUND import static org.springframework.http.HttpStatus.NO_CONTENT import static org.springframework.http.HttpStatus.CREATED import static org.springframework.http.HttpStatus.UNPROCESSABLE_ENTITY import grails.validation.ValidationException import grails.testing.web.controllers.ControllerUnitTest import grails.testing.gorm.DomainUnitTest import grails.plugin.json.view.JsonViewGrailsPlugin class ${className}ControllerSpec extends Specification implements ControllerUnitTest<${className}Controller>, DomainUnitTest<${className}> { void setupSpec() { defineBeans(new JsonViewGrailsPlugin(applicationContext: applicationContext)) } def populateValidParams(params) { assert params != null // TODO: Populate valid properties like... //params["name"] = 'someValidName' assert false, "TODO: Provide a populateValidParams() implementation for this generated test suite" } void "Test the index action returns the correct response"() { given: controller.${propertyName}Service = Mock(${className}Service) { 1 * list(_) >> [] 1 * count() >> 0 } when:"The index action is executed" controller.index() then:"The response is correct" response.text == '[]' } void "Test the save action with a null instance"() { when: request.contentType = JSON_CONTENT_TYPE request.method = 'POST' controller.save() then: response.status == UNPROCESSABLE_ENTITY.value() } void "Test the save action correctly persists"() { given: controller.${propertyName}Service = Mock(${className}Service) { 1 * save(_ as ${className}) } when: response.reset() request.contentType = JSON_CONTENT_TYPE request.method = 'POST' populateValidParams(params) request.json = new ${className}(params) controller.save() then: response.status == CREATED.value() response.json } void "Test the save action with an invalid instance"() { given: controller.${propertyName}Service = Mock(${className}Service) { 1 * save(_ as ${className}) >> { ${className} ${propertyName} -> throw new ValidationException("Invalid instance", ${propertyName}.errors) } } when: request.contentType = JSON_CONTENT_TYPE request.method = 'POST' populateValidParams(params) request.json = new ${className}(params) controller.save() then: response.status == UNPROCESSABLE_ENTITY.value() response.json } void "Test the show action with a null id"() { given: controller.${propertyName}Service = Mock(${className}Service) { 1 * get(null) >> null } when:"The show action is executed with a null domain" controller.show() then:"A 404 error is returned" response.status == NOT_FOUND.value() } void "Test the show action with a valid id"() { given: controller.${propertyName}Service = Mock(${className}Service) { 1 * get(2) >> new ${className}() } when:"A domain instance is passed to the show action" params.id = 2 controller.show() then:"A model is populated containing the domain instance" response.status == OK.value() response.json == [:] } void "Test the update action with a null instance"() { when: request.contentType = JSON_CONTENT_TYPE request.method = 'PUT' controller.update() then: response.status == UNPROCESSABLE_ENTITY.value() } void "Test the update action correctly persists"() { given: controller.${propertyName}Service = Mock(${className}Service) { 1 * save(_ as ${className}) } when: response.reset() request.contentType = JSON_CONTENT_TYPE request.method = 'PUT' populateValidParams(params) def instance = new ${className}(params) instance.id = 1 instance.version = 0 controller.update(instance) then: response.status == OK.value() response.json } void "Test the update action with an invalid instance"() { given: controller.${propertyName}Service = Mock(${className}Service) { 1 * save(_ as ${className}) >> { ${className} ${propertyName} -> throw new ValidationException("Invalid instance", ${propertyName}.errors) } } when: request.contentType = JSON_CONTENT_TYPE request.method = 'PUT' def instance = new ${className}(params) instance.id = 1 instance.version = 0 controller.update(instance) then: response.status == UNPROCESSABLE_ENTITY.value() response.json } void "Test the delete action with a null instance"() { when: request.contentType = JSON_CONTENT_TYPE request.method = 'DELETE' controller.delete() then: response.status == NOT_FOUND.value() } void "Test the delete action with an instance"() { given: controller.${propertyName}Service = Mock(${className}Service) { 1 * delete(2) >> new ${className}(id: 2) } when: request.contentType = JSON_CONTENT_TYPE request.method = 'DELETE' params.id = 2 controller.delete() then: response.status == NO_CONTENT.value() } }