diff --git a/src/integrationTest/java/app/mealsmadeeasy/api/image/S3ImageServiceTests.java b/src/integrationTest/java/app/mealsmadeeasy/api/image/S3ImageServiceTests.java index 019e795..c9cca5e 100644 --- a/src/integrationTest/java/app/mealsmadeeasy/api/image/S3ImageServiceTests.java +++ b/src/integrationTest/java/app/mealsmadeeasy/api/image/S3ImageServiceTests.java @@ -71,6 +71,18 @@ public class S3ImageServiceTests { ); } + private Image createHal9000(User owner) throws ImageException, IOException { + try (final InputStream hal9000 = getHal9000()) { + return this.imageService.create( + owner, + "HAL9000.svg", + hal9000, + "image/svg+xml", + 27881L + ); + } + } + @Test public void smokeScreen() {} @@ -168,6 +180,46 @@ public class S3ImageServiceTests { } } + @Test + @DirtiesContext + public void updateOwner() { + try (final InputStream hal9000 = getHal9000()) { + final User oldOwner = this.createTestUser("oldImageOwner"); + final User newOwner = this.createTestUser("newImageOwner"); + Image image = this.createHal9000(oldOwner, hal9000); + assertThat(image.getOwner(), isUser(oldOwner)); + image = this.imageService.updateOwner(image, oldOwner, newOwner); + assertThat(image.getOwner(), isUser(newOwner)); + } catch (ImageException | IOException e) { + throw new RuntimeException(e); + } + } + @Test + @DirtiesContext + public void setAlt() throws ImageException, IOException { + final User owner = this.createTestUser("imageOwner"); + Image image = this.createHal9000(owner); + image = this.imageService.setAlt(image, owner, "Example alt."); + assertThat(image.getAlt(), is("Example alt.")); + } + + @Test + @DirtiesContext + public void setCaption() throws ImageException, IOException { + final User owner = this.createTestUser("imageOwner"); + Image image = this.createHal9000(owner); + image = this.imageService.setCaption(image, owner, "Example caption."); + assertThat(image.getCaption(), is("Example caption.")); + } + + @Test + @DirtiesContext + public void setPublicToTrue() throws ImageException, IOException { + final User owner = this.createTestUser("imageOwner"); + Image image = this.createHal9000(owner); + image = this.imageService.setPublic(image, owner, true); + assertThat(image.isPublic(), is(true)); + } } diff --git a/src/main/java/app/mealsmadeeasy/api/image/S3ImageService.java b/src/main/java/app/mealsmadeeasy/api/image/S3ImageService.java index 8b19104..d3ebdfb 100644 --- a/src/main/java/app/mealsmadeeasy/api/image/S3ImageService.java +++ b/src/main/java/app/mealsmadeeasy/api/image/S3ImageService.java @@ -94,18 +94,27 @@ public class S3ImageService implements ImageService { } @Override + @PreAuthorize("@imageSecurity.isOwner(#image, #oldOwner)") public Image updateOwner(Image image, User oldOwner, User newOwner) { - return null; + final ImageEntity imageEntity = (ImageEntity) image; + imageEntity.setOwner((UserEntity) newOwner); + return this.imageRepository.save(imageEntity); } @Override + @PreAuthorize("@imageSecurity.isOwner(#image, #owner)") public Image setAlt(Image image, User owner, String alt) { - return null; + final ImageEntity imageEntity = (ImageEntity) image; + imageEntity.setAlt(alt); + return this.imageRepository.save(imageEntity); } @Override + @PreAuthorize("@imageSecurity.isOwner(#image, #owner)") public Image setCaption(Image image, User owner, String caption) { - return null; + final ImageEntity imageEntity = (ImageEntity) image; + imageEntity.setCaption(caption); + return this.imageRepository.save(imageEntity); } @Override @@ -117,6 +126,7 @@ public class S3ImageService implements ImageService { } @Override + @PreAuthorize("@imageSecurity.isOwner(#image, #owner)") public Image addViewer(Image image, User owner, User viewer) { final ImageEntity withViewers = this.imageRepository.getByIdWithViewers(image.getId()); withViewers.getViewers().add((UserEntity) viewer); @@ -124,6 +134,7 @@ public class S3ImageService implements ImageService { } @Override + @PreAuthorize("@imageSecurity.isOwner(#image, #owner)") public Image removeViewer(Image image, User owner, User viewer) { final ImageEntity withViewers = this.imageRepository.getByIdWithViewers(image.getId()); withViewers.getViewers().remove((UserEntity) viewer); @@ -131,6 +142,7 @@ public class S3ImageService implements ImageService { } @Override + @PreAuthorize("@imageSecurity.isOwner(#image, #owner)") public Image clearViewers(Image image, User owner) { final ImageEntity withViewers = this.imageRepository.getByIdWithViewers(image.getId()); withViewers.getViewers().clear();