Na nossa primeira dica de Spring ensinamos como simular a autenticação no ambiente de testes. Tal como prometido, agora vamos ensinar como realizar esta mesma tarefa no Grails 3.x.
É um procedimento bastante simples, e que ficará bem mais fácil pois você vai usar o código fonte que disponibilizamos para você. Sendo assim vamos direto ao procedimento.
1 – Descubra qual a versão do Spring Security está sendo usada no seu projeto
Execute o comando grails dependency-report. Ele irá gerar uma saída contendo todas as dependências usadas em seu projeto. Como verá, é gerada uma saída muito longa. Facilite sua vida direcionando-a para um arquivo, tal como no exemplo a seguir:
grails dependency-report > arquivo
Se estiver usando Linux, nem precisa direcionar a saída, execute o comando a seguir para descobrir a versão do Spring Security:
grails dependency-report | grep spring-security-core
2 – Inclua as bibliotecas de teste do Spring Security no arquivo build.gradle
Em nosso exemplo, estamos usando a versão 4.1.3.RELEASE. Veja como ficou a inclusão dentro do bloco dependencies:
compile "org.springframework.security:spring-security-test:4.1.3.RELEASE"
3 – Use o nosso serviço!
Para facilitar a sua vida, deixamos preparado um serviço que você deverá alterar muito pouco em sua aplicação. Você pode obtê-lo neste repositório que disponibilizamos no GitHub.
O nome que propusemos no serviço é MockSecurityService, e tudo o que você precisa fazer é chamar a função mockUsuario, que recebe como parâmetro o usuário que deveria estar autenticado nos seus testes de integração e a lista de permissões que este usuário deverá possuir durante a execução dos testes, tal como exposto no exemplo abaixo:
// o usuário que possui acesso a tudo!
mockService.mockUsuario(Usuario.findByUsername('admin'), Permissao.list())
Altere à vontade o código fonte que disponibilizamos para que possa ser usado em seus testes!
Vocês não explicaram como isto funciona!
Explicamos sim: leia a nossa primeira dica de Spring. E uma dica final: quer dominar o Grails? Conheça as tecnologias nas quais ele se baseia: Spring, Hibernate e todas as outras.