Пример #1
0
        public async Task ReconcileIntegrationTest()
        {
            var client          = new VstsRestClient(_config.Organization, _config.Token);
            var projectId       = (await client.GetAsync(Project.Properties(_config.Project))).Id;
            var releasePipeline = await client.GetAsync(ReleaseManagement.Definition(_config.Project, "1"))
                                  .ConfigureAwait(false);

            await ManagePermissions
            .ForReleasePipeline(client, projectId, releasePipeline.Id, releasePipeline.Path)
            .Permissions(Release.DeleteReleasePipelines)
            .SetToAsync(PermissionId.Allow);

            var rule = new NobodyCanDeleteReleases(client);

            (await rule.EvaluateAsync(projectId, releasePipeline))
            .ShouldBe(false);

            await rule.ReconcileAsync(projectId, releasePipeline.Id);

            await Policy
            .Handle <Exception>()
            .WaitAndRetryAsync(Constants.NumRetries, t => TimeSpan.FromSeconds(t))
            .ExecuteAsync(async() =>
            {
                (await rule.EvaluateAsync(projectId, releasePipeline)).ShouldBe(true);
            });
        }
        public async Task InvokeReconcile(string scope, string rule, string item)
        {
            // Arrange
            var client = new VstsRestClient(_config.Organization, _config.Token);
            var token  = await SessionToken(client, "tas", _config.ExtensionName);

            var request = new DummyHttpRequest
            {
                Headers = { ["Authorization"] = $"Bearer {token}" }
            };

            // Act
            await _host.Jobs.CallAsync(nameof(ReconcileFunction), new Dictionary <string, object>
            {
                ["request"]      = request,
                ["organization"] = _config.Organization,
                ["project"]      = _config.ProjectId,
                ["scope"]        = scope,
                ["ruleName"]     = rule,
                ["item"]         = item
            }).ConfigureAwait(false);

            // Assert
            await _host.Jobs
            .Ready()
            .ThrowIfFailed()
            .Purge().ConfigureAwait(false);
        }
        public async Task ReconcileIntegrationTest()
        {
            var client    = new VstsRestClient(_config.Organization, _config.Token);
            var projectId = (await client.GetAsync(Project.Properties(_config.Project))).Id;

            await ManagePermissions
            .ForRepository(client, projectId, RepositoryId)
            .Permissions(Permissions.DeleteRepository)
            .SetToAsync(PermissionId.Allow);

            var rule = new NobodyCanDeleteTheRepository(client);

            (await rule.EvaluateAsync(projectId, RepositoryId))
            .ShouldBe(false);

            await rule.ReconcileAsync(projectId, RepositoryId);

            await Policy
            .Handle <Exception>()
            .WaitAndRetryAsync(Constants.NumRetries, t => TimeSpan.FromSeconds(t))
            .ExecuteAsync(async() =>
            {
                (await rule.EvaluateAsync(projectId, RepositoryId)).ShouldBe(true);
            });
        }
        public async Task ReleaseWithApproval()
        {
            const int id = 79;

            var response = File.ReadAllText(Path.Join(ReleaseAssets, "Approved.json"));

            var request = new VstsRequest <Response.Release>("/keeas");

            using var httpTest = new HttpTest();
            httpTest.RespondWith(status: 200, body: response);
            var client  = new VstsRestClient("dummy", "pat");
            var release = await client.GetAsync(request);

            release.Id.ShouldBe(id);
            release.Environments.ShouldNotBeEmpty();
            release.Tags.ShouldNotBeEmpty();
            var env = release.Environments.Skip(1).First();

            env.Id.ShouldNotBe(0);
            env.PreDeployApprovals.ShouldNotBeEmpty();
            env.DeploySteps.ShouldNotBeEmpty();
            env.Name.ShouldNotBeNullOrEmpty();
            env.DeployPhasesSnapshot.ShouldNotBeEmpty();

            var phaseSnapshot = env.DeployPhasesSnapshot.First();

            phaseSnapshot.PhaseType.ShouldNotBeEmpty();
            phaseSnapshot.DeploymentInput.ShouldNotBeNull();
            phaseSnapshot.DeploymentInput.QueueId.ShouldNotBe(0);

            var deploy = env.DeploySteps.First();

            deploy.RequestedFor.ShouldNotBeNull();
            deploy.RequestedFor.Id.ShouldNotBeNull();
            deploy.LastModifiedBy.ShouldNotBeNull();

            var predeploy = env.PreDeployApprovals.First();

            predeploy.Status.ShouldNotBeNullOrEmpty();
            predeploy.ApprovalType.ShouldNotBeNullOrEmpty();
            predeploy.IsAutomated.ShouldBe(false);
            predeploy.ApprovedBy.ShouldNotBeNull();
            predeploy.ApprovedBy.DisplayName.ShouldNotBeNullOrEmpty();

            var conditions = env.Conditions.ToList();

            conditions.ShouldNotBeEmpty();

            var condition = conditions.First();

            condition.Result.ShouldBe(false);
            condition.Name.ShouldNotBeNullOrEmpty();
            condition.ConditionType.ShouldNotBeEmpty();
            condition.Value.ShouldNotBeNull();

            var artifact = release.Artifacts.First();

            artifact.Type.ShouldNotBeNull();
            artifact.Alias.ShouldNotBeNull();
        }
Пример #5
0
        public async Task ReconcileIntegrationTestForMasterBranchPermission()
        {
            var repositoryId = "6435e3f0-15b7-4302-814d-4ab586e61f8b";
            var client       = new VstsRestClient(_config.Organization, _config.Token);
            var projectId    = (await client.GetAsync(Project.Properties(_config.Project))).Id;

            await ManagePermissions
            .ForMasterBranch(client, projectId, repositoryId)
            .Permissions(Permissions.BypassPoliciesPullRequest)
            .SetToAsync(PermissionId.Allow);

            var rule = new NobodyCanBypassPolicies(client);

            (await rule.EvaluateAsync(projectId, repositoryId))
            .ShouldBe(false);
            await rule.ReconcileAsync(projectId, repositoryId);

            await Policy
            .Handle <Exception>()
            .WaitAndRetryAsync(Constants.NumRetries, t => TimeSpan.FromSeconds(t))
            .ExecuteAsync(async() =>
            {
                (await rule.EvaluateAsync(projectId, repositoryId)).ShouldBe(true);
            });
        }
        public async Task EvaluateIntegrationTest()
        {
            var client    = new VstsRestClient(_config.Organization, _config.Token);
            var projectId = (await client.GetAsync(Project.Properties(_config.Project))).Id;

            var rule = new NobodyCanDeleteTheRepository(client);

            (await rule.EvaluateAsync(projectId, RepositoryId)).ShouldBe(true);
        }
        public async Task Reconcile()
        {
            //Arrange
            var client = new VstsRestClient(_config.Organization, _config.Token);

            //Act
            var rule = new PipelineHasRequiredRetentionPolicy(client) as IReconcile;
            await rule.ReconcileAsync(_config.Project, PipelineId);
        }
        public async Task GetJsonThrowsOnError()
        {
            var request = new VstsRequest <JObject>("/get/some/data");

            using var httpTest = new HttpTest();
            httpTest.RespondWith(status: 500);
            var client = new VstsRestClient("dummy", "pat");
            await Assert.ThrowsAsync <FlurlHttpException>(async() => await client.GetAsync(request));
        }
        public async Task PutThrowsOnError()
        {
            var request = new VstsRequest <int, int>("/put/some/data");

            using var httpTest = new HttpTest();
            httpTest.RespondWith(status: 500);
            var client = new VstsRestClient("dummy", "pat");
            await Assert.ThrowsAsync <FlurlHttpException>(async() => await client.PutAsync(request, 3));
        }
        public void TestUserEntitlement()
        {
            var client = new VstsRestClient(_config.Organization, _config.Token);
            var result = client
                         .Get(MemberEntitlementManagement.UserEntitlements())
                         .ToList();

            var first = result.First(x => x.LastAccessedDate != default);

            first.DateCreated.ShouldNotBe(default);
        public async Task ConditionResultOnReleaseEnvironmentMustBeNullable()
        {
            var response = File.ReadAllText(Path.Join(EnvironmentAssets, "ConditionResultNull.json"));

            var request = new VstsRequest <Environment>("/keeas");

            using var httpTest = new HttpTest();
            httpTest.RespondWith(status: 200, body: response);
            var client = new VstsRestClient("dummy", "pat");
            await client.GetAsync(request);
        }
        public async Task GetRawUrl()
        {
            var url = new Uri("http://www.bla.nl");

            using var httpTest = new HttpTest();
            httpTest.RespondWith(status: 200, body: "{}");
            var client = new VstsRestClient("dummy", "token");
            await client.GetAsync <Response.Build>(url);

            httpTest.ShouldHaveCalled(url.ToString());
        }
        public async Task EvaluateIntegrationTest()
        {
            //Arrange
            var client          = new VstsRestClient(_config.Organization, _config.Token);
            var releasePipeline = await client.GetAsync(ReleaseManagement.Definition(_config.Project, PipelineId))
                                  .ConfigureAwait(false);

            //Act
            var rule   = new PipelineHasRequiredRetentionPolicy(client);
            var result = await rule.EvaluateAsync(_config.Project, releasePipeline);

            //Assert
            result.ShouldBe(true);
        }
        public async Task ReconcileIntegrationTest()
        {
            var client = new VstsRestClient(_config.Organization, _config.Token);

            await ManagePermissions
            .ForTeamProject(client, _config.Project)
            .Permissions((4, "52d39943-cb85-4d7f-8fa8-c6baac873819"))
            .SetToAsync(PermissionId.Allow);

            var rule = new NobodyCanDeleteTheTeamProject(client);

            (await rule.EvaluateAsync(_config.Project))
            .ShouldBe(false);

            await rule.ReconcileAsync(_config.Project);

            await Policy
            .Handle <Exception>()
            .WaitAndRetryAsync(Constants.NumRetries, t => TimeSpan.FromSeconds(t))
            .ExecuteAsync(async() =>
            {
                (await rule.EvaluateAsync(_config.Project)).ShouldBe(true);
            });
        }
        public QueryBatchProcessorIntegrationTests(TestConfig config)
        {
            var client = new VstsRestClient("asdfasdfasdf", config.Token);

            _processor = new QueryBatchProcessor(client);
        }
Пример #16
0
 public AuditServiceTests(TestConfig config)
 {
     _client = new VstsRestClient(config.Organization, config.Token);
 }