예제 #1
0
        public async Task <ImageDTO> CreateImageAsync(Guid userId, Guid galleryId, ImageCreationDTO imageCreationDTO)
        {
            ImageEntity entity = imageCreationDTO.ToImageEntity();

            entity.fk_gallery = galleryId;

            ImageEntity addedEntity = await _imageRepository.PostImage(entity);

            if (_imageRepository.Save() == false)
            {
                throw new Exception();
            }

            IFormFile formFile = imageCreationDTO.FormFile;

            if (formFile.Length > 0)
            {
                string extension = Path.GetExtension(formFile.FileName);
                string filename  = addedEntity.Id.ToString();

                byte[] formfileBytes;
                using (Stream stream = formFile.OpenReadStream())
                {
                    formfileBytes = new byte[stream.Length];
                    await stream.ReadAsync(formfileBytes, 0, (int)stream.Length);
                }

                await _fileSystemRepository.SaveFile(formfileBytes, filename, extension);
            }

            return(addedEntity.ToImageDto());
        }
예제 #2
0
        public async Task <ActionResult> CreateImage(Guid galleryId, [FromForm] ImageCreationDTO dto)
        {
            Guid userId = new Guid(HttpContext.User.Identity.Name);

            if (await _galleryService.DoesGalleryExistAsync(galleryId) == false)
            {
                return(NotFound());
            }

            if (await _galleryService.IsGalleryOwnedByUserAsync(galleryId, userId) == false)
            {
                return(Unauthorized());
            }

            try
            {
                ImageDTO imageDTO = await _imageService.CreateImageAsync(userId, galleryId, dto);

                return(CreatedAtAction(nameof(GetImage), new { galleryId = galleryId, imageId = imageDTO.Id }, imageDTO));
            }
            catch (Exception ex)
            {
                var problemDetails = new ProblemDetails
                {
                    Title    = "An unexpected error occurred.",
                    Status   = StatusCodes.Status500InternalServerError,
                    Detail   = "Unable to create the image at this moment due to an error, the error has been logged and sent to the developers for fixing.",
                    Instance = HttpContext.TraceIdentifier,
                };
                return(StatusCode(StatusCodes.Status500InternalServerError, problemDetails));
            }
        }
예제 #3
0
        public async Task CreateImage_not_own_gallery()
        {
            // Arrange
            var controller = new ImageController(GalleryService.Object, ImageService.Object);

            controller.ControllerContext = APIControllerUtils.CreateApiControllerContext(UserEntities[1].Id.ToString());

            Guid             galleryId = GalleryEntities[0].Id;
            ImageCreationDTO newItem   = new ImageCreationDTO("CreatedTestName", TestFormFile());

            // Act
            ActionResult <ImageDTO> response = await controller.CreateImage(galleryId, newItem);

            // Assert
            Assert.IsInstanceOfType(response.Result, typeof(UnauthorizedResult));
            var result = response.Result as UnauthorizedResult;

            Assert.AreEqual(401, result.StatusCode);
        }
예제 #4
0
        public async Task CreateImage()
        {
            // Arrange
            var controller = new ImageController(GalleryService.Object, ImageService.Object);

            controller.ControllerContext = APIControllerUtils.CreateApiControllerContext(UserEntities[0].Id.ToString());

            Guid             galleryId = GalleryEntities[0].Id;
            ImageCreationDTO newItem   = new ImageCreationDTO("CreatedTestName", TestFormFile());

            // Act
            ActionResult <ImageDTO> response = await controller.CreateImage(galleryId, newItem);

            // Assert
            Assert.IsInstanceOfType(response.Result, typeof(CreatedAtActionResult));
            var result = response.Result as CreatedAtActionResult;

            Assert.AreEqual(201, result.StatusCode);
            Assert.IsNotNull(result.Value);
            Assert.IsInstanceOfType(result.Value, typeof(ImageDTO));
            ImageDTO createdItem = result.Value as ImageDTO;

            Assert.AreEqual(createdItem.Name, "CreatedTestName");
        }