From 9af70c33d978c21f8677bc04097da313f227ff3f Mon Sep 17 00:00:00 2001 From: Dylan De Faoite Date: Sun, 11 Oct 2026 19:02:39 +0100 Subject: [PATCH] add doesNotRevokeFamily test --- .../vodsystem/security/TokenServiceTest.java | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/src/test/java/com/ddf/vodsystem/security/TokenServiceTest.java b/src/test/java/com/ddf/vodsystem/security/TokenServiceTest.java index 4045feb..418f11b 100644 --- a/src/test/java/com/ddf/vodsystem/security/TokenServiceTest.java +++ b/src/test/java/com/ddf/vodsystem/security/TokenServiceTest.java @@ -281,6 +281,29 @@ class TokenServiceTest { assertEquals(savedToken.getUsedAt(), clock.instant()); } + @Test + void unusedToken_doesNotRevokeFamily() { + TokenFamily tokenFamily = new TokenFamily(); + tokenFamily.setId(1L); + tokenFamily.setUser(createUser(1L, "user", "user")); + tokenFamily.setExpiresAt(Instant.now(clock).plusSeconds(10)); + + RefreshToken refreshToken = new RefreshToken(); + refreshToken.setTokenFamily(tokenFamily); + refreshToken.setExpiresAt(Instant.now(clock).plusSeconds(10)); + + when(refreshTokenRepository.findByHash(any())) + .thenReturn(Optional.of(refreshToken)); + + tokenService.rotate(rawToken); + + verify(refreshTokenRepository, times(2)).save(tokenCaptor.capture()); + RefreshToken newToken = tokenCaptor.getAllValues().stream() + .filter(t -> t.getUsedAt() == null) + .reduce((a, b) -> { throw new AssertionError("expected exactly one unused token saved"); }) + .orElseThrow(() -> new AssertionError("no unused token was saved")); + assertNull(newToken.getTokenFamily().getRevokedAt()); + } } } \ No newline at end of file