Hi,
ich habe eine logout funktion in meiner Spring boot maven Anwendung integriert und diese funktioniert auch einwandfrei. Ich möchte mein logout System jetzt aber noch mit Tests absichern. Ich nutze SonarQube als mein Code Analysetool und das hat zuvor auch immer ohne Probleme funktioniert. Beim folgenden Code bin ich mir aber eigentlich relativ sicher, dass dieserm getestet sein müsste, obwohl SonarQube mir das Ganze als untestet anzeigt.
Hier ist mein Code:
und ich möchte mit dem folgenden Test testen, ob das Programm garnichts macht, wenn der authHeader nicht Bearer enthält.
meinem Verständnis nach müsste also der Test von eben diesen Part hier:
zumindest als teilweise getestet ansehen. Habe ich hier einen Denkfehler?
Danke schonmal im Vorraus!
ich habe eine logout funktion in meiner Spring boot maven Anwendung integriert und diese funktioniert auch einwandfrei. Ich möchte mein logout System jetzt aber noch mit Tests absichern. Ich nutze SonarQube als mein Code Analysetool und das hat zuvor auch immer ohne Probleme funktioniert. Beim folgenden Code bin ich mir aber eigentlich relativ sicher, dass dieserm getestet sein müsste, obwohl SonarQube mir das Ganze als untestet anzeigt.
Hier ist mein Code:
Java:
@Service
@RequiredArgsConstructor
public class LogoutService implements LogoutHandler {
private final TokenRepository tokenRepository;
@Override
public void logout(
HttpServletRequest request, //Infos über die Eingegangene Request Header Body usw
HttpServletResponse response, //Infos über response die rausgehen wird
Authentication authentication) { //Enthält infos über berechtigung des Users
final String authHeader = request.getHeader("Authorization");
final String jwt;
if (authHeader == null || !authHeader.startsWith("Bearer ")) {
return;
}
jwt = authHeader.substring(7); //Schneidet quasi den Token aus diesem authHeader raus
var storedToken = tokenRepository.findByToken(jwt)
.orElse(null);
if(storedToken != null) {
storedToken.setExpired(true);
storedToken.setRevoked(true);
tokenRepository.save(storedToken);
}
}
}
und ich möchte mit dem folgenden Test testen, ob das Programm garnichts macht, wenn der authHeader nicht Bearer enthält.
Code:
private final MockHttpServletRequest request = new MockHttpServletRequest();
@Mock
private LogoutService logoutService;
@Mock
TokenRepository tokenRepository;
private final MockHttpServletResponse response = new MockHttpServletResponse();
@Mock
Authentication authentication;
@BeforeEach
public void setup() {
MockitoAnnotations.openMocks(this);
}
@Test
void testLogoutService_MakeSureToDoNothingIfAuthHeaderIsInvalid() {
request.addHeader("Authorization", "invalidHeader");
String jwt = request.getHeader("Authorization");
logoutService.logout(request, response, authentication);
verify(tokenRepository, times(0)).findByToken(jwt);
}
meinem Verständnis nach müsste also der Test von eben diesen Part hier:
Code:
if (authHeader == null || !authHeader.startsWith("Bearer ")) {
return;
}
zumindest als teilweise getestet ansehen. Habe ich hier einen Denkfehler?
Danke schonmal im Vorraus!