public async Task TestGrantPermission_GranteeIsAUserAccount()
        {
            var grantor = new Principal
            {
                PrincipalId = 1,
            };
            var grantee = new Principal
            {
                PrincipalId = 2
            };
            var user = new UserAccount
            {
                Principal   = grantee,
                PrincipalId = grantee.PrincipalId
            };
            var permission = new CAM.Data.Permission
            {
                PermissionId   = CAM.Data.Permission.EditOffice.Id,
                PermissionName = CAM.Data.Permission.EditOffice.Value
            };
            var resourceType = ResourceType.Program;
            var resource     = new Resource
            {
                ResourceId        = 8,
                ForeignResourceId = 10,
                ResourceTypeId    = resourceType.Id,
            };
            var foreignResourceCache = new ForeignResourceCache(resource.ForeignResourceId, resource.ResourceId, resource.ResourceTypeId, null, null, null);

            context.SetupActions.Add(() =>
            {
                context.Principals.Add(grantor);
                context.Principals.Add(grantee);
                context.Permissions.Add(permission);
                context.Resources.Add(resource);
                context.UserAccounts.Add(user);
                Assert.AreEqual(0, context.PermissionAssignments.Count());
            });

            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);
            resourceService.Setup(x => x.GetResourcePermissions(It.IsAny <string>(), It.IsAny <int?>())).Returns(GetAvailablePermissionsList(permission));
            resourceService.Setup(x => x.GetResourcePermissionsAsync(It.IsAny <string>(), It.IsAny <int?>())).ReturnsAsync(GetAvailablePermissionsList(permission));


            Action tester = () =>
            {
                Assert.AreEqual(1, context.PermissionAssignments.Count());
                DateTimeOffset.Now.Should().BeCloseTo(context.UserAccounts.First().PermissionsRevisedOn.Value, 2000);
            };

            context.Revert();
            var grantedPermission = new GrantedPermission(grantee.PrincipalId, permission.PermissionId, resource.ForeignResourceId, resourceType.Value, grantor.PrincipalId);

            service.GrantPermission(grantedPermission);
            tester();

            context.Revert();
            context.PermissionAssignments = new PermissionAssignmentTestDbSet();
            await service.GrantPermissionsAsync(grantedPermission);

            tester();
        }