public void plugHooks(StepVerifierOptions verifierOptions) { plugHooks(); Context userContext = verifierOptions.getInitialContext(); verifierOptions.withInitialContext(Operators.enableOnDiscard(userContext, discardedElements::offer)); }
@Test public void withInitialContext() { StepVerifier.create(Mono.subscriberContext(), StepVerifierOptions.create().withInitialContext(Context.of("foo", "bar"))) .assertNext(c -> Assertions.assertThat(c.getOrDefault("foo", "baz")) .isEqualTo("bar")) .verifyComplete(); }
@Test public void withInitialContextButNoPropagation() { StepVerifier.create(Mono.just(1), //just(1) uses a ScalarSubscription which can't be resolved to a chain of parents StepVerifierOptions.create().withInitialContext(Context.of("foo", "bar"))) .expectNoAccessibleContext() .expectNext(1) .verifyComplete(); }
@Test public void withInitialContextAndContextAssertionsParents() { StepVerifier.create(Mono.just(1).map(i -> i + 10), //this causes the subscription to be resolvable to a chain of parents StepVerifierOptions.create().withInitialContext(Context.of("foo", "bar"))) .expectAccessibleContext() .contains("foo", "bar") .then() .expectNext(11) .verifyComplete(); }
@Test public void nextCompleteAndErrorHaveContext() { Context context = Context.of("foo", "bar"); List<Signal> signals = new ArrayList<>(); StepVerifier.create(Flux.just("hello") .doOnEach(signals::add), StepVerifierOptions.create().withInitialContext(context)) .expectNext("hello") .verifyComplete(); assertThat(signals) .allSatisfy(signal -> assertThat(signal.getContext().hasKey("foo")) .as("has Context value") .isTrue()); }
@Test public void contextDiscardCaptureWithInitialContext() { Context initial = Context.of("foo", "bar"); StepVerifier.create(Mono.subscriberContext() .flatMapIterable(ctx -> ctx.stream() .map(Map.Entry::getKey) .map(String::valueOf) .collect(Collectors.toList()) ).concatWithValues("A", "B") .filter(s -> s.length() > 1) , StepVerifierOptions.create().withInitialContext(initial)) .expectNext("foo") .expectNext("reactor.onDiscard.local") .expectComplete() .verifyThenAssertThat() .hasDiscardedExactly("A", "B"); }
@Test public void contextAccessibleWithEmptySubscriptionAndOperator2() { StepVerifier.create(Flux.empty() .map(i -> i), StepVerifierOptions.create().withInitialContext(Context.of("a", "b"))) .expectAccessibleContext() .contains("a", "b") .then() .verifyComplete(); }
@Test public void expectAccessibleContextWithInitialContext() { StepVerifierOptions stepVerifierOptions = StepVerifierOptions.create() .withInitialContext(Context.of("foo", "bar")); StepVerifier.create(Mono.just(1), stepVerifierOptions) .expectAccessibleContext() .contains("foo", "bar") .then() .expectNext(1) .verifyComplete(); }
@Test public void contextNotAccessibleWithEmptySubscriptionOnly() { StepVerifier.create(Flux.empty(), StepVerifierOptions.create().withInitialContext(Context.of("a", "b"))) .expectNoAccessibleContext() .verifyComplete(); } }
public void plugHooks(StepVerifierOptions verifierOptions) { plugHooks(); Context userContext = verifierOptions.getInitialContext(); verifierOptions.withInitialContext(Operators.enableOnDiscard(userContext, discardedElements::offer)); }