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