diff --git a/src/main/java/eatda/controller/story/StoryController.java b/src/main/java/eatda/controller/story/StoryController.java index 82c3e409..d799677d 100644 --- a/src/main/java/eatda/controller/story/StoryController.java +++ b/src/main/java/eatda/controller/story/StoryController.java @@ -22,13 +22,13 @@ public class StoryController { private final StoryService storyService; @PostMapping("/api/stories") - public ResponseEntity registerStory( + public ResponseEntity registerStory( @RequestPart("request") StoryRegisterRequest request, @RequestPart("image") MultipartFile image, LoginMember member ) { - storyService.registerStory(request, image, member.id()); - return ResponseEntity.status(HttpStatus.CREATED).build(); + return ResponseEntity.status(HttpStatus.CREATED) + .body(storyService.registerStory(request, image, member.id())); } @GetMapping("api/stories") diff --git a/src/main/java/eatda/controller/story/StoryRegisterResponse.java b/src/main/java/eatda/controller/story/StoryRegisterResponse.java new file mode 100644 index 00000000..62dc22af --- /dev/null +++ b/src/main/java/eatda/controller/story/StoryRegisterResponse.java @@ -0,0 +1,6 @@ +package eatda.controller.story; + +public record StoryRegisterResponse( + long storyId +) { +} diff --git a/src/main/java/eatda/service/story/StoryService.java b/src/main/java/eatda/service/story/StoryService.java index 2e97eb12..363973ea 100644 --- a/src/main/java/eatda/service/story/StoryService.java +++ b/src/main/java/eatda/service/story/StoryService.java @@ -4,6 +4,7 @@ import eatda.controller.story.FilteredSearchResult; import eatda.controller.story.StoriesResponse; import eatda.controller.story.StoryRegisterRequest; +import eatda.controller.story.StoryRegisterResponse; import eatda.controller.story.StoryResponse; import eatda.domain.member.Member; import eatda.domain.story.Story; @@ -34,7 +35,7 @@ public class StoryService { private final MemberRepository memberRepository; @Transactional - public void registerStory(StoryRegisterRequest request, MultipartFile image, Long memberId) { + public StoryRegisterResponse registerStory(StoryRegisterRequest request, MultipartFile image, Long memberId) { Member member = memberRepository.getById(memberId); List searchResponses = storeService.searchStoreResults(request.query()); FilteredSearchResult matchedStore = filteredSearchResponse(searchResponses, request.storeKakaoId()); @@ -52,6 +53,8 @@ public void registerStory(StoryRegisterRequest request, MultipartFile image, Lon .build(); storyRepository.save(story); + + return new StoryRegisterResponse(story.getId()); } private FilteredSearchResult filteredSearchResponse(List responses, String storeKakaoId) { diff --git a/src/test/java/eatda/controller/story/StoryControllerTest.java b/src/test/java/eatda/controller/story/StoryControllerTest.java index 9a3f4767..09f6932a 100644 --- a/src/test/java/eatda/controller/story/StoryControllerTest.java +++ b/src/test/java/eatda/controller/story/StoryControllerTest.java @@ -4,7 +4,6 @@ import static org.hamcrest.Matchers.equalTo; import static org.junit.jupiter.api.Assertions.assertAll; import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.doThrow; @@ -22,7 +21,7 @@ public class StoryControllerTest extends BaseControllerTest { @BeforeEach void setUpMock() { - doNothing() + doReturn(new StoryRegisterResponse(1L)) .when(storyService) .registerStory(any(), any(), any()); } @@ -42,6 +41,10 @@ class RegisterStory { byte[] imageBytes = "dummy image content".getBytes(StandardCharsets.UTF_8); + doReturn(new StoryRegisterResponse(123L)) + .when(storyService) + .registerStory(any(), any(), any()); + Response response = given() .contentType("multipart/form-data") .header("Authorization", accessToken()) @@ -50,7 +53,9 @@ class RegisterStory { .when() .post("/api/stories"); - response.then().statusCode(201); + response.then() + .statusCode(201) + .body("storyId", equalTo(123)); } } diff --git a/src/test/java/eatda/document/story/StoryDocumentTest.java b/src/test/java/eatda/document/story/StoryDocumentTest.java index c861bf06..16aa8976 100644 --- a/src/test/java/eatda/document/story/StoryDocumentTest.java +++ b/src/test/java/eatda/document/story/StoryDocumentTest.java @@ -2,13 +2,13 @@ import static org.hamcrest.Matchers.equalTo; import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.doThrow; import static org.springframework.restdocs.headers.HeaderDocumentation.headerWithName; import static org.springframework.restdocs.payload.PayloadDocumentation.fieldWithPath; import eatda.controller.story.StoriesResponse; +import eatda.controller.story.StoryRegisterResponse; import eatda.controller.story.StoryResponse; import eatda.document.BaseDocumentTest; import eatda.document.RestDocsRequest; @@ -39,7 +39,10 @@ class RegisterStory { headerWithName(HttpHeaders.AUTHORIZATION).description("액세스 토큰") ); - RestDocsResponse responseDocument = response(); + RestDocsResponse responseDocument = response() + .responseBodyField( + fieldWithPath("storyId").description("등록된 스토리의 ID") + ); @Test void 스토리_등록_성공() { @@ -47,7 +50,8 @@ class RegisterStory { .when(imageService) .upload(any(), org.mockito.ArgumentMatchers.eq(ImageDomain.STORY)); - doNothing().when(storyService) + doReturn(new StoryRegisterResponse(123L)) + .when(storyService) .registerStory(any(), any(), any()); String requestJson = """ @@ -72,7 +76,9 @@ class RegisterStory { .multiPart("image", "image.png", imageBytes, "image/png") .when().post("/api/stories"); - response.then().statusCode(201); + response.then() + .statusCode(201) + .body("storyId", equalTo(123)); } @Test diff --git a/src/test/java/eatda/service/story/StoryServiceTest.java b/src/test/java/eatda/service/story/StoryServiceTest.java index d12d043b..aa3ba457 100644 --- a/src/test/java/eatda/service/story/StoryServiceTest.java +++ b/src/test/java/eatda/service/story/StoryServiceTest.java @@ -2,7 +2,6 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; -import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; @@ -48,7 +47,9 @@ class RegisterStory { doReturn(List.of(store)).when(mapClient).searchShops(request.query()); when(imageService.upload(image, ImageDomain.STORY)).thenReturn("image-key"); - assertDoesNotThrow(() -> storyService.registerStory(request, image, member.getId())); + var response = storyService.registerStory(request, image, member.getId()); + + assertThat(storyRepository.existsById(response.storyId())).isTrue(); } @Test