public void should_have_same_result_for_multiple_executions()
        {
            var context = UnleashContext.New().UserId("1574576830").Build();
            var gradualRolloutStrategy = new GradualRolloutUserIdStrategy();

            var paramseters    = buildParams(1, "innfinn");
            var firstRunResult = gradualRolloutStrategy.IsEnabled(paramseters, context);

            for (int i = 0; i < 10; i++)
            {
                var subsequentRunResult = gradualRolloutStrategy.IsEnabled(paramseters, context);
                firstRunResult.Should().Be(subsequentRunResult, "loginId will return same result when unchanged parameters");
            }
        }
        public void should_be_disabled_when_missing_user_id()
        {
            var context = UnleashContext.New().Build();
            var gradualRolloutStrategy = new GradualRolloutUserIdStrategy();

            gradualRolloutStrategy.IsEnabled(new Dictionary <string, string>(), context).Should().BeFalse();
        }
        public void should_at_most_miss_with_one_percent_when_rolling_out_to_specified_percentage()
        {
            string groupId      = "group1";
            int    percentage   = 25;
            int    rounds       = 20000;
            int    enabledCount = 0;

            var paramseters = buildParams(percentage, groupId);

            var gradualRolloutStrategy = new GradualRolloutUserIdStrategy();

            for (var userId = 0; userId < rounds; userId++)
            {
                var context = UnleashContext.New().UserId("user" + userId).Build();

                if (gradualRolloutStrategy.IsEnabled(paramseters, context))
                {
                    enabledCount++;
                }
            }

            var actualPercentage = (enabledCount / (double)rounds) * 100.0;

            ((percentage - 1) < actualPercentage)
            .Should().BeTrue("Expected " + percentage + "%, but was " + actualPercentage + "%");

            ((percentage + 1) > actualPercentage).Should()
            .BeTrue("Expected " + percentage + "%, but was " + actualPercentage + "%");
        }
        public void should_not_be_enabled_when_0percent_rollout()
        {
            var context = UnleashContext.New().UserId("1574576830").Build();
            var gradualRolloutStrategy = new GradualRolloutUserIdStrategy();

            var paramseters = buildParams(0, "innfinn");
            var actual      = gradualRolloutStrategy.IsEnabled(paramseters, context);

            actual.Should().BeFalse("should not be enabled when 0% rollout");
        }
        public void should_be_enabled_when_using_100percent_rollout()
        {
            var context = UnleashContext.New().UserId("1574576830").Build();
            var gradualRolloutStrategy = new GradualRolloutUserIdStrategy();

            var paramseters = buildParams(100, "innfinn");
            var result      = gradualRolloutStrategy.IsEnabled(paramseters, context);

            result.Should().BeTrue();
        }
        public void should_be_enabled_above_minimum_percentage()
        {
            var userId            = "1574576830";
            var groupId           = "";
            var minimumPercentage = StrategyUtils.GetNormalizedNumber(userId, groupId);

            var context = UnleashContext.New().UserId(userId).Build();
            var gradualRolloutStrategy = new GradualRolloutUserIdStrategy();

            for (var p = minimumPercentage; p <= 100; p++)
            {
                var paramseters = buildParams(p, groupId);
                var actual      = gradualRolloutStrategy.IsEnabled(paramseters, context);

                actual.Should().BeTrue("should be enabled when " + p + "% rollout");
            }
        }
        protected int checkRandomLoginIDs(int numberOfIDs, int percentage)
        {
            var numberOfEnabledUsers = 0;

            for (int i = 0; i < numberOfIDs; i++)
            {
                var userId  = getRandomLoginId();
                var context = UnleashContext.New().UserId(userId.ToString()).Build();

                var gradualRolloutStrategy = new GradualRolloutUserIdStrategy();

                var paramseters = buildParams(percentage, "");
                var enabled     = gradualRolloutStrategy.IsEnabled(paramseters, context);

                if (enabled)
                {
                    numberOfEnabledUsers++;
                }
            }

            return(numberOfEnabledUsers);
        }
        public void should_require_context()
        {
            var gradualRolloutStrategy = new GradualRolloutUserIdStrategy();

            gradualRolloutStrategy.IsEnabled(new Dictionary <string, string>()).Should().BeFalse();
        }