public async Task be_non_active_when_claim_value_is_not_on_valid_partition() { var toggle = Build .Toggle <GradualRolloutSessionToggle>() .AddOneParameter("Percentage", 0) .Build(); var feature = Build .Feature(Constants.FeatureName) .AddOne(toggle) .Build(); var loggerFactory = new LoggerFactory(); var context = new DefaultHttpContext(); context.Session = new FakeSession(); var store = new DelegatedValueFeatureStore((_, __) => feature); var gradualRolloutSession = new GradualRolloutSessionToggle(store, new FakeHttpContextAccesor(context), loggerFactory.CreateLogger <GradualRolloutSessionToggle>()); var active = await gradualRolloutSession.IsActiveAsync(Constants.FeatureName); active.Should() .BeFalse(); }
public async Task throw_if_http_context_accessor_is_null() { var featureName = "feature-1"; var toggle = Build .Toggle <IpApiCountryCodeToggle>() .AddOneParameter(Countries, "ES;FR;IT") .Build(); var feature = Build .Feature(featureName) .AddOne(toggle) .Build(); var store = new DelegatedValueFeatureStore((_, __) => { return(feature); }); await Assert.ThrowsAsync <ArgumentNullException>(async() => { await new IpApiCountryCodeToggle(store, null) .IsActiveAsync(featureName); }); }
public async Task be_active_when_claim_type_and_value_are_successfully_configured() { var toggle = Build .Toggle <ClaimValueToggle>() .AddOneParameter("ClaimType", "some_claim_type") .AddOneParameter("ClaimValues", "some_claim_value") .Build(); var feature = Build .Feature(Constants.FeatureName) .AddOne(toggle) .Build(); var context = new DefaultHttpContext(); context.User = new ClaimsPrincipal( new ClaimsIdentity(new Claim[] { new Claim("some_claim_type", "some_claim_value") }, "cookies")); var store = new DelegatedValueFeatureStore((_, __) => feature); var claimValueToggle = new ClaimValueToggle(store, new FakeHttpContextAccesor(context)); var active = await claimValueToggle.IsActiveAsync(Constants.FeatureName); active.Should() .BeTrue(); }
public async Task throw_if_location_service_is_null() { var featureName = "feature-1"; var toggle = Build .Toggle <CountryNameLocationToggle>() .AddOneParameter(Countries, "Spain;France;Germany") .Build(); var feature = Build .Feature(featureName) .AddOne(toggle) .Build(); var store = new DelegatedValueFeatureStore((_, __) => { return(feature); }); await Assert.ThrowsAsync <ArgumentNullException>(async() => { await new CountryNameLocationToggle(store, new DefaulHttpContextAccessor(), null) .IsActiveAsync(featureName); }); }
public async Task be_active_when_session_is_on_valid_partition() { var toggle = Build .Toggle <GradualRolloutSessionToggle>() .AddOneParameter("Percentage", 100) .Build(); var feature = Build .Feature(Constants.FeatureName) .AddOne(toggle) .Build(); var context = new DefaultHttpContext(); context.Session = new FakeSession(); var store = new DelegatedValueFeatureStore((_, __) => feature); var partitioner = new DefaultValuePartitioner(); var gradualRolloutSession = new GradualRolloutSessionToggle(partitioner, store, new FakeHttpContextAccesor(context)); var active = await gradualRolloutSession.IsActiveAsync(Constants.FeatureName); active.Should() .BeTrue(); }
public async Task be_active_if_allowed_zip_include_request_origin_zip() { var featureName = "feature-1"; var toggle = Build .Toggle <IpStackCityNameToggle>() .AddOneParameter(Cities, "Iturrama;Madrid;Seatle") .AddOneParameter(AccessKey, IpStackConstants.AccessKey) .Build(); var feature = Build .Feature(featureName) .AddOne(toggle) .Build(); var store = new DelegatedValueFeatureStore((_, __) => { return(feature); }); var isActive = await new IpStackCityNameToggle(store, new DefaulHttpContextAccessor()) .IsActiveAsync(featureName); isActive.Should().BeTrue(); }
public async Task be_not_active_when_headervalue__are_not_successfully_configured() { var toggle = Build .Toggle <HeaderValueToggle>() .AddOneParameter("HeaderName", "Accept") .AddOneParameter("HeaderValues", "text/xml") .Build(); var feature = Build .Feature(Constants.FeatureName) .AddOne(toggle) .Build(); var context = new DefaultHttpContext(); context.Request.Headers.Add("Accept", "application/json"); var store = new DelegatedValueFeatureStore((_, __) => feature); var headerValueToggle = new HeaderValueToggle(store, new FakeHttpContextAccesor(context)); var active = await headerValueToggle.IsActiveAsync(Constants.FeatureName); active.Should() .BeFalse(); }
public async Task be_not_active_when_claim_type_and_value_are_successfully_configured() { var toggle = Build .Toggle <ClaimValueToggle>() .AddParameter("ClaimType", "some_claim_type") .AddParameter("ClaimValues", "some_claim_value") .Build(); var feature = Build .Feature(Constants.FeatureName) .AddOne(toggle) .Build(); var context = new DefaultHttpContext(); context.User = new ClaimsPrincipal( new ClaimsIdentity(new Claim[] { new Claim("some_claim_type", "not_some_claim_value") }, "cookies")); var store = new DelegatedValueFeatureStore((_, __, ___) => feature); var claimValueToggle = new ClaimValueToggle(new FakeHttpContextAccessor(context)); var active = await claimValueToggle.IsActiveAsync( ToggleExecutionContext.FromToggle( feature.Name, EsquioConstants.DEFAULT_PRODUCT_NAME, EsquioConstants.DEFAULT_DEPLOYMENT_NAME, toggle)); active.Should() .BeFalse(); }
public async Task be_not_active_if_allowed_countries_does_not_include_request_origin_country() { var featureName = "feature-1"; var toggle = Build .Toggle <IpStackZipToggle>() .AddOneParameter(ZipCodes, "5252") .AddOneParameter(AccessKey, IpStackConstants.AccessKey) .Build(); var feature = Build .Feature(featureName) .AddOne(toggle) .Build(); var store = new DelegatedValueFeatureStore((_, __) => { return(feature); }); var isActive = await new IpStackZipToggle(store, new DefaulHttpContextAccessor()) .IsActiveAsync(featureName); isActive.Should().BeFalse(); }
public async Task be_active_if_allowed_zip_is_origin_zipcode() { var featureName = "feature-1"; var toggle = Build .Toggle <IpStackZipToggle>() .AddOneParameter(ZipCodes, "31191") .AddOneParameter(AccessKey, IpStackConstants.AccessKey) .Build(); var feature = Build .Feature(featureName) .AddOne(toggle) .Build(); var store = new DelegatedValueFeatureStore((_, __) => { return(feature); }); var isActive = await new IpStackZipToggle(store, new DefaulHttpContextAccessor()) .IsActiveAsync(featureName); isActive.Should().BeTrue(); }
public async Task be_active_when_claim_value_is_on_valid_partition() { var toggle = Build .Toggle <GradualRolloutHeaderValueToggle>() .AddOneParameter("HeaderName", "header-name") .AddOneParameter("Percentage", 100) .Build(); var feature = Build .Feature(Constants.FeatureName) .AddOne(toggle) .Build(); var context = new DefaultHttpContext(); context.Request.Headers.Add(new KeyValuePair <string, StringValues>("header-name", "header-value")); var store = new DelegatedValueFeatureStore((_, __) => feature); var partitioner = new DefaultValuePartitioner(); var gradualRolloutHeaderValue = new GradualRolloutHeaderValueToggle(partitioner, store, new FakeHttpContextAccesor(context)); var active = await gradualRolloutHeaderValue.IsActiveAsync(Constants.FeatureName); active.Should() .BeTrue(); }
public async Task be_active_when_claim_value_is_on_valid_partition() { var toggle = Build .Toggle <GradualRolloutClaimValueToggle>() .AddOneParameter("ClaimType", "some_claim_type") .AddOneParameter("Percentage", 100) .Build(); var feature = Build .Feature(Constants.FeatureName) .AddOne(toggle) .Build(); var context = new DefaultHttpContext(); context.User = new ClaimsPrincipal( new ClaimsIdentity(new Claim[] { new Claim("some_claim_type", "some_claim_value") }, "cookies")); var store = new DelegatedValueFeatureStore((_, __) => feature); var partitioner = new DefaultValuePartitioner(); var gradualRolloutClaimValue = new GradualRolloutClaimValueToggle(partitioner, store, new FakeHttpContextAccesor(context)); var active = await gradualRolloutClaimValue.IsActiveAsync(Constants.FeatureName); active.Should() .BeTrue(); }
public void throw_if_httpcontextaccessor_is_null() { Assert.Throws <ArgumentNullException>(() => { var store = new DelegatedValueFeatureStore((_, __) => null); new GradualRolloutHeaderValueToggle(store, null); }); }
public void throw_if_httpcontextaccessor_is_null() { Assert.Throws <ArgumentNullException>(() => { var store = new DelegatedValueFeatureStore((_, __, ___) => null); new ClaimValueToggle(null); }); }
public void throw_if_logger_is_null() { Assert.Throws <ArgumentNullException>(() => { var store = new DelegatedValueFeatureStore((_, __) => null); var accessor = new FakeHttpContextAccesor(); new GradualRolloutSessionToggle(store, accessor, null); }); }
public async Task throw_if_role_provider_is_null() { var store = new DelegatedValueFeatureStore((_, __) => null); await Assert.ThrowsAsync <ArgumentNullException>(async() => { await new RoleNameToggle(null, store).IsActiveAsync(Constants.FeatureName, Constants.ProductName); }); }
public void throw_if_httpcontextaccessor_is_null() { Assert.Throws <ArgumentNullException>(() => { var loggerFactory = new LoggerFactory(); var store = new DelegatedValueFeatureStore((_, __) => null); new GradualRolloutSessionToggle(store, null, loggerFactory.CreateLogger <GradualRolloutSessionToggle>()); }); }
public void throw_if_partitioner_service_is_null() { Assert.Throws <ArgumentNullException>(() => { var store = new DelegatedValueFeatureStore((_, __) => null); var accessor = new FakeHttpContextAccesor(); new GradualRolloutClaimValueToggle(null, store, accessor); }); }
public void throw_if_httpcontextaccessor_is_null() { Assert.Throws <ArgumentNullException>(() => { var store = new DelegatedValueFeatureStore((_, __) => null); var partitioner = new DefaultValuePartitioner(); new GradualRolloutSessionToggle(partitioner, store, null); }); }
public async Task be_not_active_if_role_is_not_contained_on_roles_parameters_value() { var toggle = Build .Toggle <RoleNameToggle>() .AddOneParameter(Roles, "admin") .Build(); var feature = Build .Feature(Constants.FeatureName) .AddOne(toggle) .Build(); var store = new DelegatedValueFeatureStore((_, __) => feature); var roleNameProvider = new DelegatedRoleNameProviderService(() => "user"); var active = await new RoleNameToggle(roleNameProvider, store).IsActiveAsync(Constants.FeatureName, Constants.ProductName); active.Should().BeFalse(); }
public async Task be_active_if_user_is_equal_to_users_parameters_value() { var toggle = Build .Toggle <UserNameToggle>() .AddOneParameter(Users, "user1") .Build(); var feature = Build .Feature(Constants.FeatureName) .AddOne(toggle) .Build(); var store = new DelegatedValueFeatureStore((_, __) => feature); var userNameProvider = new DelegatedUserNameProviderService(() => "user1"); var active = await new UserNameToggle(userNameProvider, store).IsActiveAsync(Constants.FeatureName, Constants.ProductName); active.Should().BeTrue(); }
public async Task be_not_active_if_parameter_is_not_configured() { var toggle = Build .Toggle <UserNameToggle>() .AddOneParameter("Users", "SomeUser") .Build(); var feature = Build .Feature(Constants.FeatureName) .AddOne(toggle) .Build(); var store = new DelegatedValueFeatureStore((_, __) => feature); var userNameProvider = new DelegatedUserNameProviderService(() => "User1"); var active = await new UserNameToggle(userNameProvider, store).IsActiveAsync(Constants.FeatureName, Constants.ProductName); active.Should().BeFalse(); }
public async Task be_not_active_if_user_provider_is_null() { var toggle = Build .Toggle <UserNameToggle>() .AddOneParameter(Users, "user1;user2") .Build(); var feature = Build .Feature(Constants.FeatureName) .AddOne(toggle) .Build(); var store = new DelegatedValueFeatureStore((_, __) => feature); await Assert.ThrowsAsync <ArgumentNullException>(async() => { await new UserNameToggle(null, store).IsActiveAsync(Constants.FeatureName, Constants.ProductName); }); }
public async Task be_not_active_if_parameter_value_is_null() { var toggle = Build .Toggle <EnvironmentToggle>() .AddOneParameter("Environments", "Production") .Build(); var feature = Build .Feature(Constants.FeatureName) .AddOne(toggle) .Build(); var store = new DelegatedValueFeatureStore((_, __) => feature); var environmentNameProvider = new DelegatedEnvironmentNameProviderService(() => Development); var active = await new EnvironmentToggle(environmentNameProvider, store).IsActiveAsync(Constants.FeatureName, Constants.ProductName); active.Should().BeFalse(); }
public async Task be_active_if_current_environment_is_configured() { var toggle = Build .Toggle <EnvironmentToggle>() .AddOneParameter(Environments, Development) .Build(); var feature = Build .Feature(Constants.FeatureName) .AddOne(toggle) .Build(); var store = new DelegatedValueFeatureStore((_, __) => feature); var environmentNameProvider = new DelegatedEnvironmentNameProviderService(() => "development"); var active = await new EnvironmentToggle(environmentNameProvider, store).IsActiveAsync(Constants.FeatureName, Constants.ProductName); active.Should().BeTrue(); }
public async Task be_active_if_now_is_between_configured_dates() { var toggle = Build .Toggle <FromToToggle>() .AddOneParameter(From, DateTime.UtcNow.AddMonths(-1).ToString(FromToToggle.FORMAT_DATE)) .AddOneParameter(To, DateTime.UtcNow.AddMonths(1).ToString(FromToToggle.FORMAT_DATE)) .Build(); var feature = Build .Feature(Constants.FeatureName) .AddOne(toggle) .Build(); var store = new DelegatedValueFeatureStore((_, __) => feature); var active = await new FromToToggle(store).IsActiveAsync(Constants.FeatureName, Constants.ProductName); active.Should().BeTrue(); }
public async Task be_no_active_when_percentage_is_zero_percent() { var toggle = Build .Toggle <GradualRolloutUserNameToggle>() .AddOneParameter(Percentage, 0) .Build(); var feature = Build .Feature(Constants.FeatureName) .AddOne(toggle) .Build(); var store = new DelegatedValueFeatureStore((_, __) => feature); var userNameProvider = new DelegatedUserNameProviderService(() => "User1"); var active = await new GradualRolloutUserNameToggle(userNameProvider, store).IsActiveAsync(Constants.FeatureName, Constants.ProductName); active.Should().BeFalse(); }
public async Task be_active_if_now_is_between_dates_with_alternates_configuration(string fromDate, string toDate) { var toggle = Build .Toggle <FromToToggle>() .AddOneParameter(From, fromDate) .AddOneParameter(To, toDate) .Build(); var feature = Build .Feature(Constants.FeatureName) .AddOne(toggle) .Build(); var store = new DelegatedValueFeatureStore((_, __) => feature); var active = await new FromToToggle(store).IsActiveAsync(Constants.FeatureName, Constants.ProductName); active.Should().BeTrue(); }
public async Task use_partition_for_claim_value(int percentage) { var valid = false; var claim_value = default(string); do { claim_value = Guid.NewGuid().ToString(); var partition = new DefaultValuePartitioner().ResolvePartition(Constants.FeatureName + claim_value, partitions: 100); if (partition <= percentage) { valid = true; } } while (!valid); var toggle = Build .Toggle <GradualRolloutClaimValueToggle>() .AddOneParameter("ClaimType", "some_claim_type") .AddOneParameter("Percentage", percentage) .Build(); var feature = Build .Feature(Constants.FeatureName) .AddOne(toggle) .Build(); var context = new DefaultHttpContext(); context.User = new ClaimsPrincipal( new ClaimsIdentity(new Claim[] { new Claim("some_claim_type", claim_value) }, "cookies")); var store = new DelegatedValueFeatureStore((_, __) => feature); var partitioner = new DefaultValuePartitioner(); var gradualRolloutClaimValue = new GradualRolloutClaimValueToggle(partitioner, store, new FakeHttpContextAccesor(context)); var active = await gradualRolloutClaimValue.IsActiveAsync(Constants.FeatureName); active.Should() .BeTrue(); }
public void throw_if_username_provider_is_null() { var toggle = Build .Toggle <GradualRolloutUserNameToggle>() .AddOneParameter(Percentage, 100) .Build(); var feature = Build .Feature(Constants.FeatureName) .AddOne(toggle) .Build(); var store = new DelegatedValueFeatureStore((_, __) => feature); var partitioner = new DefaultValuePartitioner(); Assert.Throws <ArgumentNullException>(() => { new GradualRolloutUserNameToggle(partitioner, userNameProviderService: null, store); }); }