Oi!
Quando eu fui testar a classe, na hora de eu tentar debugar o código, percebi, no mock, que não está pegando o "secret" que o token deveria gerar, quando executa no método principal, retornando null.
O mock que ajustei atualmente foi feito dessa forma:
DadosCadastroUsuario dadosCadastroUsuario = new DadosCadastroUsuario(
"Nome Cadastro Usuario",
"user.test@plano.com",
"12345",
true
);
List<Perfil> perfis = new ArrayList<>();
var usuario = new Usuario(dadosCadastroUsuario, "12345", perfis);
// Mock do TokenService para retornar um token fictício
when(tokenService.generateToken(usuario)).thenReturn("token_ficticio");
O método em si, eu tinha feito os ajustes, conforme as orientações passadas, mas sempre para na questão da autenticação, que não consigo simular. https://cursos.alura.com.br/forum/topico-duvida-falha-ao-testar-codigo-200-login-controller-414186 Só consigo, no máximo, reproduzir, o cenário de erro 401, porque não requer o token. Conseguem me ajudar, por favor, como que eu faço para simular, para receber o token? Como está o código atual (testes):
@Test
@DisplayName("Deveria devolver código http 200, quando as informações estiverem válidas")
@WithMockUser
void efetuateLoginCenario2() throws Exception {
var dadosAutenticacao = new DadosAutenticacao("user.test@plano.saude", "12345");
DadosCadastroUsuario dadosCadastroUsuario = new DadosCadastroUsuario(
"Nome Cadastro Usuario",
"user.test@plano.com",
"12345",
true
);
List<Perfil> perfis = new ArrayList<>();
var usuario = new Usuario(dadosCadastroUsuario, "12345", perfis);
// Mock do TokenService para retornar um token fictício
when(tokenService.generateToken(usuario)).thenReturn("token_ficticio");
// Mock do AuthenticationManager para simular uma autenticação bem-sucedida
Authentication authentication = mock(Authentication.class);
when(authentication.isAuthenticated()).thenReturn(true);
when(authenticationManager.authenticate(any(Authentication.class))).thenReturn(authentication);
var response = mvc.perform(post("/login")
.contentType(MediaType.APPLICATION_JSON)
.content(dadosAutenticacaoJson.write(dadosAutenticacao).getJson()))
.andReturn().getResponse();
assertThat(response.getStatus()).isEqualTo(HttpStatus.OK.value());
var jsonRetorno = dadosTokenJson.write(new DadosToken("token_ficticio")).getJson();
assertThat(response.getContentAsString()).isEqualTo(jsonRetorno);
}