Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions src/main/java/eatda/controller/story/StoryController.java
Original file line number Diff line number Diff line change
Expand Up @@ -22,13 +22,13 @@ public class StoryController {
private final StoryService storyService;

@PostMapping("/api/stories")
public ResponseEntity<Void> registerStory(
public ResponseEntity<StoryRegisterResponse> 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")
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package eatda.controller.story;

public record StoryRegisterResponse(
long storyId
) {
}
5 changes: 4 additions & 1 deletion src/main/java/eatda/service/story/StoryService.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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<StoreSearchResult> searchResponses = storeService.searchStoreResults(request.query());
FilteredSearchResult matchedStore = filteredSearchResponse(searchResponses, request.storeKakaoId());
Expand All @@ -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<StoreSearchResult> responses, String storeKakaoId) {
Expand Down
11 changes: 8 additions & 3 deletions src/test/java/eatda/controller/story/StoryControllerTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand All @@ -22,7 +21,7 @@ public class StoryControllerTest extends BaseControllerTest {

@BeforeEach
void setUpMock() {
doNothing()
doReturn(new StoryRegisterResponse(1L))
.when(storyService)
.registerStory(any(), any(), any());
}
Expand All @@ -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())
Expand All @@ -50,7 +53,9 @@ class RegisterStory {
.when()
.post("/api/stories");

response.then().statusCode(201);
response.then()
.statusCode(201)
.body("storyId", equalTo(123));
}
}

Expand Down
14 changes: 10 additions & 4 deletions src/test/java/eatda/document/story/StoryDocumentTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -39,15 +39,19 @@ class RegisterStory {
headerWithName(HttpHeaders.AUTHORIZATION).description("액세스 토큰")
);

RestDocsResponse responseDocument = response();
RestDocsResponse responseDocument = response()
.responseBodyField(
fieldWithPath("storyId").description("등록된 스토리의 ID")
);

@Test
void 스토리_등록_성공() {
doReturn("https://dummy-s3.com/story.png")
.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 = """
Expand All @@ -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
Expand Down
5 changes: 3 additions & 2 deletions src/test/java/eatda/service/story/StoryServiceTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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
Expand Down