Ejemplo n.º 1
0
        public async Task <Result> Create(int nationalSocietyId, CreateTechnicalAdvisorRequestDto createTechnicalAdvisorRequestDto)
        {
            try
            {
                string securityStamp;
                TechnicalAdvisorUser user;
                using (var transactionScope = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled))
                {
                    var identityUser = await _identityUserRegistrationService.CreateIdentityUser(createTechnicalAdvisorRequestDto.Email, Role.TechnicalAdvisor);

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

                    user = await CreateTechnicalAdvisorUser(identityUser, nationalSocietyId, createTechnicalAdvisorRequestDto);

                    transactionScope.Complete();
                }

                await _verificationEmailService.SendVerificationEmail(user, securityStamp);

                return(Success(ResultKey.User.Registration.Success));
            }
            catch (ResultException e)
            {
                _loggerAdapter.Debug(e);
                return(e.Result);
            }
        }
Ejemplo n.º 2
0
        public async Task RegisterTechnicalAdvisor_WhenIdentityUserCreationSuccessful_NyssContextSaveChangesIsCalledOnce()
        {
            var userEmail = "*****@*****.**";
            var registerTechnicalAdvisorRequestDto = new CreateTechnicalAdvisorRequestDto
            {
                Name  = userEmail,
                Email = userEmail
            };

            var nationalSocietyId = 1;
            var result            = await _technicalAdvisorService.Create(nationalSocietyId, registerTechnicalAdvisorRequestDto);


            await _nyssContext.Received().SaveChangesAsync();
        }
Ejemplo n.º 3
0
        public void RegisterTechnicalAdvisor_WhenNonResultExceptionIsThrown_ShouldPassThroughWithoutBeingCaught()
        {
            _identityUserRegistrationServiceMock.When(ius => ius.CreateIdentityUser(Arg.Any <string>(), Arg.Any <Role>()))
            .Do(x => throw new Exception());

            var userEmail = "*****@*****.**";
            var registerTechnicalAdvisorRequestDto = new CreateTechnicalAdvisorRequestDto
            {
                Name  = userEmail,
                Email = userEmail
            };

            var nationalSocietyId = 1;

            _technicalAdvisorService.Create(nationalSocietyId, registerTechnicalAdvisorRequestDto).ShouldThrowAsync <Exception>();
        }
Ejemplo n.º 4
0
        public async Task RegisterTechnicalAdvisor_WhenIdentityUserCreationSuccessful_ShouldReturnSuccessResult()
        {
            var userEmail = "*****@*****.**";
            var userName  = "******";
            var registerTechnicalAdvisorRequestDto = new CreateTechnicalAdvisorRequestDto
            {
                Name  = userName,
                Email = userEmail
            };

            var nationalSocietyId = 1;
            var result            = await _technicalAdvisorService.Create(nationalSocietyId, registerTechnicalAdvisorRequestDto);

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

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

            result.IsSuccess.ShouldBeTrue();
        }
Ejemplo n.º 5
0
        public async Task RegisterTechnicalAdvisor_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 registerTechnicalAdvisorRequestDto = new CreateTechnicalAdvisorRequestDto
            {
                Name  = userEmail,
                Email = userEmail
            };

            var nationalSocietyId = 1;
            var result            = await _technicalAdvisorService.Create(nationalSocietyId, registerTechnicalAdvisorRequestDto);


            result.IsSuccess.ShouldBeFalse();
            result.Message.Key.ShouldBe(exception.Result.Message.Key);
        }
Ejemplo n.º 6
0
        private async Task <TechnicalAdvisorUser> CreateTechnicalAdvisorUser(IdentityUser identityUser, int nationalSocietyId, CreateTechnicalAdvisorRequestDto createTechnicalAdvisorRequestDto)
        {
            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 TechnicalAdvisorUser
            {
                IdentityUserId        = identityUser.Id,
                EmailAddress          = identityUser.Email,
                Name                  = createTechnicalAdvisorRequestDto.Name,
                PhoneNumber           = createTechnicalAdvisorRequestDto.PhoneNumber,
                AdditionalPhoneNumber = createTechnicalAdvisorRequestDto.AdditionalPhoneNumber,
                Organization          = createTechnicalAdvisorRequestDto.Organization,
                ApplicationLanguage   = defaultUserApplicationLanguage
            };

            var userNationalSociety = CreateUserNationalSocietyReference(nationalSociety, user);

            await _dataContext.AddAsync(userNationalSociety);

            await _dataContext.SaveChangesAsync();

            return(user);
        }
Ejemplo n.º 7
0
 public async Task <Result> Create(int nationalSocietyId, [FromBody] CreateTechnicalAdvisorRequestDto createTechnicalAdvisorRequestDto) =>
 await _technicalAdvisorService.Create(nationalSocietyId, createTechnicalAdvisorRequestDto);