diff --git a/spring-5-webflux-2/src/main/java/onsuccess/Payment.java b/spring-5-webflux-2/src/main/java/model/Payment.java similarity index 86% rename from spring-5-webflux-2/src/main/java/onsuccess/Payment.java rename to spring-5-webflux-2/src/main/java/model/Payment.java index e8e2f79db0..857a3de65a 100644 --- a/spring-5-webflux-2/src/main/java/onsuccess/Payment.java +++ b/spring-5-webflux-2/src/main/java/model/Payment.java @@ -1,4 +1,4 @@ -package onsuccess; +package model; public class Payment { diff --git a/spring-5-webflux-2/src/main/java/onsuccess/PaymentService.java b/spring-5-webflux-2/src/main/java/onsuccess/PaymentService.java index 6c4885a3e7..7f6dd972f2 100644 --- a/spring-5-webflux-2/src/main/java/onsuccess/PaymentService.java +++ b/spring-5-webflux-2/src/main/java/onsuccess/PaymentService.java @@ -1,5 +1,7 @@ package onsuccess; +import model.Payment; + public class PaymentService { public void processPayment(Payment payment) { diff --git a/spring-5-webflux-2/src/test/java/firstelementofflux/FirstElementOfFluxUnitTest.java b/spring-5-webflux-2/src/test/java/firstelementofflux/FirstElementOfFluxUnitTest.java new file mode 100644 index 0000000000..4cccb179e2 --- /dev/null +++ b/spring-5-webflux-2/src/test/java/firstelementofflux/FirstElementOfFluxUnitTest.java @@ -0,0 +1,112 @@ +package firstelementofflux; + +import static org.assertj.core.api.Assertions.assertThat; + +import java.util.Optional; + +import org.junit.jupiter.api.Test; + +import model.Payment; +import reactor.core.publisher.Flux; +import reactor.core.publisher.Mono; +import reactor.test.StepVerifier; + +public class FirstElementOfFluxUnitTest { + + private Payment paymentOf100 = new Payment(100); + + private Flux fluxOfThreePayments() { + return Flux.just(paymentOf100, new Payment(200), new Payment(300)); + } + + @Test + void givenAPaymentFlux_whenUsingNext_thenGetTheFirstPaymentAsMono() { + Mono firstPayment = fluxOfThreePayments().next(); + + StepVerifier.create(firstPayment) + .expectNext(paymentOf100) + .verifyComplete(); + } + + @Test + void givenAnEmptyFlux_whenUsingNext_thenGetAEnEmptyMono() { + Flux emptyFlux = Flux.empty(); + + Mono firstPayment = emptyFlux.next(); + + StepVerifier.create(firstPayment) + .verifyComplete(); + } + + @Test + void givenAPaymentFlux_whenUsingTake_thenGetTheFirstPaymentAsFlux() { + Flux firstPaymentFlux = fluxOfThreePayments().take(1); + + StepVerifier.create(firstPaymentFlux) + .expectNext(paymentOf100) + .verifyComplete(); + } + + @Test + void givenAEmptyFlux_whenUsingNext_thenGetAnEmptyFlux() { + Flux emptyFlux = Flux.empty(); + + Flux firstPaymentFlux = emptyFlux.take(1); + + StepVerifier.create(firstPaymentFlux) + .verifyComplete(); + } + + @Test + void givenAPaymentFlux_whenUsingElementAt_thenGetTheFirstPaymentAsMono() { + Mono firstPayment = fluxOfThreePayments().elementAt(0); + + StepVerifier.create(firstPayment) + .expectNext(paymentOf100) + .verifyComplete(); + } + + @Test + void givenAEmptyFlux_whenUsingElementAt_thenGetAnEmptyMono() { + Flux emptyFlux = Flux.empty(); + + Mono firstPayment = emptyFlux.elementAt(0); + + StepVerifier.create(firstPayment) + .expectError(IndexOutOfBoundsException.class); + } + + @Test + void givenAPaymentFlux_whenUsingBlockFirst_thenGetTheFirstPayment() { + Payment firstPayment = fluxOfThreePayments().blockFirst(); + + assertThat(firstPayment).isEqualTo(paymentOf100); + } + + @Test + void givenAEmptyFlux_whenUsingElementAt_thenGetNull() { + Flux emptyFlux = Flux.empty(); + + Payment firstPayment = emptyFlux.blockFirst(); + + assertThat(firstPayment).isNull(); + } + + @Test + void givenAPaymentFlux_whenUsingToStream_thenGetTheFirstPaymentAsOptional() { + Optional firstPayment = fluxOfThreePayments().toStream() + .findFirst(); + + assertThat(firstPayment).contains(paymentOf100); + } + + @Test + void givenAnEmptyPaymentFlux_whenUsingToStream_thenGetAnEmptyOptional() { + Flux emptyFlux = Flux.empty(); + + Optional firstPayment = emptyFlux.toStream() + .findFirst(); + + assertThat(firstPayment).isEmpty(); + } +} diff --git a/spring-5-webflux-2/src/test/java/onsuccess/MonoOnSuccessVsOnNexUnitTest.java b/spring-5-webflux-2/src/test/java/onsuccess/MonoOnSuccessVsOnNexUnitTest.java index 1abce7b8a7..f349e659ba 100644 --- a/spring-5-webflux-2/src/test/java/onsuccess/MonoOnSuccessVsOnNexUnitTest.java +++ b/spring-5-webflux-2/src/test/java/onsuccess/MonoOnSuccessVsOnNexUnitTest.java @@ -10,6 +10,7 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.mockito.Mock; +import model.Payment; import reactor.core.publisher.Mono; class MonoOnSuccessVsOnNexUnitTest {