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));
        }
Пример #3
0
        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;
                }
            }
        }