Exemple #1
0
        public void ApiV1UsersGetAllReturnsAllUsers()
        {
            var user1 = new AppUser {
                Id = 1, Username = "******"
            };
            var user2 = new AppUser {
                Id = 2, Username = "******"
            };
            var allUsers = new[] { user1, user2 };

            var userRepository = Substitute.For <IUserRepository>();

            userRepository.GetAllUsers().Returns(allUsers.AsQueryable());

            var controller = new UsersApiController(userRepository, null, null);

            var actionResult  = controller.ApiV1UsersGetAll();
            var contentResult = actionResult as ObjectResult;

            Assert.That(contentResult, Is.Not.Null);
            Assert.That(contentResult.StatusCode, Is.EqualTo((int)HttpStatusCode.OK));

            var usersResult = contentResult.Value as List <UserViewModel>;

            Assert.That(usersResult, Is.Not.Null);
            Assert.That(usersResult.Count, Is.EqualTo(allUsers.Length));

            for (var i = 0; i < allUsers.Length; i++)
            {
                Assert.That(usersResult[i].UserId, Is.EqualTo(allUsers[i].Id));
                Assert.That(usersResult[i].Username, Is.EqualTo(allUsers[i].Username));
            }
        }
Exemple #2
0
        public async Task UpdateUser_ValidUser_Success()
        {
            // Arrange
            var userRequestDtos = new UserRequestDto
            {
                Id       = "1",
                Email    = "*****@*****.**",
                FullName = "Test Full Name",
                UserName = "******",
                Password = "******"
            };
            var userResponseDtos = new UserResponseDto
            {
                Id       = "1",
                Email    = "*****@*****.**",
                FullName = "Test Full Name",
                UserName = "******"
            };

            _userServiceMock.Setup(c => c.UpdateAsync(userRequestDtos.Id, userRequestDtos)).ReturnsAsync(userResponseDtos);
            _usersApiController = new UsersApiController(_userServiceMock.Object, _httpContextAccessorMock.Object);
            // Act
            var result = await _usersApiController.Put(userRequestDtos.Id, userRequestDtos);

            // Assert
            var resultStatusCode = ((Microsoft.AspNetCore.Mvc.ObjectResult)result).StatusCode;
            var resultValue      = (UserResponseDto)((Microsoft.AspNetCore.Mvc.ObjectResult)result).Value;

            Assert.Equal((int)HttpStatusCode.Accepted, resultStatusCode);
            Assert.Equal(userRequestDtos.Email, resultValue.Email);
        }
        public UsersControllerTests()
        {
            dbContext = new Mock <DBContext>();
            //Users
            usersRepositoryMock = new Mock <UsersRepository>(dbContext.Object);

            var users = new List <User>()
            {
                new User()
                {
                    Id = 100, Sex = Sex.Man, City = "Волгоград"
                },
                new User()
                {
                    Id = 1, Sex = Sex.Man, City = "Волгоград"
                },
                new User()
                {
                    Id = 2, Sex = Sex.Girl, City = "Волгоград"
                },
                new User()
                {
                    Id = 3, Sex = Sex.Man, City = "Волгоград"
                },
            };

            usersRepositoryMock.Setup(repo => repo.GetList()).Returns(users.AsQueryable().BuildMock().Object);

            //Controller
            usersController = new UsersApiController(usersRepositoryMock.Object);
        }
Exemple #4
0
        public async Task GetMyProfile_ValidToken_NoContent()
        {
            // Arrange
            var userId           = "1";
            var userResponseDtos = new UserResponseDto
            {
                Id       = "1",
                Email    = "*****@*****.**",
                FullName = "Test Full Name",
                UserName = "******"
            };
            IEnumerable <Claim> claims = new List <Claim>
            {
                new Claim(type: JwtRegisteredClaimNames.Jti, value: "2"),
                new Claim(type: JwtRegisteredClaimNames.Aud, value: "testAud")
            };

            Mock <HttpContext>     httpContextMock = new Mock <HttpContext>();
            Mock <ClaimsPrincipal> userMock        = new Mock <ClaimsPrincipal>();

            _httpContextAccessorMock.Setup(c => c.HttpContext).Returns(httpContextMock.Object);
            httpContextMock.Setup(c => c.User).Returns(userMock.Object);
            userMock.Setup(c => c.Claims).Returns(claims);

            _userServiceMock.Setup(c => c.GetByIdAsync(userId)).ReturnsAsync(userResponseDtos);
            _usersApiController = new UsersApiController(_userServiceMock.Object, _httpContextAccessorMock.Object);
            // Act
            var result = await _usersApiController.Get();

            // Assert
            var resultStatusCode = ((Microsoft.AspNetCore.Mvc.StatusCodeResult)result).StatusCode;

            Assert.Equal((int)HttpStatusCode.NoContent, resultStatusCode);
        }
Exemple #5
0
        public void ApiV1UsersGetByIdReturnsUserById()
        {
            const int userId = 1;

            var user1 = new AppUser {
                Id = userId, Username = "******"
            };

            var userRepository = Substitute.For <IUserRepository>();

            userRepository.GetUserById(userId).Returns(user1);

            var controller = new UsersApiController(userRepository, null, null);

            var actionResult  = controller.ApiV1UsersGetById(userId);
            var contentResult = actionResult as ObjectResult;

            Assert.That(contentResult, Is.Not.Null);
            Assert.That(contentResult.StatusCode, Is.EqualTo((int)HttpStatusCode.OK));

            var userResult = contentResult.Value as UserViewModel;

            Assert.That(userResult, Is.Not.Null);
            Assert.That(userResult.UserId, Is.EqualTo(userId));
            Assert.That(userResult.Username, Is.EqualTo(user1.Username));
        }
Exemple #6
0
        public async Task GetListUsers_WithPaging_Success()
        {
            // Arrange
            var pageIndex        = 0;
            var pageSize         = 10;
            var userResponseDtos = new List <UserResponseDto>()
            {
                new UserResponseDto
                {
                    Id       = "1",
                    Email    = "*****@*****.**",
                    FullName = "Test 1",
                    UserName = "******"
                },
                new UserResponseDto
                {
                    Id       = "2",
                    Email    = "*****@*****.**",
                    FullName = "Test 2",
                    UserName = "******"
                }
            };
            var listUsers = new PaginatedItems <UserResponseDto, string>(pageIndex, pageSize, userResponseDtos.Count, userResponseDtos);

            _userServiceMock.Setup(c => c.ListAsync(pageIndex, pageSize)).ReturnsAsync(listUsers);
            _usersApiController = new UsersApiController(_userServiceMock.Object, _httpContextAccessorMock.Object);
            // Act
            var result = await _usersApiController.Get(0, 10);

            // Assert
            var resultValue = ((Microsoft.AspNetCore.Mvc.ObjectResult)result).Value;

            Assert.NotNull(result);
            Assert.Equal(listUsers, resultValue);
        }
Exemple #7
0
        public async Task ApiV1UsersCreateValidatesUniqueUser()
        {
            const string username      = "******";
            const string bankId        = "TestBank";
            const string accountNumber = "11223344";

            var userRepository = Substitute.For <IUserRepository>();

            userRepository.GetUserByUsername(username).Returns(new AppUser {
                Username = username
            });

            var connectionManager = Substitute.For <IBankConnectionManager>();

            connectionManager.GetRegisteredBankIds().Returns(new List <string> {
                bankId
            });

            var controller = new UsersApiController(userRepository, null, connectionManager);

            var actionResultDuplicateUser = await controller.ApiV1UsersCreate(new CreateUserViewModel
            {
                Username      = username,
                BankId        = bankId,
                AccountNumber = accountNumber
            });

            var contentResultDuplicateUser = actionResultDuplicateUser as ObjectResult;

            Assert.That(contentResultDuplicateUser, Is.Not.Null);
            Assert.That(contentResultDuplicateUser.StatusCode, Is.EqualTo((int)HttpStatusCode.Conflict));
        }
Exemple #8
0
        public async Task ApiV1UsersCreateValidatesBankId()
        {
            const string username      = "******";
            const string bankId        = "TestBank1";
            const string accountNumber = "11223344";

            const string invalidBankId = "TestBank2";

            var connectionManager = Substitute.For <IBankConnectionManager>();

            connectionManager.GetRegisteredBankIds().Returns(new List <string> {
                bankId
            });

            var controller = new UsersApiController(null, null, connectionManager);

            var actionResultBadBankId = await controller.ApiV1UsersCreate(new CreateUserViewModel
            {
                Username      = username,
                BankId        = invalidBankId,
                AccountNumber = accountNumber
            });

            var contentResultBadBankId = actionResultBadBankId as ObjectResult;

            Assert.That(contentResultBadBankId, Is.Not.Null);
            Assert.That(contentResultBadBankId.StatusCode, Is.EqualTo((int)HttpStatusCode.BadRequest));
        }
        public async Task <ActionResult> Register(RegisterViewModel model)
        {
            if (ModelState.IsValid)
            {
                var user = new ApplicationUser {
                    UserName = model.Email, Email = model.Email
                };
                var result = await UserManager.CreateAsync(user, model.Password);

                if (result.Succeeded)
                {
                    var rolresult = UserManager.AddToRole(user.Id, EnumRoles.Normal.ToString());
                    await SignInManager.SignInAsync(user, isPersistent : false, rememberBrowser : false);

                    // For more information on how to enable account confirmation and password reset please visit http://go.microsoft.com/fwlink/?LinkID=320771
                    // Send an email with this link
                    // string code = await UserManager.GenerateEmailConfirmationTokenAsync(user.Id);
                    // var callbackUrl = Url.Action("ConfirmEmail", "Account", new { userId = user.Id, code = code }, protocol: Request.Url.Scheme);
                    // await UserManager.SendEmailAsync(user.Id, "Confirm your account", "Please confirm your account by clicking <a href=\"" + callbackUrl + "\">here</a>");

                    var createdUser = await UserManager.FindByNameAsync(model.Email);

                    if (createdUser == null)
                    {
                        this.ModelState.AddModelError("", "The user does not exist.");
                        return(View());
                    }

                    Domain.Concrete.Users oUser = new Domain.Concrete.Users();
                    oUser.AspNetUserId = new Guid(createdUser.Id);
                    oUser.UserName     = model.Email;

                    UsersApiController oUsersController = new UsersApiController(unitOfWork);
                    var r = await oUsersController.Post(oUser);

                    if (r == null)
                    {
                        this.ModelState.AddModelError("", "The user could not be created.");
                        return(View());
                    }

                    return(RedirectToAction("Index", "Home"));
                }

                AddErrors(result);
            }



            // If we got this far, something failed, redisplay form
            return(View(model));
        }
Exemple #10
0
        public async Task ApiV1UsersCreateForwardsErrorFromRemoteService()
        {
            const string username      = "******";
            const string bankId        = "TestBank";
            const string accountNumber = "11223344";

            const long errorCode = 1001124;

            var userRepository    = Substitute.For <IUserRepository>();
            var accountRepository = Substitute.For <IBankAccountRepository>();

            // GetAccountDetails should return a bad request result even though the data is valid
            var bankConnection = Substitute.For <IBankConnection>();

            bankConnection.GetAccountDetails(accountNumber).Returns(x =>
                                                                    Task.FromResult(
                                                                        new OperationResult <AccountDetails>(
                                                                            (int)HttpStatusCode.BadRequest,
                                                                            new OperationError(
                                                                                errorCode,
                                                                                $"Account number '{accountNumber}' does not fit format ^[\\d]{{8}}"
                                                                                )
                                                                            )
                                                                        )
                                                                    );

            var connectionManager = Substitute.For <IBankConnectionManager>();

            connectionManager.GetRegisteredBankIds().Returns(new List <string> {
                bankId
            });
            connectionManager.CreateConnection(bankId).Returns(bankConnection);

            var controller = new UsersApiController(userRepository, accountRepository, connectionManager);

            var actionResult = await controller.ApiV1UsersCreate(new CreateUserViewModel
            {
                Username      = username,
                BankId        = bankId,
                AccountNumber = accountNumber
            });

            var contentResult = actionResult as ObjectResult;

            Assert.That(contentResult, Is.Not.Null);
            Assert.That(contentResult.StatusCode, Is.EqualTo((int)HttpStatusCode.BadRequest));

            var errorViewModel = contentResult.Value as ErrorViewModel;

            Assert.That(errorViewModel, Is.Not.Null);
            Assert.That(errorViewModel.ErrorCode, Is.EqualTo(errorCode));
        }
Exemple #11
0
        public async Task ApiV1UsersCreateValidatesRequiredData()
        {
            const string username      = "******";
            const string bankId        = "TestBank";
            const string accountNumber = "11223344";

            var controller = new UsersApiController(null, null, null);

            var actionResultNoUserData = await controller.ApiV1UsersCreate(null);

            var contentResultNoUserData = actionResultNoUserData as ObjectResult;

            Assert.That(contentResultNoUserData, Is.Not.Null);
            Assert.That(contentResultNoUserData.StatusCode, Is.EqualTo((int)HttpStatusCode.BadRequest));

            var actionResultNoUsername = await controller.ApiV1UsersCreate(new CreateUserViewModel
            {
                Username      = null,
                BankId        = bankId,
                AccountNumber = accountNumber
            });

            var contentResultNoUsername = actionResultNoUsername as ObjectResult;

            Assert.That(contentResultNoUsername, Is.Not.Null);
            Assert.That(contentResultNoUsername.StatusCode, Is.EqualTo((int)HttpStatusCode.BadRequest));

            var actionResultNoBankId = await controller.ApiV1UsersCreate(new CreateUserViewModel
            {
                Username      = username,
                BankId        = null,
                AccountNumber = accountNumber
            });

            var contentResultNoBankId = actionResultNoBankId as ObjectResult;

            Assert.That(contentResultNoBankId, Is.Not.Null);
            Assert.That(contentResultNoBankId.StatusCode, Is.EqualTo((int)HttpStatusCode.BadRequest));

            var actionResultNoAccountNumber = await controller.ApiV1UsersCreate(new CreateUserViewModel
            {
                Username      = username,
                BankId        = bankId,
                AccountNumber = null
            });

            var contentResultNoAccountNumber = actionResultNoAccountNumber as ObjectResult;

            Assert.That(contentResultNoAccountNumber, Is.Not.Null);
            Assert.That(contentResultNoAccountNumber.StatusCode, Is.EqualTo((int)HttpStatusCode.BadRequest));
        }
Exemple #12
0
        public async Task GetUser_ById_NoContent()
        {
            var userId = Guid.NewGuid().ToString();

            _userServiceMock.Setup(c => c.GetByIdAsync(userId)).ReturnsAsync((UserResponseDto)null);
            _usersApiController = new UsersApiController(_userServiceMock.Object, _httpContextAccessorMock.Object);
            // Act
            var result = await _usersApiController.Get(userId);

            // Assert
            var resultStatusCode = ((Microsoft.AspNetCore.Mvc.StatusCodeResult)result).StatusCode;

            Assert.Equal((int)HttpStatusCode.NoContent, resultStatusCode);
        }
Exemple #13
0
        public async Task DeleteUser_UserId_Success()
        {
            // Arrange
            var userId = "1";

            _usersApiController = new UsersApiController(_userServiceMock.Object, _httpContextAccessorMock.Object);
            // Act
            var result = await _usersApiController.Delete(userId);

            // Assert
            var resultStatusCode = ((Microsoft.AspNetCore.Mvc.StatusCodeResult)result).StatusCode;

            Assert.Equal((int)HttpStatusCode.NoContent, resultStatusCode);
        }
Exemple #14
0
        public async Task ApiV1UsersCreateValidatesRemoteBankAccount()
        {
            const string username      = "******";
            const string bankId        = "TestBank";
            const string accountNumber = "11223344";

            const long errorCode = 1001123;

            var userRepository = Substitute.For <IUserRepository>();

            var accountRepository = Substitute.For <IBankAccountRepository>();

            var bankConnection = Substitute.For <IBankConnection>();

            bankConnection.GetAccountDetails(accountNumber).Returns(x =>
                                                                    Task.FromResult(
                                                                        new OperationResult <AccountDetails>(
                                                                            (int)HttpStatusCode.NotFound,
                                                                            new OperationError(errorCode, $"Unable to find account with account number '{accountNumber}'")
                                                                            )
                                                                        )
                                                                    );

            var connectionManager = Substitute.For <IBankConnectionManager>();

            connectionManager.GetRegisteredBankIds().Returns(new List <string> {
                bankId
            });
            connectionManager.CreateConnection(bankId).Returns(bankConnection);

            var controller = new UsersApiController(userRepository, accountRepository, connectionManager);

            var actionResultBankAccountNotFound = await controller.ApiV1UsersCreate(new CreateUserViewModel
            {
                Username      = username,
                BankId        = bankId,
                AccountNumber = accountNumber
            });

            var contentResultBankAccountNotFound = actionResultBankAccountNotFound as ObjectResult;

            Assert.That(contentResultBankAccountNotFound, Is.Not.Null);
            Assert.That(contentResultBankAccountNotFound.StatusCode, Is.EqualTo((int)HttpStatusCode.NotFound));

            var errorViewModel = contentResultBankAccountNotFound.Value as ErrorViewModel;

            Assert.That(errorViewModel, Is.Not.Null);
            Assert.That(errorViewModel.ErrorCode, Is.EqualTo(errorCode));
        }
Exemple #15
0
        public void ApiV1UsersGetByIdHandlesUserIdNotSupplied()
        {
            var controller = new UsersApiController(null, null, null);

            var actionResult  = controller.ApiV1UsersGetById(null);
            var contentResult = actionResult as ObjectResult;

            Assert.That(contentResult, Is.Not.Null);
            Assert.That(contentResult.StatusCode, Is.EqualTo((int)HttpStatusCode.BadRequest));

            var userResult = contentResult.Value as ErrorViewModel;

            Assert.That(userResult, Is.Not.Null);
            Assert.That(userResult.Status, Is.EqualTo((int)HttpStatusCode.BadRequest));
        }
Exemple #16
0
        public UsersApiControllerTests()
        {
            var usersRepository = new Mock <IUsersRepository>();

            _controller = new UsersApiController(usersRepository.Object);
            usersRepository.Setup(ur => ur.GetAll(It.IsAny <int>(), It.IsAny <int>())).ReturnsAsync(users);

            usersRepository.Setup(ur => ur.Get(It.IsAny <int>()))
            .ReturnsAsync((int i) => users.FirstOrDefault(u => u.Id == i));

            usersRepository.Setup(ur => ur.Create(It.IsAny <User>()))
            .ReturnsAsync((User u) =>
            {
                users.Add(u);
                return(u);
            });
        }
Exemple #17
0
        public async Task ApiV1UsersCreateValidatesAccountNumber()
        {
            const string username = "******";
            const string bankId   = "TestBank";
            const string invalidAccountNumberByLength      = "1234567";
            const string invalidAccountNumberByContent     = "x1234567";
            const string invalidAccountNumberByLeadingZero = "01234567";

            var controller = new UsersApiController(null, null, null);

            var actionResultBadLength = await controller.ApiV1UsersCreate(new CreateUserViewModel
            {
                Username      = username,
                BankId        = bankId,
                AccountNumber = invalidAccountNumberByLength
            });

            var contentResultBadLength = actionResultBadLength as ObjectResult;

            Assert.That(contentResultBadLength, Is.Not.Null);
            Assert.That(contentResultBadLength.StatusCode, Is.EqualTo((int)HttpStatusCode.BadRequest));

            var actionResultBadContent = await controller.ApiV1UsersCreate(new CreateUserViewModel
            {
                Username      = username,
                BankId        = bankId,
                AccountNumber = invalidAccountNumberByContent
            });

            var contentResultBadContent = actionResultBadContent as ObjectResult;

            Assert.That(contentResultBadContent, Is.Not.Null);
            Assert.That(contentResultBadContent.StatusCode, Is.EqualTo((int)HttpStatusCode.BadRequest));

            var actionResultBadLeadingZero = await controller.ApiV1UsersCreate(new CreateUserViewModel
            {
                Username      = username,
                BankId        = bankId,
                AccountNumber = invalidAccountNumberByLeadingZero
            });

            var contentResultBadLeadingZero = actionResultBadLeadingZero as ObjectResult;

            Assert.That(contentResultBadLeadingZero, Is.Not.Null);
            Assert.That(contentResultBadLeadingZero.StatusCode, Is.EqualTo((int)HttpStatusCode.BadRequest));
        }
Exemple #18
0
        public async Task GetUser_ById_BadRequest()
        {
            var userResponseDtos = new UserResponseDto
            {
                Id       = "1",
                Email    = "*****@*****.**",
                FullName = "Test 1",
                UserName = "******"
            };

            _userServiceMock.Setup(c => c.GetByIdAsync(userResponseDtos.Id)).ReturnsAsync(userResponseDtos);
            _usersApiController = new UsersApiController(_userServiceMock.Object, _httpContextAccessorMock.Object);
            // Act
            var result = await _usersApiController.Get(string.Empty);

            // Assert
            var resultStatusCode = ((Microsoft.AspNetCore.Mvc.StatusCodeResult)result).StatusCode;

            Assert.Equal((int)HttpStatusCode.BadRequest, resultStatusCode);
        }
Exemple #19
0
        public void ApiV1UsersGetByIdHandlesUserNotFound()
        {
            const int requestedUserId = 1;

            var userRepository = Substitute.For <IUserRepository>();

            userRepository.GetUserById(0).ReturnsForAnyArgs((AppUser)null);

            var controller = new UsersApiController(userRepository, null, null);

            var actionResult  = controller.ApiV1UsersGetById(requestedUserId);
            var contentResult = actionResult as ObjectResult;

            Assert.That(contentResult, Is.Not.Null);
            Assert.That(contentResult.StatusCode, Is.EqualTo((int)HttpStatusCode.NotFound));

            var userResult = contentResult.Value as ErrorViewModel;

            Assert.That(userResult, Is.Not.Null);
            Assert.That(userResult.Status, Is.EqualTo((int)HttpStatusCode.NotFound));
        }
Exemple #20
0
        public async Task GetUser_ById_Success()
        {
            var userResponseDtos = new UserResponseDto
            {
                Id       = "1",
                Email    = "*****@*****.**",
                FullName = "Test 1",
                UserName = "******"
            };

            _userServiceMock.Setup(c => c.GetByIdAsync(userResponseDtos.Id)).ReturnsAsync(userResponseDtos);
            _usersApiController = new UsersApiController(_userServiceMock.Object, _httpContextAccessorMock.Object);
            // Act
            var result = await _usersApiController.Get(userResponseDtos.Id);

            // Assert
            var resultValue = ((Microsoft.AspNetCore.Mvc.ObjectResult)result).Value;

            Assert.NotNull(result);
            Assert.Equal(userResponseDtos, resultValue);
        }
Exemple #21
0
 public UsersController(InsightConsultingDomain context)
 {
     _context           = context;
     usersApiController = new UsersApiController(_context);
 }
Exemple #22
0
        public async Task ApiV1UsersCreateCanCreateUser()
        {
            const string username      = "******";
            const string bankId        = "TestBank";
            const string accountNumber = "11223344";

            const int internalUserId        = 1;
            const int internalBankAccountId = 1;

            // CreateUser must return an AppUser
            var userRepository = Substitute.For <IUserRepository>();

            userRepository.CreateUser(username).Returns(new AppUser
            {
                Id       = internalUserId,
                Username = username
            });

            // CreateAccount must return a BankAccount
            var accountRepository = Substitute.For <IBankAccountRepository>();

            accountRepository.CreateAccount(internalUserId, bankId, accountNumber).Returns(new BankAccount
            {
                Id            = internalBankAccountId,
                UserId        = internalUserId,
                BankId        = bankId,
                AccountNumber = accountNumber
            });

            // ApiV1UsersCreate must be able to resolve the bank account directly with the server
            var bankConnection = Substitute.For <IBankConnection>();

            bankConnection.GetAccountDetails(accountNumber).Returns(x =>
                                                                    Task.FromResult(
                                                                        new OperationResult <AccountDetails>(new AccountDetails {
                AccountNumber = accountNumber
            })
                                                                        )
                                                                    );

            var connectionManager = Substitute.For <IBankConnectionManager>();

            connectionManager.GetRegisteredBankIds().Returns(new List <string> {
                bankId
            });
            connectionManager.CreateConnection(bankId).Returns(bankConnection);

            // execute controller action
            var controller = new UsersApiController(userRepository, accountRepository, connectionManager);

            var actionResult = await controller.ApiV1UsersCreate(new CreateUserViewModel
            {
                Username      = username,
                BankId        = bankId,
                AccountNumber = accountNumber
            });

            // CreateUser and CreateAccount must be called
            Assert.DoesNotThrow(() => userRepository.Received().CreateUser(username));
            Assert.DoesNotThrow(() =>
                                accountRepository.Received().CreateAccount(internalUserId, bankId, accountNumber));

            // the controller must return HTTP 200
            var contentResult = actionResult as ObjectResult;

            Assert.That(contentResult, Is.Not.Null);
            Assert.That(contentResult.StatusCode, Is.EqualTo((int)HttpStatusCode.OK));

            // the controller must return the newly created user
            var userResult = contentResult.Value as UserViewModel;

            Assert.That(userResult, Is.Not.Null);
            Assert.That(userResult.Username, Is.EqualTo(username));
        }
        public async Task<ActionResult> Register(RegisterViewModel model)
        {
            if (ModelState.IsValid)
            {
                var user = new ApplicationUser { UserName = model.Email, Email = model.Email };
                var result = await UserManager.CreateAsync(user, model.Password);
                if (result.Succeeded)
                {
                    var rolresult = UserManager.AddToRole(user.Id, EnumRoles.Normal.ToString());
                    await SignInManager.SignInAsync(user, isPersistent:false, rememberBrowser:false);

                    // For more information on how to enable account confirmation and password reset please visit http://go.microsoft.com/fwlink/?LinkID=320771
                    // Send an email with this link
                    // string code = await UserManager.GenerateEmailConfirmationTokenAsync(user.Id);
                    // var callbackUrl = Url.Action("ConfirmEmail", "Account", new { userId = user.Id, code = code }, protocol: Request.Url.Scheme);
                    // await UserManager.SendEmailAsync(user.Id, "Confirm your account", "Please confirm your account by clicking <a href=\"" + callbackUrl + "\">here</a>");

                    var createdUser = await UserManager.FindByNameAsync(model.Email);
                    if (createdUser == null)
                    {
                        this.ModelState.AddModelError("", "The user does not exist.");
                        return View();
                    }

                    Domain.Concrete.Users oUser = new Domain.Concrete.Users();
                    oUser.AspNetUserId = new Guid(createdUser.Id);
                    oUser.UserName = model.Email;

                    UsersApiController oUsersController = new UsersApiController(unitOfWork);
                    var r = await oUsersController.Post(oUser);
                    if (r == null)
                    {
                        this.ModelState.AddModelError("", "The user could not be created.");
                        return View();
                    }
                    
                    return RedirectToAction("Index", "Home");
                }

                AddErrors(result);

            }



            // If we got this far, something failed, redisplay form
            return View(model);
        }