public void TestDeletePermission_PermissionAssignmentDoesNotExist()
        {
            var foreignResourceId = 1;
            var user = new UserAccount
            {
                PrincipalId = 2
            };
            var permissionAssignment = new PermissionAssignment
            {
                PermissionId = 1,
                PrincipalId  = user.PrincipalId,
                ResourceId   = 3
            };
            var foreignResourceCache = new ForeignResourceCache(foreignResourceId, permissionAssignment.ResourceId, 0, null, null, null);

            context.PermissionAssignments.Add(permissionAssignment);
            context.UserAccounts.Add(user);
            resourceService.Setup(x => x.GetResourceByForeignResourceId(It.IsAny <int>(), It.IsAny <int>())).Returns(foreignResourceCache);
            resourceService.Setup(x => x.GetResourceByForeignResourceIdAsync(It.IsAny <int>(), It.IsAny <int>())).ReturnsAsync(foreignResourceCache);

            var         deletedPermission = new DeletedPermission(user.PrincipalId, 0, 0, ResourceType.Project.Value);
            Func <Task> f = async() =>
            {
                await service.DeletePermissionAsync(deletedPermission);
            };

            service.Invoking(x => x.DeletePermission(deletedPermission)).ShouldThrow <ModelNotFoundException>()
            .WithMessage("The permission assignment was not found.");
            f.ShouldThrow <ModelNotFoundException>()
            .WithMessage("The permission assignment was not found.");
        }
Exemplo n.º 2
0
        /// <summary>
        /// Deletes a permission assignment.
        /// </summary>
        /// <param name="permission">The deleted permission.</param>
        public async Task DeletePermissionAsync(DeletedPermission permission)
        {
            var user = await Context.UserAccounts.FindAsync(permission.GranteePrincipalId);

            var resource = await resourceService.GetResourceByForeignResourceIdAsync(permission.ForeignResourceId, permission.GetResourceType().Id);

            throwIfForeignResourceNotFoundByDeletedPermission(permission, resource);

            var permissionAssignment = await CreateGetPermissionAssignmentQuery(permission.GranteePrincipalId, permission.PermissionId, resource.ResourceId).FirstOrDefaultAsync();

            throwIfPermissionAssignmentNotFound(permissionAssignment);

            DoDeletePermissionAssignment(permissionAssignment, user);
        }
        public async Task TestDeletePermission_PrincipalIsUserAccount()
        {
            var foreignResourceId = 1;
            var user = new UserAccount
            {
                PrincipalId = 2
            };
            var permissionAssignment = new PermissionAssignment
            {
                PermissionId = 1,
                PrincipalId  = user.PrincipalId,
                ResourceId   = 3
            };
            var foreignResourceCache = new ForeignResourceCache(foreignResourceId, permissionAssignment.ResourceId, 0, null, null, null);

            context.SetupActions.Add(() =>
            {
                user.PermissionsRevisedOn = null;
                context.PermissionAssignments.Add(permissionAssignment);
                context.UserAccounts.Add(user);
            });

            resourceService.Setup(x => x.GetResourceByForeignResourceId(It.IsAny <int>(), It.IsAny <int>())).Returns(foreignResourceCache);
            resourceService.Setup(x => x.GetResourceByForeignResourceIdAsync(It.IsAny <int>(), It.IsAny <int>())).ReturnsAsync(foreignResourceCache);

            var deletedPermission = new DeletedPermission(permissionAssignment.PrincipalId, foreignResourceId, permissionAssignment.PermissionId, ResourceType.Project.Value);

            context.Revert();
            Assert.AreEqual(1, context.PermissionAssignments.Count());
            service.DeletePermission(deletedPermission);
            Assert.AreEqual(0, context.PermissionAssignments.Count());
            DateTimeOffset.UtcNow.Should().BeCloseTo(user.PermissionsRevisedOn.Value, 2000);

            context.Revert();
            Assert.AreEqual(1, context.PermissionAssignments.Count());
            await service.DeletePermissionAsync(deletedPermission);

            Assert.AreEqual(0, context.PermissionAssignments.Count());
            DateTimeOffset.UtcNow.Should().BeCloseTo(user.PermissionsRevisedOn.Value, 2000);
        }
        public async Task TestDeletePermission_PrincipalIsNotUserAccount()
        {
            var foreignResourceId = 1;
            var principal         = new Principal
            {
                PrincipalId = 2
            };
            var permissionAssignment = new PermissionAssignment
            {
                PermissionId = 1,
                PrincipalId  = principal.PrincipalId,
                ResourceId   = 3
            };
            var foreignResourceCache = new ForeignResourceCache(foreignResourceId, permissionAssignment.ResourceId, 0, null, null, null);

            context.SetupActions.Add(() =>
            {
                context.PermissionAssignments.Add(permissionAssignment);
                context.Principals.Add(principal);
            });

            resourceService.Setup(x => x.GetResourceByForeignResourceId(It.IsAny <int>(), It.IsAny <int>())).Returns(foreignResourceCache);
            resourceService.Setup(x => x.GetResourceByForeignResourceIdAsync(It.IsAny <int>(), It.IsAny <int>())).ReturnsAsync(foreignResourceCache);

            var deletedPermission = new DeletedPermission(permissionAssignment.PrincipalId, foreignResourceId, permissionAssignment.PermissionId, ResourceType.Project.Value);

            context.Revert();
            Assert.AreEqual(1, context.PermissionAssignments.Count());
            service.DeletePermission(deletedPermission);
            Assert.AreEqual(0, context.PermissionAssignments.Count());

            context.Revert();
            Assert.AreEqual(1, context.PermissionAssignments.Count());
            await service.DeletePermissionAsync(deletedPermission);

            Assert.AreEqual(0, context.PermissionAssignments.Count());
        }
        public void TestDeletePermission_ForeignResourceByIdDoesNotExist()
        {
            var user = new UserAccount
            {
                PrincipalId = 2
            };

            context.UserAccounts.Add(user);
            ForeignResourceCache foreignResourceCache = null;

            resourceService.Setup(x => x.GetResourceByForeignResourceId(It.IsAny <int>(), It.IsAny <int>())).Returns(foreignResourceCache);
            resourceService.Setup(x => x.GetResourceByForeignResourceIdAsync(It.IsAny <int>(), It.IsAny <int>())).ReturnsAsync(foreignResourceCache);

            var         deletedPermission = new DeletedPermission(user.PrincipalId, 0, 0, ResourceType.Project.Value);
            Func <Task> f = async() =>
            {
                await service.DeletePermissionAsync(deletedPermission);
            };

            service.Invoking(x => x.DeletePermission(deletedPermission)).ShouldThrow <ModelNotFoundException>()
            .WithMessage(String.Format("The foreign resource with id [{0}] and resource type [{1}] does not exist in CAM.", 0, ResourceType.Project.Value));
            f.ShouldThrow <ModelNotFoundException>()
            .WithMessage(String.Format("The foreign resource with id [{0}] and resource type [{1}] does not exist in CAM.", 0, ResourceType.Project.Value));
        }