public async Task PutImage_given_invalid_image_returns_InternalServerError() { var id = 1; var idString = "1"; var formFile = new Mock <IFormFile>(); var userImageFormDTO = new UserImageFormDTO { UserId = idString, File = formFile.Object }; var repository = new Mock <IUserRepository>(); repository.Setup(r => r.UpdateImageAsync(id, It.IsAny <IFormFile>())).ThrowsAsync(new ArgumentException()); var logger = new Mock <ILogger <UsersController> >(); var controller = new UsersController(repository.Object, logger.Object); // Needs HttpContext to mock it. controller.ControllerContext.HttpContext = new DefaultHttpContext(); var cp = MockClaimsSecurity(id); //Update the HttpContext to use mocked claim controller.ControllerContext.HttpContext.User = cp.Object; var putImage = await controller.PutImage(userImageFormDTO); var image = putImage.Result as StatusCodeResult; Assert.IsType <StatusCodeResult>(putImage.Result); Assert.Equal(StatusCodes.Status500InternalServerError, image.StatusCode); }
public async Task PutImage_given_different_User_id_as_claim_returns_Forbidden() { var formFile = new Mock <IFormFile>(); var idString = "1"; var userImageFormDTO = new UserImageFormDTO { UserId = idString, File = formFile.Object }; var repository = new Mock <IUserRepository>(); var logger = new Mock <ILogger <UsersController> >(); var controller = new UsersController(repository.Object, logger.Object); // Needs HttpContext to mock it. controller.ControllerContext.HttpContext = new DefaultHttpContext(); var cp = MockClaimsSecurity(42); //Update the HttpContext to use mocked claim controller.ControllerContext.HttpContext.User = cp.Object; var put = await controller.PutImage(userImageFormDTO); Assert.IsType <ForbidResult>(put.Result); }
public async Task PutImage_given_valid_id_and_image_returns_relative_path_to_file() { var id = 1; var idString = "1"; var formFile = new Mock <IFormFile>(); var fileName = "file.png"; var userImageFormDTO = new UserImageFormDTO { UserId = idString, File = formFile.Object }; var repository = new Mock <IUserRepository>(); repository.Setup(r => r.UpdateImageAsync(id, It.IsAny <IFormFile>())).ReturnsAsync(fileName); var logger = new Mock <ILogger <UsersController> >(); var controller = new UsersController(repository.Object, logger.Object); // Needs HttpContext to mock it. controller.ControllerContext.HttpContext = new DefaultHttpContext(); var cp = MockClaimsSecurity(id); //Update the HttpContext to use mocked claim controller.ControllerContext.HttpContext.User = cp.Object; var putImage = await controller.PutImage(userImageFormDTO); Assert.Equal(fileName, putImage.Value); }
public async Task <ActionResult <string> > PutImage([FromForm] UserImageFormDTO dto) { var claimId = User.Claims.First(c => c.Type == ClaimTypes.NameIdentifier); // Identity check of current user // if id don't match, it is forbidden to update if (!claimId.Value.Equals(dto.UserId)) { return(Forbid()); } try { if (int.TryParse(dto.UserId, out int intId)) { var newImagePath = await _userRepository.UpdateImageAsync(intId, dto.File); if (string.IsNullOrEmpty(newImagePath)) { return(NotFound("User not found")); } return(newImagePath); } else { return(BadRequest()); } } catch (Exception ex) { if (ex.Message.Equals("Invalid image file")) { return(BadRequest(ex.Message)); } else { return(new StatusCodeResult(StatusCodes.Status500InternalServerError)); } } }
public async Task PutImage_given_wrong_id_format_returns_BadRequest() { var formFile = new Mock <IFormFile>(); var idString = "test"; var userImageFormDTO = new UserImageFormDTO { UserId = idString, File = formFile.Object }; var repository = new Mock <IUserRepository>(); var logger = new Mock <ILogger <UsersController> >(); var controller = new UsersController(repository.Object, logger.Object); // Needs HttpContext to mock it. controller.ControllerContext.HttpContext = new DefaultHttpContext(); //Create ClaimIdentity var claims = new List <Claim>() { new Claim(ClaimTypes.NameIdentifier, idString), }; var identity = new ClaimsIdentity(claims); //Mock claim to make the HttpContext contain one. var claimsPrincipalMock = new Mock <ClaimsPrincipal>(); claimsPrincipalMock.Setup(m => m.HasClaim(It.IsAny <string>(), It.IsAny <string>())) .Returns(true); claimsPrincipalMock.Setup(m => m.Claims).Returns(claims); //Update the HttpContext to use mocked claim controller.ControllerContext.HttpContext.User = claimsPrincipalMock.Object; var putImage = await controller.PutImage(userImageFormDTO); Assert.IsType <BadRequestResult>(putImage.Result); }
public async Task PutImage_given_non_existing_user_and_valid_claim_returns_NotFoundObjectResult_and_message() { var formFile = new Mock <IFormFile>(); var idString = "1"; var id = 1; var error = "User not found"; var userImageFormDTO = new UserImageFormDTO { UserId = idString, File = formFile.Object }; var repository = new Mock <IUserRepository>(); repository.Setup(r => r.UpdateImageAsync(id, It.IsAny <IFormFile>())).ReturnsAsync(default(string)); var logger = new Mock <ILogger <UsersController> >(); var controller = new UsersController(repository.Object, logger.Object); // Needs HttpContext to mock it. controller.ControllerContext.HttpContext = new DefaultHttpContext(); var cp = MockClaimsSecurity(id); //Update the HttpContext to use mocked claim controller.ControllerContext.HttpContext.User = cp.Object; var put = await controller.PutImage(userImageFormDTO); var notFound = put.Result as NotFoundObjectResult; Assert.IsType <NotFoundObjectResult>(put.Result); Assert.Equal(error, notFound.Value); }