Add unit tests for controller

This commit is contained in:
Mariusz Kuligowski 2018-03-15 23:59:33 +01:00
parent 8384da6aff
commit e29c0c5b38
1 changed files with 82 additions and 0 deletions

View File

@ -0,0 +1,82 @@
package com.baeldung.grails
import grails.testing.gorm.DomainUnitTest
import grails.testing.web.controllers.ControllerUnitTest
import spock.lang.*
class StudentControllerSpec extends Specification implements ControllerUnitTest<StudentController>, DomainUnitTest<Student> {
void "Test the index action returns the correct model"() {
given:
controller.studentService = Mock(StudentService) {
list() >> [new Student(firstName: 'John',lastName: 'Doe')]
}
when:"The index action is executed"
controller.index()
then:"The model is correct"
model.studentList.size() == 1
model.studentList[0].firstName == 'John'
model.studentList[0].lastName == 'Doe'
}
void "Test the create action returns the correct model"() {
when:"The create action is executed"
controller.create()
then:"The model is correctly created"
model.student!= null
}
void "Test the show action with a null id"() {
given:
controller.studentService = Mock(StudentService) {
1 * get(null) >> null
}
when:"The show action is executed with a null domain"
controller.show(null)
then:"A 404 error is returned"
response.status == 404
}
void "Test the show action with a valid id"() {
given:
controller.studentService = Mock(StudentService) {
1 * get(2) >> new Student(firstName: 'John',lastName: 'Doe')
}
when:"A domain instance is passed to the show action"
controller.show(2)
then:"A model is populated containing the domain instance"
model.student instanceof Student
and:"And student is John Doe"
model.student.firstName == 'John'
model.student.lastName == 'Doe'
}
void "Test the delete action with an instance"() {
given:
controller.studentService = Mock(StudentService) {
1 * delete(2)
}
when:"The domain instance is passed to the delete action"
request.contentType = FORM_CONTENT_TYPE
request.method = 'DELETE'
controller.delete(2)
then:"The user is redirected to index"
response.redirectedUrl == '/student/index'
}
}