Napisałem funkcje która sprawdza czy dane w bazie danych są takie same jak otrzymane z zewnętrznego źródła, jeżeli nie są takie same to wszystkie dane z bazy są usuwane i wstawiane są te z zewnętrznego źródła. Tak wygląda ta funkcja
public <T> Mono<Void> replaceObjectsIfNotAlreadyStored(List<T> products, ReactiveCrudRepository<T, String> objRepository) {
return objRepository.findAll()
.collectList()
.filter(productsList -> !areAlreadyInDb(productsList, products))
.flatMap(products1 -> objRepository.deleteAll()).
doOnSuccess(products1 -> objRepository.saveAll(products).collectList());
}
Ale nie przechodzi testów
@Test
public void replaceObjectsIfNotAlreadyStoredNeg() {
repository.saveAll(products)
.collectList()
.block();
checksumService.replaceObjectsIfNotAlreadyStored(otherList, repository).block();
List<Product> current = repository.findAll()
.collectList()
.block();
assertEquals(current, otherList);
repository.deleteAll()
.block();
}
Zwracana lista current jest pusta, żadnymi exceptionami nic nie rzuca.
To moje pierwsze zetknięcie z programowaniem reaktywnym, więc jeżeli ktoś znajdzie błąd to prosiłbym także o wyjaśnienie dlaczego właśnie tak i co jest złego w moim podejściu.