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)); } }
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); }
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); }
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)); }
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); }
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)); }
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)); }
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)); }
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)); }
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); }
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); }
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)); }
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)); }
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); }); }
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)); }
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); }
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)); }
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); }
public UsersController(InsightConsultingDomain context) { _context = context; usersApiController = new UsersApiController(_context); }
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); }