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); } }
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(); }
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>(); }
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(); }
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); }
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); }
public async Task <Result> Create(int nationalSocietyId, [FromBody] CreateTechnicalAdvisorRequestDto createTechnicalAdvisorRequestDto) => await _technicalAdvisorService.Create(nationalSocietyId, createTechnicalAdvisorRequestDto);