diff --git a/implementation/src/main/java/io/smallrye/mutiny/groups/UniOr.java b/implementation/src/main/java/io/smallrye/mutiny/groups/UniOr.java index f3178b5ba..3d14f5994 100644 --- a/implementation/src/main/java/io/smallrye/mutiny/groups/UniOr.java +++ b/implementation/src/main/java/io/smallrye/mutiny/groups/UniOr.java @@ -2,6 +2,7 @@ import static io.smallrye.mutiny.helpers.ParameterValidation.nonNull; +import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -23,7 +24,9 @@ public Uni uni(Uni other) { @SafeVarargs public final Uni unis(Uni... other) { - List> list = Arrays.asList(other); + List> list = new ArrayList<>(); + list.add(upstream); + list.addAll(Arrays.asList(other)); return Infrastructure.onUniCreation(new UniOrCombination<>(list)); } diff --git a/implementation/src/main/java/io/smallrye/mutiny/infrastructure/MultiInterceptor.java b/implementation/src/main/java/io/smallrye/mutiny/infrastructure/MultiInterceptor.java index 8e43e554d..2a5a12b6a 100644 --- a/implementation/src/main/java/io/smallrye/mutiny/infrastructure/MultiInterceptor.java +++ b/implementation/src/main/java/io/smallrye/mutiny/infrastructure/MultiInterceptor.java @@ -13,12 +13,17 @@ */ public interface MultiInterceptor { + /** + * Default ordinal value. + */ + int DEFAULT_ORDINAL = 100; + /** * @return the interceptor ordinal. The ordinal is used to sort the interceptor. Lower value are executed first. * Default is 100. */ default int ordinal() { - return 100; + return DEFAULT_ORDINAL; } /** diff --git a/implementation/src/test/java/io/smallrye/mutiny/infrastructure/MultiInterceptorTest.java b/implementation/src/test/java/io/smallrye/mutiny/infrastructure/MultiInterceptorTest.java new file mode 100644 index 000000000..228f95109 --- /dev/null +++ b/implementation/src/test/java/io/smallrye/mutiny/infrastructure/MultiInterceptorTest.java @@ -0,0 +1,30 @@ +package io.smallrye.mutiny.infrastructure; + +import static org.assertj.core.api.Assertions.assertThat; + +import org.reactivestreams.Subscriber; +import org.testng.annotations.Test; + +import io.smallrye.mutiny.Multi; +import io.smallrye.mutiny.operators.AbstractMulti; +import io.smallrye.mutiny.test.Mocks; + +public class MultiInterceptorTest { + + @Test + public void testDefaultInterceptorBehavior() { + MultiInterceptor interceptor = new MultiInterceptor() { + // Default. + }; + + assertThat(interceptor.ordinal()).isEqualTo(MultiInterceptor.DEFAULT_ORDINAL); + Multi multi = new AbstractMulti() { + // Do nothing + }; + assertThat(interceptor.onMultiCreation(multi)).isSameAs(multi); + + Subscriber subscriber = Mocks.subscriber(); + assertThat(interceptor.onSubscription(multi, subscriber)).isSameAs(subscriber); + } + +} diff --git a/implementation/src/test/java/io/smallrye/mutiny/operators/UniOrTest.java b/implementation/src/test/java/io/smallrye/mutiny/operators/UniOrTest.java index ad0ce3121..060ec625f 100644 --- a/implementation/src/test/java/io/smallrye/mutiny/operators/UniOrTest.java +++ b/implementation/src/test/java/io/smallrye/mutiny/operators/UniOrTest.java @@ -140,4 +140,26 @@ public void testWithThreeImmediateChallengers() { subscriber.assertCompletedSuccessfully().assertItem(1); } + @Test + public void testUniOrWithAnotherUni() { + UniAssertSubscriber subscriber = UniAssertSubscriber.create(); + Uni.createFrom().item("foo").or().uni(Uni.createFrom().item("bar")).subscribe() + .withSubscriber(subscriber); + subscriber.assertCompletedSuccessfully().assertItem("foo"); + } + + @Test + public void testUniOrWithDelayedUni() { + Uni first = Uni.createFrom().item("foo").onItem().delayIt().onExecutor(executor) + .by(Duration.ofMillis(10)); + Uni second = Uni.createFrom().item("bar").onItem().delayIt().onExecutor(executor) + .by(Duration.ofMillis(1000)); + Uni third = Uni.createFrom().item("baz").onItem().delayIt().onExecutor(executor) + .by(Duration.ofMillis(10000)); + + assertThat(third.or().unis(first, second).await().indefinitely()).isEqualTo("foo"); + assertThat(second.or().unis(third, first).await().indefinitely()).isEqualTo("foo"); + assertThat(first.or().unis(third, second).await().indefinitely()).isEqualTo("foo"); + } + } diff --git a/implementation/src/test/java/io/smallrye/mutiny/subscription/UniSubscriptionTest.java b/implementation/src/test/java/io/smallrye/mutiny/subscription/UniSubscriptionTest.java new file mode 100644 index 000000000..aa352e855 --- /dev/null +++ b/implementation/src/test/java/io/smallrye/mutiny/subscription/UniSubscriptionTest.java @@ -0,0 +1,19 @@ +package io.smallrye.mutiny.subscription; + +import static org.assertj.core.api.Assertions.assertThatThrownBy; + +import org.testng.annotations.Test; + +public class UniSubscriptionTest { + @Test + public void testDefaultRequestMethod() { + UniSubscription subscription = () -> { + // do nothing + }; + + subscription.request(12); + assertThatThrownBy(() -> subscription.request(-23)).isInstanceOf(IllegalArgumentException.class); + assertThatThrownBy(() -> subscription.request(0)).isInstanceOf(IllegalArgumentException.class); + subscription.request(1); + } +} diff --git a/reactive-streams-operators/src/test/java/tck/ReactiveStreamsEngineImplTck.java b/reactive-streams-operators/src/test/java/tck/ReactiveStreamsEngineImplTck.java index d7816a054..662b8d64b 100644 --- a/reactive-streams-operators/src/test/java/tck/ReactiveStreamsEngineImplTck.java +++ b/reactive-streams-operators/src/test/java/tck/ReactiveStreamsEngineImplTck.java @@ -10,7 +10,7 @@ */ public class ReactiveStreamsEngineImplTck extends ReactiveStreamsTck { - static TestEnvironment ENV = new TestEnvironment(true); + static TestEnvironment ENV = new TestEnvironment(); public ReactiveStreamsEngineImplTck() { super(ENV);