예제 #1
0
        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);
        }
예제 #2
0
        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);
        }
예제 #3
0
        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);
        }
예제 #4
0
        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));
                }
            }
        }
예제 #5
0
        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);
        }
예제 #6
0
        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);
        }