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 GivenPermissionIsNotSet_WhenFixPermission_IsNotUpdated()
        {
            var client = Substitute.For <IVstsRestClient>();

            InitializeLookupData(client, PermissionId.NotSet);


            var rule = new NobodyCanDeleteTheRepository(client);
            await rule.ReconcileAsync("TAS", "123");

            await client
            .DidNotReceive()
            .PostAsync(Arg.Any <IVstsRequest <Permissions.UpdateWrapper, object> >(),
                       Arg.Any <Permissions.UpdateWrapper>());
        }
        public async Task GivenPermissionIsAllowWhenFixPermissionIsUpdatedToDeny()
        {
            var client = Substitute.For <IVstsRestClient>();

            InitializeLookupData(client, PermissionId.Allow);

            var rule = new NobodyCanDeleteTheRepository(client);
            await rule.ReconcileAsync("TAS", "123");

            await client
            .Received()
            .PostAsync(Arg.Any <IVstsRequest <Permissions.UpdateWrapper, object> >(),
                       Arg.Is <Permissions.UpdateWrapper>(x =>
                                                          x.UpdatePackage.Contains("123") &&
                                                          x.UpdatePackage.Contains(@"PermissionId"":2")));
        }