I tried in my Unit Test to test duplicate forms, as in the docs, and it worked. http://grails.imtqy.com/grails-doc/3.0.x/guide/testing.html#unitTestingControllers
But in my integration test, it was always unsuccessful and flagged as invalidToken. I write it the same way as Unit Test in the tokenHolder part.
So how to handle a valid withForm token in an integration test?
My integration test:
@TestFor(RegisterTestedController) class RegisterTestedControllerIntSpec extends Specification { void "test insert data register"() { given: controller.params.username == 'babaenciel' controller.params.companyName == 'tamago' when: def tokenHolder = SynchronizerTokensHolder.store(session) params[SynchronizerTokensHolder.TOKEN_URI] = '/registerTested/signUp' params[SynchronizerTokensHolder.TOKEN_KEY] = tokenHolder.generateToken(params[SynchronizerTokensHolder.TOKEN_URI]) controller.signUp() then: controller.modelAndView.model.parameter.username == 'babaenciel' controller.modelAndView.model.parameter.companyName == 'tamago' } }
Controller:
class RegisterTestedController { def signUp() { log.info("session: " + session.properties) log.info("request: " + request.properties) log.info("params: " + params) def invalidToken = false withForm { invalidToken = false }.invalidToken { invalidToken = true } log.info("invalid token: " + invalidToken) if(invalidToken) { flash.code = 'alert-red' flash.message = message(code: "error.general.multipleSubmission") redirect action:'index' return } render view: 'index', model: [parameter: params] } }
source share