Пример #1
0
        public async Task <Either <ActionResult, Unit> > AddUserReleaseRole(Guid userId,
                                                                            UserReleaseRoleRequest userReleaseRole)
        {
            return(await _userService
                   .CheckCanManageAllUsers()
                   .OnSuccess(async() =>
            {
                return await _persistenceHelper
                .CheckEntityExists <Release>(
                    userReleaseRole.ReleaseId,
                    q => q.Include(r => r.Publication)
                    )
                .OnSuccess(release =>
                {
                    return ValidateUserReleaseRoleCanBeAdded(userId, userReleaseRole)
                    .OnSuccessVoid(async() =>
                    {
                        await ValidateUserReleaseRoleCanBeAdded(userId, userReleaseRole);

                        var newReleaseRole = new UserReleaseRole
                        {
                            ReleaseId = userReleaseRole.ReleaseId,
                            Role = userReleaseRole.ReleaseRole,
                            UserId = userId
                        };

                        await _contentDbContext.AddAsync(newReleaseRole);
                        await _contentDbContext.SaveChangesAsync();

                        SendNewReleaseRoleEmail(userId, release, newReleaseRole.Role);
                    });
                });
            }));
        }
Пример #2
0
 public async Task <ActionResult <Unit> > AddUserReleaseRole(Guid userId,
                                                             UserReleaseRoleRequest releaseRole)
 {
     return(await _userManagementService
            .AddUserReleaseRole(userId, releaseRole)
            .HandleFailuresOrOk());
 }
Пример #3
0
        private async Task <Either <ActionResult, bool> > ValidateUserReleaseRoleCanBeAdded(Guid userId,
                                                                                            UserReleaseRoleRequest userReleaseRole)
        {
            var existing = await _contentDbContext.UserReleaseRoles.FirstOrDefaultAsync(r =>
                                                                                        r.UserId == userId && r.ReleaseId == userReleaseRole.ReleaseId &&
                                                                                        r.Role == userReleaseRole.ReleaseRole);

            if (existing != null)
            {
                return(ValidationActionResult(UserAlreadyHasReleaseRole));
            }

            return(true);
        }
Пример #4
0
        public void AddUserReleaseRole()
        {
            PolicyCheckBuilder()
            .ExpectCheck(SecurityPolicies.CanManageUsersOnSystem)
            .AssertSuccess(async userService =>
            {
                var contentDbContextId = Guid.NewGuid().ToString();
                var publication        = new Publication
                {
                    Id    = Guid.NewGuid(),
                    Title = "Test Publication"
                };
                var release = new Release
                {
                    Id = Guid.NewGuid(),
                    TimePeriodCoverage = TimeIdentifier.CalendarYear,
                    ReleaseName        = "2000",
                    PublicationId      = publication.Id,
                    Publication        = publication
                };
                var user = new User
                {
                    Id        = Guid.NewGuid(),
                    FirstName = "TestFirstName",
                    LastName  = "TestLastName",
                    Email     = "*****@*****.**"
                };
                var userReleaseRoleRequest = new UserReleaseRoleRequest
                {
                    ReleaseId   = release.Id,
                    ReleaseRole = ReleaseRole.Approver
                };
                await using (var contentDbContext = InMemoryApplicationDbContext(contentDbContextId))
                {
                    await contentDbContext.AddAsync(publication);
                    await contentDbContext.AddAsync(release);
                    await contentDbContext.AddAsync(user);
                    await contentDbContext.SaveChangesAsync();
                }

                var userAndRolesContextId = Guid.NewGuid().ToString();
                var appUser = new ApplicationUser
                {
                    Id        = user.Id.ToString(),
                    FirstName = user.FirstName,
                    LastName  = user.LastName,
                    Email     = user.Email
                };
                await using (var userAndRolesDbContext =
                                 InMemoryUserAndRolesDbContext(userAndRolesContextId))
                {
                    await userAndRolesDbContext.AddAsync(appUser);
                    await userAndRolesDbContext.SaveChangesAsync();
                }

                await using (var contentDbContext = InMemoryApplicationDbContext(contentDbContextId))
                    await using (var usersAndRolesDbContext = InMemoryUserAndRolesDbContext(userAndRolesContextId))
                    {
                        var persistenceHelper = MockPersistenceHelper <ContentDbContext>();
                        SetupCall(persistenceHelper, release.Id, release);
                        var userManagementService = BuildUserManagementService(
                            usersAndRolesDbContext,
                            userService.Object,
                            contentDbContext,
                            persistenceHelper: persistenceHelper.Object
                            );
                        return(await userManagementService.AddUserReleaseRole(user.Id, userReleaseRoleRequest));
                    }
            });
        }