From 0585cf1b4e5cff0cf559cecb17c88008d17669d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gast=C3=B3n=20Fournier?= Date: Mon, 30 Sep 2024 10:49:44 +0200 Subject: [PATCH] test: context provider example --- .../io/getunleash/DefaultUnleashTest.java | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/src/test/java/io/getunleash/DefaultUnleashTest.java b/src/test/java/io/getunleash/DefaultUnleashTest.java index beebaa19..b4be1a21 100644 --- a/src/test/java/io/getunleash/DefaultUnleashTest.java +++ b/src/test/java/io/getunleash/DefaultUnleashTest.java @@ -22,11 +22,15 @@ import java.net.URI; import java.net.URISyntaxException; import java.util.*; +import java.util.function.Supplier; + import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.RegisterExtension; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; +import org.mockito.invocation.InvocationOnMock; +import org.mockito.stubbing.Answer; import org.slf4j.LoggerFactory; class DefaultUnleashTest { @@ -140,6 +144,41 @@ public void should_evaluate_segment_collection_with_one_missing_segment_as_false assertThat(sut.isEnabled(toggleName)).isFalse(); } + class VersionFetcher { + public String getVersion() { + return "1.3.7"; + } + } + @Test + public void should_merge_context_with_context_provider_data() { + + String toggleName = "context-provided-property"; + String requiredMinimumVersion = "1.2.2"; + Constraint semverConstraint = new Constraint("version", Operator.SEMVER_GT, requiredMinimumVersion); + Constraint userConstraint = new Constraint("userId", Operator.IN, asList("123", "456")); + VersionFetcher versionFetcher = spy(new VersionFetcher()); + ActivationStrategy activationStrategy = + new ActivationStrategy( + "default", + Collections.emptyMap(), + asList(semverConstraint, userConstraint), + Collections.emptyList(), + Collections.emptyList()); + when(featureRepository.getToggle(toggleName)) + .thenReturn(new FeatureToggle(toggleName, true, Collections.singletonList(activationStrategy))); + when(contextProvider.getContext()) + .thenAnswer((Answer) invocationOnMock -> + UnleashContext.builder() + .userId("123") + .addProperty("version", versionFetcher.getVersion()) + .build() + ); + + verify(versionFetcher, times(0)).getVersion(); + assertThat(sut.isEnabled(toggleName)).isTrue(); + verify(versionFetcher, times(1)).getVersion(); + } + @Test public void should_allow_fallback_strategy() { Strategy fallback = mock(Strategy.class);