Я хочу создать метод, который будет удалять объекты VerificationToken
из базы данных старше 30 минут. VerificationToken.class
выглядит так:
@Builder
@AllArgsConstructor
class VerificationToken extends AbstractBaseEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(unique = true)
private String value;
@Column(unique = true)
private String email;
@CreatedDate private LocalDateTime created;
VerificationToken() {}
VerificationToken(String value, String email) {
this.value = value;
this.email = email;
}
public Long getId() {
return id;
}
String getValue() {
return value;
}
public String getEmail() {
return email;
}
LocalDateTime getCreated() {
return created;
}
}
Я использую репозиторий Spring Data JPA как:
interface VerificationTokenRepository extends JpaRepository<VerificationToken, Long> {
void deleteAllByCreatedLessThan(LocalDateTime localDateTime);
}
Мой сервис выглядит так:
@Service
@AllArgsConstructor
public class VerificationService {
private VerificationTokenRepository verificationTokenRepository;
void removeUnusedVerificationTokens(LocalDateTime localDateTime) {
verificationTokenRepository.deleteAllByCreatedLessThan(localDateTime.minusMinutes(30));
}
}
После этого короткогореализации, я хочу проверить это, как показано ниже:
@ExtendWith(MockitoExtension.class)
class VerificationServiceTest {
@InjectMocks
private VerificationService verificationService;
@Mock
private VerificationTokenRepository tokenRepository;
@BeforeEach
void setUp() {
verificationService = new VerificationService(tokenRepository);
}
@Test
void removeUnusedVerificationTokens() {
//given
given(tokenRepository.findAll()).willReturn(verificationTokenDataStab());
//when
verificationService.removeUnusedVerificationTokens(LocalDateTime.now().minusMinutes(30));
//then
assertAll(() -> assertEquals(tokenRepository.findAll().size(), 3));
}
List<VerificationToken> verificationTokenDataStab() {
return
List
.of(
VerificationToken.builder().created(LocalDateTime.now().minusMinutes(65)).build(),
VerificationToken.builder().created(LocalDateTime.now().minusMinutes(22)).build(),
VerificationToken.builder().created(LocalDateTime.now().minusMinutes(200)).build(),
VerificationToken.builder().created(LocalDateTime.now().minusMinutes(90)).build(),
VerificationToken.builder().created(LocalDateTime.now().minusMinutes(10)).build(),
VerificationToken.builder().created(LocalDateTime.now().minusMinutes(5)).build(),
VerificationToken.builder().created(LocalDateTime.now().minusMinutes(35)).build());
}
}
Проблема в том, что в моем утверждении я ожидаю размер 3
после вызова метода removeUnusedVerificationTokens
, но после того, как размер всей коллекции не изменился, и он все еще7
.
Согласно документации, метод: void deleteAll()
из CrudRepository
Удаляет все сущности, управляемые хранилищем
Так что я предполагаю, что deleteAll
должно повлиять на всю коллекцию, но этого не произошло.
Казалось бы, метод должен работать правильно, но, в конце концов, тест не может это подтвердить. Я буду благодарен за предложения, как исправить вышеупомянутый запрос Spring Data для достижения цели.