public async Task Register_Expert_Ok() { // Arrange var dtoUser = new DTORegisterUser { FirstName = "John", Password = "******", LastName = "Doe", Birthday = DateTime.Now, Email = "*****@*****.**", City = "Dublin", Gender = "Male", IsExpert = true, PhoneNumber = "1234567890", ExpertCategory = "Computer Science", ExpertTags = new List <string> { "Computers" }, MainFields = new List <string> { "Computers" } }; var category = new Category { Name = dtoUser.ExpertCategory, Experts = new List <Expert>(), Tags = new List <Tag>() }; var user = new User(); var expert = new Expert(); Mapper.Map(dtoUser, user); Mapper.Map(user, expert); _userManagerMock.Setup(x => x.CreateAsync(It.IsAny <User>(), It.IsAny <string>())).Returns(Task.FromResult(IdentityResult.Success)); _userRepository.Setup(x => x.GetByEmail(It.IsAny <string>())).Returns(user); _unitOfWorkMock.Setup(x => x.Users).Returns(_userRepository.Object); _expertRepositoryMock.Setup(x => x.GetByEmail(It.IsAny <string>())).Returns(expert); _unitOfWorkMock.Setup(x => x.Experts).Returns(_expertRepositoryMock.Object); _categoryRepositoryMock.Setup(x => x.GetCategoryEagerByName(It.IsAny <string>())).Returns(category); _unitOfWorkMock.Setup(x => x.Categories).Returns(_categoryRepositoryMock.Object); _tagRepositoryMock.Setup(x => x.GetTagByName(It.IsAny <string>())); _unitOfWorkMock.Setup(x => x.Tags).Returns(_tagRepositoryMock.Object); _uut = new AccountController(_factoryMock.Object, _userManagerMock.Object, _signInManagerMock.Object, _configurationMock.Object); // Act var result = await _uut.Register(dtoUser); // Assert Assert.IsInstanceOfType(result, typeof(OkResult)); }
public async Task Register_User_Ok() { // Arrange var dtoUser = new DTORegisterUser { FirstName = "John", Password = "******", LastName = "Doe", Birthday = DateTime.Now, Email = "*****@*****.**", City = "Dublin", Gender = "Male", IsExpert = false, PhoneNumber = "1234567890", InterestTags = new List <string> { "Phone" } }; var user = new User(); Mapper.Map(dtoUser, user); _userManagerMock.Setup(x => x.CreateAsync(It.IsAny <User>(), It.IsAny <string>())).Returns(Task.FromResult(IdentityResult.Success)); _userRepository.Setup(x => x.GetByEmail(It.IsAny <string>())).Returns(user); _unitOfWorkMock.Setup(x => x.Users).Returns(_userRepository.Object); _tagRepositoryMock.Setup(x => x.GetTagByName(It.IsAny <string>())); _unitOfWorkMock.Setup(x => x.Tags).Returns(_tagRepositoryMock.Object); _uut = new AccountController(_factoryMock.Object, _userManagerMock.Object, _signInManagerMock.Object, _configurationMock.Object); // Act var result = await _uut.Register(dtoUser); // Assert Assert.IsInstanceOfType(result, typeof(OkResult)); }
public async Task <IActionResult> Register([FromBody] DTORegisterUser dtoUser) { using (var unit = _factory.GetUOF()) { try { // Add User IdentityResult userCreationResult; if (dtoUser.IsExpert) { var newUser = new Expert { UserName = dtoUser.Email, Email = dtoUser.Email, City = dtoUser.City, Birthday = dtoUser.Birthday, FirstName = dtoUser.FirstName, LastName = dtoUser.LastName, Gender = dtoUser.Gender, IsExpert = dtoUser.IsExpert, PhoneNumber = dtoUser.PhoneNumber, Calendar = new Calendar(), Description = dtoUser.Description, ExpertTags = new List <ExpertTag>(), MainFields = new List <MainFieldTag>(), Reviews = new List <Review>() }; userCreationResult = await _userManager.CreateAsync(newUser, dtoUser.Password); } else { var newUser = new User { UserName = dtoUser.Email, Email = dtoUser.Email, City = dtoUser.City, Birthday = dtoUser.Birthday, FirstName = dtoUser.FirstName, LastName = dtoUser.LastName, Gender = dtoUser.Gender, IsExpert = dtoUser.IsExpert, PhoneNumber = dtoUser.PhoneNumber, Calendar = new Calendar() }; userCreationResult = await _userManager.CreateAsync(newUser, dtoUser.Password); } // Add user tag if (userCreationResult.Succeeded) { var dbUser = unit.Users.GetByEmail(dtoUser.Email); dbUser.InterestTags = new Collection <UserTag>(); if (dtoUser.InterestTags == null) { dtoUser.InterestTags = new Collection <string>(); } foreach (var interestTag in dtoUser.InterestTags) { var tag = unit.Tags.GetTagByName(interestTag) ?? new Tag { Name = interestTag }; var userTag = new UserTag { Tag = tag, User = dbUser }; dbUser.InterestTags.Add(userTag); } unit.Complete(); if (dtoUser.IsExpert) { var dbExpert = unit.Experts.GetByEmail(dtoUser.Email); dbExpert.ExpertTags = new List <ExpertTag>(); dbExpert.MainFields = new List <MainFieldTag>(); var category = unit.Categories.GetCategoryEagerByName(dtoUser.ExpertCategory); if (dtoUser.ExpertTags == null) { return(BadRequest(new { message = "You must have some expert tags" })); } foreach (var expertTag in dtoUser.ExpertTags) { var tag = unit.Tags.GetTagByName(expertTag) ?? new Tag { Name = expertTag }; category.Tags.Add(tag); var newExpertTag = new ExpertTag { Expert = dbExpert, Tag = tag }; dbExpert.ExpertTags.Add(newExpertTag); } unit.Complete(); if (dtoUser.MainFields == null) { return(BadRequest(new { message = "You must have some main fields" })); } foreach (var expertTag in dtoUser.MainFields) { var tag = unit.Tags.GetTagByName(expertTag) ?? new Tag { Name = expertTag }; category.Tags.Add(tag); var newMainField = new MainFieldTag() { Expert = dbExpert, Tag = tag }; dbExpert.MainFields.Add(newMainField); } dbExpert.ExpertCategory = category; } unit.Complete(); } if (userCreationResult.Succeeded) { return(Ok()); } foreach (var error in userCreationResult.Errors) { ModelState.AddModelError(string.Empty, error.Description); } return(BadRequest(ModelState)); } catch (Exception e) { Console.WriteLine(e); throw; } } }