public async Task EvaluateShouldReturnFalseForRepoNotMatchingPolicies()
        {
            //Arrange
            CustomizeGitRef(_fixture);
            SetupPoliciesResolver(_policiesResolver, _fixture);
            SetupClient(_client, _fixture);

            //Act
            var rule          = new ReleaseBranchesProtectedByPolicies(_client, _policiesResolver);
            var evaluatedRule = await rule.EvaluateAsync("", RepositoryId);

            //Assert
            evaluatedRule.ShouldBe(false);
        }
        public async Task GivenExistingPolicyPresent_WhenReconcile_PutIsUsed()
        {
            // Arrange
            CustomizeScope(_fixture);
            SetupPoliciesResolver(_policiesResolver, _fixture);

            // Act
            var rule = new ReleaseBranchesProtectedByPolicies(_client, _policiesResolver) as IReconcile;
            await rule.ReconcileAsync("", RepositoryId);

            // Assert
            await _client
            .Received()
            .PutAsync(Arg.Any <IVstsRequest <Policy> >(), Arg.Any <MinimumNumberOfReviewersPolicy>());
        }
        public async Task PolicySettingsOnReconcile()
        {
            // Arrange
            CustomizeScope(_fixture);
            SetupPoliciesResolver(_policiesResolver, _fixture);

            // Act
            var rule = new ReleaseBranchesProtectedByPolicies(_client, _policiesResolver) as IReconcile;
            await rule.ReconcileAsync("", RepositoryId);

            // Assert
            await _client
            .Received()
            .PutAsync(Arg.Any <IVstsRequest <Policy, Policy> >(),
                      Arg.Is <MinimumNumberOfReviewersPolicy>(p => !p.IsDeleted && p.IsBlocking && p.IsEnabled));
        }
        public async Task EvaluateShouldReturnFalseWhenThereAreNoCorrectPoliciesForMasterBranch()
        {
            //Arrange
            CustomizeScope(_fixture, refName: "ref/heads/not-master");
            CustomizeMinimumNumberOfReviewersPolicy(_fixture);
            CustomizePolicySettings(_fixture);
            CustomizeGitRef(_fixture);
            SetupPoliciesResolver(_policiesResolver, _fixture);
            SetupClient(_client, _fixture);

            //Act
            var rule          = new ReleaseBranchesProtectedByPolicies(_client, _policiesResolver);
            var evaluatedRule = await rule.EvaluateAsync("", RepositoryId);

            //Assert
            evaluatedRule.ShouldBe(false);
        }
        public async Task EvaluateShouldReturnFalseWhenPolicyIsNotEnabled()
        {
            //Arrange
            CustomizeScope(_fixture, RepositoryId);
            CustomizeMinimumNumberOfReviewersPolicy(_fixture, false);
            CustomizePolicySettings(_fixture);
            CustomizeGitRef(_fixture);
            SetupPoliciesResolver(_policiesResolver, _fixture);
            SetupClient(_client, _fixture);

            //Act
            var rule          = new ReleaseBranchesProtectedByPolicies(_client, _policiesResolver);
            var evaluatedRule = await rule.EvaluateAsync("", RepositoryId);

            //Assert
            evaluatedRule.ShouldBe(false);
        }
        public async Task GivenExistingPolicyHasApproverCount_WhenReconcile_NotUpdated()
        {
            // Arrange
            CustomizeScope(_fixture);
            CustomizePolicySettings(_fixture, 3);
            SetupPoliciesResolver(_policiesResolver, _fixture);

            // Act
            var rule = new ReleaseBranchesProtectedByPolicies(_client, _policiesResolver) as IReconcile;
            await rule.ReconcileAsync("", RepositoryId);

            // Assert
            await _client
            .Received()
            .PutAsync(Arg.Any <IVstsRequest <Policy> >(),
                      Arg.Is <MinimumNumberOfReviewersPolicy>(x => x.Settings.MinimumApproverCount == 3));
        }