public async Task <Result> Create(int nationalSocietyId, CreateDataConsumerRequestDto createDataConsumerRequestDto) { try { string securityStamp; DataConsumerUser user; using (var transactionScope = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled)) { var identityUser = await _identityUserRegistrationService.CreateIdentityUser(createDataConsumerRequestDto.Email, Role.DataConsumer); securityStamp = await _identityUserRegistrationService.GenerateEmailVerification(identityUser.Email); user = await CreateDataConsumerUser(identityUser, nationalSocietyId, createDataConsumerRequestDto); 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 RegisterDataConsumer_WhenIdentityUserCreationSuccessful_NyssContextSaveChangesIsCalledOnce() { var userEmail = "*****@*****.**"; var registerDataConsumerRequestDto = new CreateDataConsumerRequestDto { Name = userEmail, Email = userEmail }; var nationalSocietyId = 1; var result = await _dataConsumerService.Create(nationalSocietyId, registerDataConsumerRequestDto); await _nyssContext.Received().SaveChangesAsync(); }
public void RegisterDataConsumer_WhenNonResultExceptionIsThrown_ShouldPassThroughWithoutBeingCaught() { _identityUserRegistrationServiceMock.When(ius => ius.CreateIdentityUser(Arg.Any <string>(), Arg.Any <Role>())) .Do(x => throw new Exception()); var userEmail = "*****@*****.**"; var registerDataConsumerRequestDto = new CreateDataConsumerRequestDto { Name = userEmail, Email = userEmail }; var nationalSocietyId = 1; _dataConsumerService.Create(nationalSocietyId, registerDataConsumerRequestDto).ShouldThrowAsync <Exception>(); }
public async Task RegisterDataConsumer_WhenIdentityUserCreationSuccessful_ShouldReturnSuccessResult() { var userEmail = "*****@*****.**"; var userName = "******"; var registerDataConsumerRequestDto = new CreateDataConsumerRequestDto { Name = userName, Email = userEmail }; var nationalSocietyId = 1; var result = await _dataConsumerService.Create(nationalSocietyId, registerDataConsumerRequestDto); 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 RegisterDataConsumer_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 registerDataConsumerRequestDto = new CreateDataConsumerRequestDto { Name = userEmail, Email = userEmail }; var nationalSocietyId = 1; var result = await _dataConsumerService.Create(nationalSocietyId, registerDataConsumerRequestDto); result.IsSuccess.ShouldBeFalse(); result.Message.Key.ShouldBe(exception.Result.Message.Key); }
private async Task <DataConsumerUser> CreateDataConsumerUser(IdentityUser identityUser, int nationalSocietyId, CreateDataConsumerRequestDto createDataConsumerRequestDto) { 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 DataConsumerUser { IdentityUserId = identityUser.Id, EmailAddress = identityUser.Email, Name = createDataConsumerRequestDto.Name, PhoneNumber = createDataConsumerRequestDto.PhoneNumber, AdditionalPhoneNumber = createDataConsumerRequestDto.AdditionalPhoneNumber, Organization = createDataConsumerRequestDto.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] CreateDataConsumerRequestDto createDataConsumerRequestDto) => await _dataConsumerService.Create(nationalSocietyId, createDataConsumerRequestDto);