Ejemplo n.º 1
0
        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();
        }
Ejemplo n.º 2
0
        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);
            });
        }
Ejemplo n.º 3
0
        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();
        }
Ejemplo n.º 4
0
        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();
        }
Ejemplo n.º 7
0
        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();
        }
Ejemplo n.º 8
0
        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();
        }
Ejemplo n.º 9
0
        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();
        }
Ejemplo n.º 10
0
        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();
        }
Ejemplo n.º 13
0
 public void throw_if_httpcontextaccessor_is_null()
 {
     Assert.Throws <ArgumentNullException>(() =>
     {
         var store = new DelegatedValueFeatureStore((_, __) => null);
         new GradualRolloutHeaderValueToggle(store, null);
     });
 }
Ejemplo n.º 14
0
 public void throw_if_httpcontextaccessor_is_null()
 {
     Assert.Throws <ArgumentNullException>(() =>
     {
         var store = new DelegatedValueFeatureStore((_, __, ___) => null);
         new ClaimValueToggle(null);
     });
 }
Ejemplo n.º 15
0
 public void throw_if_logger_is_null()
 {
     Assert.Throws <ArgumentNullException>(() =>
     {
         var store    = new DelegatedValueFeatureStore((_, __) => null);
         var accessor = new FakeHttpContextAccesor();
         new GradualRolloutSessionToggle(store, accessor, null);
     });
 }
Ejemplo n.º 16
0
        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);
            });
        }
Ejemplo n.º 17
0
 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);
            });
        }
Ejemplo n.º 20
0
        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();
        }
Ejemplo n.º 21
0
        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();
        }
Ejemplo n.º 22
0
        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();
        }
Ejemplo n.º 23
0
        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);
            });
        }
Ejemplo n.º 24
0
        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();
        }
Ejemplo n.º 25
0
        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();
        }
Ejemplo n.º 26
0
        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();
        }
Ejemplo n.º 28
0
        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);
            });
        }