Chcę napisać test dla funkcji uwierzytelniania logowania z serwisu:
public AuthenticationResponse login(LoginRequest loginRequest) throws Exception {
Authentication authentication = authenticationManager.authenticate(
new UsernamePasswordAuthenticationToken(
loginRequest.getUsername(),
loginRequest.getPassword()));
SecurityContextHolder.getContext().setAuthentication(authentication);
String token = jwtProvider.generateToken(authentication);
boolean admin = false;
if(authentication.getAuthorities().stream().anyMatch(ga -> ga.getAuthority().equals("ROLE_ADMIN"))) {
admin = true;
}
return new AuthenticationResponse(token, loginRequest.getUsername(), admin);
}
Problem leży w tym że nie wiem jak sprawić żeby authenticationManager.authenticate zwracał mi jakiś obiekt.
Mój test wygląda na razie w ten sposób:
@Test
public void login_Success() throws Exception {
// args
LoginRequest loginRequest = new LoginRequest("Quokka", "tajnaQuokka");
// when
Mockito.when(jwtProvider.generateToken(Mockito.any())).thenAnswer(i -> token);
// call
AuthenticationResponse response = authService.login(loginRequest);
// tests
assertEquals(response, new AuthenticationResponse(token, loginRequest.getUsername(), false));
}
i działał dopóki nie postanowiłem do aplikacji dodać roli admina i zacząłem sprawdzać zawartości 'authentication' w ifie:
java.lang.NullPointerException: Cannot invoke "org.springframework.security.core.Authentication.getAuthorities()" because "authentication" is null