diff --git a/src/main/java/gg/agit/konect/domain/upload/controller/UploadApi.java b/src/main/java/gg/agit/konect/domain/upload/controller/UploadApi.java index f070652aa..16f25548b 100644 --- a/src/main/java/gg/agit/konect/domain/upload/controller/UploadApi.java +++ b/src/main/java/gg/agit/konect/domain/upload/controller/UploadApi.java @@ -21,7 +21,7 @@ public interface UploadApi { @Operation(summary = "이미지 파일을 업로드한다.", description = """ 서버가 multipart 파일을 받아 S3에 업로드합니다. - - target 쿼리파라미터로 이미지 저장 대상 도메인을 지정합니다. (CLUB, BANK, COUNCIL, USER) + - target 쿼리파라미터로 이미지 저장 대상 도메인을 지정합니다. (CLUB, BANK, COUNCIL, USER, UNIVERSITY) - 응답의 fileUrl을 기존 도메인 API의 imageUrl로 사용합니다. ## 에러 diff --git a/src/main/java/gg/agit/konect/domain/upload/enums/UploadTarget.java b/src/main/java/gg/agit/konect/domain/upload/enums/UploadTarget.java index 6dd3d8697..ec0fb3d03 100644 --- a/src/main/java/gg/agit/konect/domain/upload/enums/UploadTarget.java +++ b/src/main/java/gg/agit/konect/domain/upload/enums/UploadTarget.java @@ -10,6 +10,7 @@ public enum UploadTarget { BANK("은행"), COUNCIL("총학생회"), USER("사용자"), + UNIVERSITY("대학교"), ; private final String description; diff --git a/src/test/java/gg/agit/konect/integration/domain/upload/UploadApiTest.java b/src/test/java/gg/agit/konect/integration/domain/upload/UploadApiTest.java index dbb7c6370..dd5e6b5fe 100644 --- a/src/test/java/gg/agit/konect/integration/domain/upload/UploadApiTest.java +++ b/src/test/java/gg/agit/konect/integration/domain/upload/UploadApiTest.java @@ -79,6 +79,26 @@ void uploadImageSuccess() throws Exception { assertThat(requestCaptor.getValue().contentType()).isEqualTo("image/png"); } + @Test + @DisplayName("대학교 이미지를 업로드하면 university 경로에 저장한다") + void uploadUniversityImageSuccess() throws Exception { + // given + byte[] pngBytes = createPngBytes(8, 8); + MockMultipartFile file = imageFile("university.png", "image/png", pngBytes); + + // when + MvcResult result = uploadImage(file, UploadTarget.UNIVERSITY) + .andExpect(status().isOk()) + .andReturn(); + + // then + String responseBody = result.getResponse().getContentAsString(); + String key = JsonPath.read(responseBody, "$.key"); + + assertThat(key).startsWith("test/university/"); + assertThat(key).endsWith(".png"); + } + @Test @DisplayName("jpeg 이미지를 업로드하면 원본 형태로 저장한다") void uploadJpegImageSuccess() throws Exception { diff --git a/src/test/java/gg/agit/konect/unit/domain/upload/service/UploadServiceTest.java b/src/test/java/gg/agit/konect/unit/domain/upload/service/UploadServiceTest.java index 9c9801e54..d30c74a79 100644 --- a/src/test/java/gg/agit/konect/unit/domain/upload/service/UploadServiceTest.java +++ b/src/test/java/gg/agit/konect/unit/domain/upload/service/UploadServiceTest.java @@ -104,6 +104,26 @@ void uploadImageBuildsKeyWithoutPrefixWhenPrefixBlank() { assertThat(response.key()).matches("bank/\\d{4}-\\d{2}-\\d{2}-[0-9a-f\\-]{36}\\.png"); } + @Test + @DisplayName("uploadImage는 UNIVERSITY target을 university 경로로 저장한다") + void uploadImageBuildsUniversityKeyPath() { + // given + MockMultipartFile file = new MockMultipartFile( + "file", + "university.png", + "image/png", + "png-data".getBytes(StandardCharsets.UTF_8) + ); + + // when + ImageUploadResponse response = uploadService.uploadImage(file, UploadTarget.UNIVERSITY); + + // then + assertThat(response.key()).matches( + "konect/university/\\d{4}-\\d{2}-\\d{2}-[0-9a-f\\-]{36}\\.png" + ); + } + @Test @DisplayName("uploadImage는 leading slash prefix를 제거하고 trailing slash를 보정한다") void uploadImageNormalizesPrefixWithLeadingSlash() {