Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Dúvida sobre e testes com autenticação

No curso criamos alguns endpoints que necessitam de um cabeçalho de autenticação válido para que o mesmo passe, minha dúvida seria como realizar um teste unitário usando esse cabeçalho?

Escrevi o seguinte teste:

@Test
public void testCadastrar() throws Exception {
    String json = "{\"titulo\": \"Cache\", \"mensagem\": \"Invalidando cache\", \"nomeCurso\": \"Spring Boot\"}";

    request = MockMvcRequestBuilders.post(path).content(json).header("Content-Type", "application/json");
    expectedResult = MockMvcResultMatchers.status().isCreated();

    mock.perform(request).andExpect(expectedResult);
}

E ele esta quebrando, pois retorna um 403, com certeza é a falta do Bearer com o JWT token, como faria para adiciona-lo?

4 respostas

Alterei o test para:

@Test
public void testCadastrar() throws Exception {
    String json = "{\"email\": \"aluno@email.com\", \"senha\": \"123456\"}";
    path = new URI("/auth");

    MockHttpServletRequestBuilder request = MockMvcRequestBuilders.post(path)
            .contentType(MediaType.APPLICATION_JSON)
            .content(json);

    expectedResult = MockMvcResultMatchers.status().isOk();

    String response = mock.perform(request).andExpect(expectedResult).andReturn().getResponse().getContentAsString();
    JSONObject data = new JSONObject(response);

    String jwtToken = data.getString("token");
    json = "{\"titulo\": \"Cache\", \"mensagem\": \"Invalidando cache\", \"nomeCurso\": \"Spring Boot\"}";

    path = new URI("/topicos"); 

    request = MockMvcRequestBuilders.post(path).content(json).header("Content-Type", "application/json").header("Authorization", "Bearer " + jwtToken);
    expectedResult = MockMvcResultMatchers.status().isCreated();

    mock.perform(request).andExpect(expectedResult);
}

E ele passou, porém, o único teste que agora não passa de jeito nenhum é o teste de exclusão, continua retornando 403. A forma como implementei para gerar o token, seria a melhor abordagem? Ou existiria uma outra forma de faze-lo?

Oi Marcos,

Consegue compartilhar o seu projeto?

Opá, consigo sim, acho que já até tinha compartilhado rsrs, segue novamente: https://github.com/maclacerda/spring-boot-course

Obrigado pela ajuda

solução!

Rodrigo,

Achei o problema com a ajuda de um amigo.

Erro

Na classe SecurityConfigurations no curso definimos que apenas o usuário com perfil de MODERADOR poderá realizar a exclusão de tópicos. E eu estava realizando a autenticação com o usuário aluno. Fiz os devidos ajustes e o teste passou.

Obrigado pela atenção.