mirror of
https://github.com/Frooodle/Stirling-PDF.git
synced 2025-08-11 13:48:37 +02:00
Create JPATokenRepositoryImplTest.java
This commit is contained in:
parent
5fd03a68a8
commit
076c9393ea
@ -0,0 +1,140 @@
|
||||
package stirling.software.proprietary.security.database.repository;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
import static org.mockito.Mockito.*;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.Optional;
|
||||
|
||||
import org.junit.jupiter.api.DisplayName;
|
||||
import org.junit.jupiter.api.Nested;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.mockito.ArgumentCaptor;
|
||||
import org.springframework.security.web.authentication.rememberme.PersistentRememberMeToken;
|
||||
|
||||
import stirling.software.proprietary.security.model.PersistentLogin;
|
||||
|
||||
class JPATokenRepositoryImplTest {
|
||||
|
||||
private final PersistentLoginRepository persistentLoginRepository =
|
||||
mock(PersistentLoginRepository.class);
|
||||
private final JPATokenRepositoryImpl tokenRepository =
|
||||
new JPATokenRepositoryImpl(persistentLoginRepository);
|
||||
|
||||
@Nested
|
||||
@DisplayName("createNewToken")
|
||||
class CreateNewTokenTests {
|
||||
|
||||
@Test
|
||||
@DisplayName("should save new PersistentLogin with correct values")
|
||||
void shouldSaveNewToken() {
|
||||
Date date = new Date();
|
||||
PersistentRememberMeToken token =
|
||||
new PersistentRememberMeToken("user1", "series123", "tokenABC", date);
|
||||
|
||||
tokenRepository.createNewToken(token);
|
||||
|
||||
ArgumentCaptor<PersistentLogin> captor = ArgumentCaptor.forClass(PersistentLogin.class);
|
||||
verify(persistentLoginRepository).save(captor.capture());
|
||||
|
||||
PersistentLogin saved = captor.getValue();
|
||||
assertEquals("series123", saved.getSeries());
|
||||
assertEquals("user1", saved.getUsername());
|
||||
assertEquals("tokenABC", saved.getToken());
|
||||
assertEquals(date, saved.getLastUsed());
|
||||
}
|
||||
}
|
||||
|
||||
@Nested
|
||||
@DisplayName("updateToken")
|
||||
class UpdateTokenTests {
|
||||
|
||||
@Test
|
||||
@DisplayName("should update existing token if found")
|
||||
void shouldUpdateExistingToken() {
|
||||
PersistentLogin existing = new PersistentLogin();
|
||||
existing.setSeries("series123");
|
||||
existing.setUsername("user1");
|
||||
existing.setToken("oldToken");
|
||||
existing.setLastUsed(new Date());
|
||||
|
||||
when(persistentLoginRepository.findById("series123")).thenReturn(Optional.of(existing));
|
||||
|
||||
Date newDate = new Date();
|
||||
tokenRepository.updateToken("series123", "newToken", newDate);
|
||||
|
||||
assertEquals("newToken", existing.getToken());
|
||||
assertEquals(newDate, existing.getLastUsed());
|
||||
verify(persistentLoginRepository).save(existing);
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("should do nothing if token not found")
|
||||
void shouldDoNothingIfNotFound() {
|
||||
when(persistentLoginRepository.findById("unknownSeries")).thenReturn(Optional.empty());
|
||||
|
||||
tokenRepository.updateToken("unknownSeries", "newToken", new Date());
|
||||
|
||||
verify(persistentLoginRepository, never()).save(any());
|
||||
}
|
||||
}
|
||||
|
||||
@Nested
|
||||
@DisplayName("getTokenForSeries")
|
||||
class GetTokenForSeriesTests {
|
||||
|
||||
@Test
|
||||
@DisplayName("should return PersistentRememberMeToken if found")
|
||||
void shouldReturnTokenIfFound() {
|
||||
Date date = new Date();
|
||||
PersistentLogin login = new PersistentLogin();
|
||||
login.setSeries("series123");
|
||||
login.setUsername("user1");
|
||||
login.setToken("tokenXYZ");
|
||||
login.setLastUsed(date);
|
||||
|
||||
when(persistentLoginRepository.findById("series123")).thenReturn(Optional.of(login));
|
||||
|
||||
PersistentRememberMeToken result = tokenRepository.getTokenForSeries("series123");
|
||||
|
||||
assertNotNull(result);
|
||||
assertEquals("user1", result.getUsername());
|
||||
assertEquals("series123", result.getSeries());
|
||||
assertEquals("tokenXYZ", result.getTokenValue());
|
||||
assertEquals(date, result.getDate());
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("should return null if token not found")
|
||||
void shouldReturnNullIfNotFound() {
|
||||
when(persistentLoginRepository.findById("series123")).thenReturn(Optional.empty());
|
||||
|
||||
PersistentRememberMeToken result = tokenRepository.getTokenForSeries("series123");
|
||||
|
||||
assertNull(result);
|
||||
}
|
||||
}
|
||||
|
||||
@Nested
|
||||
@DisplayName("removeUserTokens")
|
||||
class RemoveUserTokensTests {
|
||||
|
||||
@Test
|
||||
@DisplayName("should call deleteByUsername normally")
|
||||
void shouldCallDeleteByUsername() {
|
||||
tokenRepository.removeUserTokens("user1");
|
||||
verify(persistentLoginRepository).deleteByUsername("user1");
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("should swallow exception if deleteByUsername fails")
|
||||
void shouldSwallowException() {
|
||||
doThrow(new RuntimeException("DB error"))
|
||||
.when(persistentLoginRepository)
|
||||
.deleteByUsername("user1");
|
||||
|
||||
assertDoesNotThrow(() -> tokenRepository.removeUserTokens("user1"));
|
||||
verify(persistentLoginRepository).deleteByUsername("user1");
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user