Exemplo n.º 1
0
        public async Task EvaluateAsync_WithDisabledPolicy_ShouldNotEvaluatePolicy()
        {
            var pullRequestUpdate = new PullRequestUpdate
            {
                Id           = 5,
                CollectionId = Guid.NewGuid().ToString(),
                ProjectId    = Guid.NewGuid().ToString(),
                RepositoryId = Guid.NewGuid().ToString()
            };

            var accountConfiguration = new AccountConfiguration
            {
                CollectionId        = pullRequestUpdate.CollectionId,
                BaseUrl             = "https://fabrikam.visualstudio.com/DefaultCollection",
                PersonalAccessToken = "SECRET!!"
            };

            var pullRequest = new GitPullRequest();

            var gitClientMock = new Mock <GitHttpClient>(new object[]
            {
                new Uri("https://fabrikam.visualstudio.com/DefaultCollection"),
                (VssCredentials) new VssBasicCredential()
            });

            gitClientMock.Setup(m => m.GetPullRequestAsync(It.IsAny <string>(), It.IsAny <int>(),
                                                           It.IsAny <int?>(), It.IsAny <int?>(), It.IsAny <int?>(), It.IsAny <bool?>(), It.IsAny <bool?>(), It.IsAny <object>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync(pullRequest);

            var connectionFactoryMock = new Mock <IVssConnectionFactory>();

            connectionFactoryMock.Setup(m => m.CreateFactory(It.IsAny <Uri>(), It.IsAny <VssCredentials>()))
            .Returns(connectionFactoryMock.Object);
            connectionFactoryMock.Setup(m => m.GetClientAsync <GitHttpClient>())
            .ReturnsAsync(gitClientMock.Object);

            var testPolicyMock = new Mock <StatusPolicy>(new object[]
            {
                connectionFactoryMock.Object
            });

            testPolicyMock.Setup(m => m.EvaluateAsync(It.IsAny <GitPullRequest>()));

            const string policyName = "TestPolicy";

            var statusPoliciesServiceMock = new Mock <IStatusPoliciesService>();

            statusPoliciesServiceMock.Setup(m => m.GetPolicies())
            .Returns(new string[] { policyName });
            statusPoliciesServiceMock.Setup(m => m.GetPolicy(It.IsAny <IVssConnectionFactory>(), It.IsAny <string>()))
            .Returns(testPolicyMock.Object);

            var configurationRepositoryMock = new Mock <IConfigurationRepository>();

            configurationRepositoryMock.Setup(m => m.GetAsync(It.IsAny <string>()))
            .ReturnsAsync(accountConfiguration);

            var pullRequestService = new PullRequestService(
                new Uri("https://aitpullrequests.azurewebsites.net/"),
                connectionFactoryMock.Object,
                statusPoliciesServiceMock.Object,
                configurationRepositoryMock.Object);

            await pullRequestService.EvaluateAsync(pullRequestUpdate);

            configurationRepositoryMock.Verify(m => m.GetAsync(pullRequestUpdate.CollectionId), Times.Once);

            connectionFactoryMock.Verify(m => m.CreateFactory(new Uri(accountConfiguration.BaseUrl), It.IsAny <VssCredentials>()), Times.Once);

            gitClientMock.Verify(m => m.GetPullRequestAsync(pullRequestUpdate.RepositoryId, pullRequestUpdate.Id,
                                                            It.IsAny <int?>(), It.IsAny <int?>(), It.IsAny <int?>(), It.IsAny <bool?>(), It.IsAny <bool?>(), It.IsAny <object>(), It.IsAny <CancellationToken>()), Times.Once);

            statusPoliciesServiceMock.Verify(m => m.GetPolicies(), Times.Once);

            statusPoliciesServiceMock.Verify(m => m.GetPolicy(connectionFactoryMock.Object, policyName), Times.Never);

            testPolicyMock.Verify(m => m.EvaluateAsync(pullRequest), Times.Never);
        }