diff --git a/src/integrationTest/java/app/mealsmadeeasy/api/image/S3ImageServiceTests.java b/src/integrationTest/java/app/mealsmadeeasy/api/image/S3ImageServiceTests.java index a767c08..b345fd5 100644 --- a/src/integrationTest/java/app/mealsmadeeasy/api/image/S3ImageServiceTests.java +++ b/src/integrationTest/java/app/mealsmadeeasy/api/image/S3ImageServiceTests.java @@ -7,14 +7,19 @@ import app.mealsmadeeasy.api.user.User; import app.mealsmadeeasy.api.user.UserCreateException; import app.mealsmadeeasy.api.user.UserService; import app.mealsmadeeasy.api.util.NoSuchEntityWithIdException; +import org.jetbrains.annotations.Nullable; +import org.junit.jupiter.api.DynamicTest; import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestFactory; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; +import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; import java.util.List; +import java.util.Map; import java.util.Set; import java.util.UUID; @@ -37,6 +42,37 @@ public class S3ImageServiceTests { return S3ImageServiceTests.class.getResourceAsStream("HAL9000.svg"); } + private record ImageResource(InputStream inputStream, long size) {} + + private static ImageResource getAsResource(@Nullable InputStream inputStream) { + if (inputStream == null) { + throw new RuntimeException("Input stream is null"); + } + try { + final byte[] bytes = inputStream.readAllBytes(); + final long size = bytes.length; + return new ImageResource(new ByteArrayInputStream(bytes), size); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + private static ImageResource getWebpResource() { + return getAsResource(S3ImageServiceTests.class.getResourceAsStream("/KingArthurSourdough.webp")); + } + + private static ImageResource getJpgResource() { + return getAsResource(S3ImageServiceTests.class.getResourceAsStream("/Obazda.jpg")); + } + + private static ImageResource getPngResource() { + return getAsResource(S3ImageServiceTests.class.getResourceAsStream("/veganfood.png")); + } + + private static ImageResource getSvgResource() { + return getAsResource(getHal9000InputStream()); + } + @Autowired private UserService userService; @@ -246,4 +282,32 @@ public class S3ImageServiceTests { assertThrows(NoSuchEntityWithIdException.class, () -> this.imageService.getById(image.getId(), owner)); } + @TestFactory + public List supportedImageTypesTests() { + return Map.of( + "jpeg", getJpgResource(), + "png", getPngResource(), + "webp", getWebpResource(), + "svg", getSvgResource() + ) + .entrySet() + .stream() + .map(entry -> DynamicTest.dynamicTest( + String.format("%s_supported", entry.getKey()), + () -> { + final User owner = this.seedUser(); + final Image image = this.imageService.create( + owner, + UUID.randomUUID() + "." + entry.getKey(), + entry.getValue().inputStream(), + entry.getValue().size(), + ImageCreateSpec.builder().build() + ); + assertThat(image, is(notNullValue())); + } + ) + ) + .toList(); + } + } diff --git a/src/integrationTest/resources/KingArthurSourdough.webp b/src/integrationTest/resources/KingArthurSourdough.webp new file mode 100644 index 0000000..45097ec Binary files /dev/null and b/src/integrationTest/resources/KingArthurSourdough.webp differ diff --git a/src/integrationTest/resources/Obazda.jpg b/src/integrationTest/resources/Obazda.jpg new file mode 100644 index 0000000..92369d7 Binary files /dev/null and b/src/integrationTest/resources/Obazda.jpg differ diff --git a/src/integrationTest/resources/veganfood.png b/src/integrationTest/resources/veganfood.png new file mode 100644 index 0000000..60c12e5 Binary files /dev/null and b/src/integrationTest/resources/veganfood.png differ