3
respostas

Testando um controller - dúvida sobre a base de dados usando perfil de teste.

Fiquei um pouco confuso nesta aula, pois na aula anterior foi apresentado que na classe com perfil de test o spring carrega o properties de test e deleta os dados da base após ser executado. Para esse teste com um controller foi realizado uma requisição post passando os parâmetros de um usuário que teoricamente não existe na base de dados para forçar um BADREQUEST. Porém, o meu teste sempre vai gerar como resultado um BadRequest independente do login estando "certo" ou "errado", pois a base de dados sempre vai inicializar como vazia. Então se eu quisesse forçar um erro no teste com um usuário que existe no banco eu teria que persistir e depois utilizar o MockMVC para checar se ele existe. É isso mesmo? e quais anotations eu deveria importar para persistir? se esse for o caso. Tentei importar algumas da aula anterior porém deu erro :( .

3 respostas

Oi Ronaldo,

Verdade!

No caso de testar um login válido, você pode injetar na classe de teste o TestEntityManager e persistir um usuário antes de disparar a requisição.

E então você utiliza o MockMVC para verificar se foi devolvido o código 200.

Bons estudos!

Aproveitando a discussão, como eu faria para usar o TestEntityManager para inserir informações na tabela Usuario_Perfis? Tentei até simular criando uma entidade UsuarioPerfis e colocando uma @EmbeddedId, mas ocorre erro pois o UsuarioPerfis já foi criado. Não possuindo assim, um construtor de uma entidade que me possibilite realizar inserções via código.

Oi Bruno,

Você pode adicionar o cascade no atributo perfis da classe Usuario:

@ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.PERSIST)

E no teste você cria um usuario, adiciona o perfil nele e quando for fazer o insert a JPA vai fazer o insert também na tabela de relacionamento.