Beispiel #1
0
        public async Task <Result> Create(int nationalSocietyId, CreateManagerRequestDto createManagerRequestDto)
        {
            try
            {
                string      securityStamp;
                ManagerUser user;
                using (var transactionScope = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled))
                {
                    var identityUser = await _identityUserRegistrationService.CreateIdentityUser(createManagerRequestDto.Email, Role.Manager);

                    securityStamp = await _identityUserRegistrationService.GenerateEmailVerification(identityUser.Email);

                    user = await CreateManagerUser(identityUser, nationalSocietyId, createManagerRequestDto);

                    transactionScope.Complete();
                }

                await _verificationEmailService.SendVerificationEmail(user, securityStamp);

                return(Success(ResultKey.User.Registration.Success));
            }
            catch (ResultException e)
            {
                _loggerAdapter.Debug(e);
                return(e.Result);
            }
        }
Beispiel #2
0
        public void RegisterManager_WhenNonResultExceptionIsThrown_ShouldPassThroughWithoutBeingCaught()
        {
            _identityUserRegistrationServiceMock.When(ius => ius.CreateIdentityUser(Arg.Any <string>(), Arg.Any <Role>()))
            .Do(x => throw new Exception());

            var userEmail = "*****@*****.**";
            var registerManagerRequestDto = new CreateManagerRequestDto
            {
                Name  = userEmail,
                Email = userEmail
            };

            _managerService.Create(_nationalSocietyId, registerManagerRequestDto).ShouldThrowAsync <Exception>();
        }
Beispiel #3
0
        public async Task RegisterManager_WhenIdentityUserCreationSuccessful_NyssContextSaveChangesIsCalledOnce()
        {
            var userEmail = "*****@*****.**";
            var registerManagerRequestDto = new CreateManagerRequestDto
            {
                Name  = userEmail,
                Email = userEmail
            };

            var result = await _managerService.Create(_nationalSocietyId, registerManagerRequestDto);


            await _nyssContext.Received().SaveChangesAsync();
        }
Beispiel #4
0
        public async Task RegisterManager_WhenIdentityUserCreationSuccessful_ShouldReturnSuccessResult()
        {
            var userEmail = "*****@*****.**";
            var userName  = "******";
            var registerManagerRequestDto = new CreateManagerRequestDto
            {
                Name  = userName,
                Email = userEmail
            };

            var result = await _managerService.Create(_nationalSocietyId, registerManagerRequestDto);

            await _identityUserRegistrationServiceMock.Received(1).GenerateEmailVerification(userEmail);

            await _verificationEmailServiceMock.Received(1).SendVerificationEmail(Arg.Is <User>(u => u.EmailAddress == userEmail), Arg.Any <string>());

            result.IsSuccess.ShouldBeTrue();
        }
Beispiel #5
0
        public async Task RegisterManager_WhenIdentityUserServiceThrowsResultException_ShouldReturnErrorResultWithAppropriateKey()
        {
            var exception = new ResultException(ResultKey.User.Registration.UserAlreadyExists);

            _identityUserRegistrationServiceMock.When(ius => ius.CreateIdentityUser(Arg.Any <string>(), Arg.Any <Role>()))
            .Do(x => throw exception);

            var userEmail = "*****@*****.**";
            var registerManagerRequestDto = new CreateManagerRequestDto
            {
                Name  = userEmail,
                Email = userEmail
            };

            var nationalSocietyId = 1;
            var result            = await _managerService.Create(nationalSocietyId, registerManagerRequestDto);


            result.IsSuccess.ShouldBeFalse();
            result.Message.Key.ShouldBe(exception.Result.Message.Key);
        }
Beispiel #6
0
        private async Task <ManagerUser> CreateManagerUser(IdentityUser identityUser, int nationalSocietyId, CreateManagerRequestDto createManagerRequestDto)
        {
            var nationalSociety = await _dataContext.NationalSocieties.Include(ns => ns.ContentLanguage)
                                  .SingleOrDefaultAsync(ns => ns.Id == nationalSocietyId);

            if (nationalSociety == null)
            {
                throw new ResultException(ResultKey.User.Registration.NationalSocietyDoesNotExist);
            }

            if (nationalSociety.IsArchived)
            {
                throw new ResultException(ResultKey.User.Registration.CannotCreateUsersInArchivedNationalSociety);
            }

            var defaultUserApplicationLanguage = await _dataContext.ApplicationLanguages
                                                 .SingleOrDefaultAsync(al => al.LanguageCode == nationalSociety.ContentLanguage.LanguageCode);

            var user = new ManagerUser
            {
                IdentityUserId        = identityUser.Id,
                EmailAddress          = identityUser.Email,
                Name                  = createManagerRequestDto.Name,
                PhoneNumber           = createManagerRequestDto.PhoneNumber,
                AdditionalPhoneNumber = createManagerRequestDto.AdditionalPhoneNumber,
                Organization          = createManagerRequestDto.Organization,
                ApplicationLanguage   = defaultUserApplicationLanguage
            };

            var userNationalSociety = CreateUserNationalSocietyReference(nationalSociety, user);

            await _dataContext.AddAsync(userNationalSociety);

            await _dataContext.SaveChangesAsync();

            return(user);
        }
Beispiel #7
0
 public async Task <Result> Create(int nationalSocietyId, [FromBody] CreateManagerRequestDto createManagerRequestDto) =>
 await _managerService.Create(nationalSocietyId, createManagerRequestDto);