diff --git a/payments/src/main/java/de/cotto/lndmanagej/payments/Payments.java b/payments/src/main/java/de/cotto/lndmanagej/payments/Payments.java index a6dcfe9d..d38472bf 100644 --- a/payments/src/main/java/de/cotto/lndmanagej/payments/Payments.java +++ b/payments/src/main/java/de/cotto/lndmanagej/payments/Payments.java @@ -7,6 +7,7 @@ import org.springframework.stereotype.Component; import java.util.List; import java.util.Optional; +import java.util.OptionalLong; import java.util.concurrent.TimeUnit; @Component @@ -38,19 +39,18 @@ public class Payments { return; } paymentOptionals = grpcPayments.getAllPaymentsAfter(offsetSettledPayments).orElse(List.of()); - long maxIndex = getMaxIndexAllSettled(paymentOptionals); + OptionalLong maxIndex = getMaxIndexAllSettled(paymentOptionals); dao.save(paymentOptionals.stream().flatMap(Optional::stream).toList()); - dao.setAllSettledIndexOffset(maxIndex); + maxIndex.ifPresent(dao::setAllSettledIndexOffset); } while (paymentOptionals.size() == grpcPayments.getLimit()); } - private static long getMaxIndexAllSettled(List> paymentOptionals) { + private static OptionalLong getMaxIndexAllSettled(List> paymentOptionals) { return paymentOptionals.stream() .takeWhile(Optional::isPresent) .flatMap(Optional::stream) .mapToLong(Payment::index) - .max() - .orElse(0L); + .max(); } } diff --git a/payments/src/test/java/de/cotto/lndmanagej/payments/PaymentsTest.java b/payments/src/test/java/de/cotto/lndmanagej/payments/PaymentsTest.java index 1855293e..0bdced6d 100644 --- a/payments/src/test/java/de/cotto/lndmanagej/payments/PaymentsTest.java +++ b/payments/src/test/java/de/cotto/lndmanagej/payments/PaymentsTest.java @@ -120,6 +120,15 @@ class PaymentsTest { inOrder.verify(dao).setAllSettledIndexOffset(PAYMENT.index()); } + @Test + void keeps_index_after_saving_if_no_payments_are_settled() { + when(grpcPayments.getAllPaymentsAfter(ALL_SETTLED_INDEX_OFFSET)).thenReturn( + Optional.of(List.of(Optional.empty(), Optional.empty(), Optional.empty())) + ).thenReturn(Optional.of(List.of())); + payments.loadOldSettledPayments(); + verify(dao, never()).setAllSettledIndexOffset(anyLong()); + } + @Test void ignores_non_settled_payments() { when(grpcPayments.getAllPaymentsAfter(ALL_SETTLED_INDEX_OFFSET)).thenReturn(