-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #21 from f-lab-edu/feature/17
feat: 독서록 조회 기능 컨트롤러 로직 작성
- Loading branch information
Showing
7 changed files
with
205 additions
and
8 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
9 changes: 9 additions & 0 deletions
9
src/main/java/com/inmybook/adapter/in/web/dto/response/BookResponse.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
package com.inmybook.adapter.in.web.dto.response; | ||
|
||
public record BookResponse( | ||
String isbnNo, | ||
String bookName, | ||
String author, | ||
String publisher | ||
) { | ||
} |
13 changes: 13 additions & 0 deletions
13
src/main/java/com/inmybook/adapter/in/web/dto/response/ContentResponse.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
package com.inmybook.adapter.in.web.dto.response; | ||
|
||
public record ContentResponse( | ||
String title, | ||
String content, | ||
String fromDate, | ||
String toDate, | ||
double rating, | ||
int likeCount, | ||
int bookmarkCount, | ||
String isPublic | ||
) { | ||
} |
7 changes: 7 additions & 0 deletions
7
src/main/java/com/inmybook/adapter/in/web/dto/response/MemberResponse.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
package com.inmybook.adapter.in.web.dto.response; | ||
|
||
public record MemberResponse( | ||
String memberId, | ||
String nickname | ||
) { | ||
} |
8 changes: 8 additions & 0 deletions
8
src/main/java/com/inmybook/adapter/in/web/dto/response/PostDetailsResponse.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
package com.inmybook.adapter.in.web.dto.response; | ||
|
||
public record PostDetailsResponse( | ||
String postId, | ||
ContentResponse contentResponse, | ||
MemberResponse memberResponse | ||
) { | ||
} |
115 changes: 115 additions & 0 deletions
115
src/test/java/com/inmybook/adapter/in/web/PostControllerTest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,115 @@ | ||
package com.inmybook.adapter.in.web; | ||
|
||
import static com.inmybook.adapter.in.web.dto.PostMapper.*; | ||
import static org.assertj.core.api.Assertions.*; | ||
import static org.mockito.Mockito.*; | ||
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; | ||
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; | ||
|
||
import java.nio.charset.StandardCharsets; | ||
import java.util.UUID; | ||
|
||
import org.junit.jupiter.api.BeforeEach; | ||
import org.junit.jupiter.api.DisplayName; | ||
import org.junit.jupiter.api.Test; | ||
import org.junit.jupiter.api.extension.ExtendWith; | ||
import org.mockito.InjectMocks; | ||
import org.mockito.Mock; | ||
import org.mockito.MockedStatic; | ||
import org.mockito.junit.jupiter.MockitoExtension; | ||
import org.springframework.http.MediaType; | ||
import org.springframework.test.web.servlet.MockMvc; | ||
import org.springframework.test.web.servlet.MvcResult; | ||
import org.springframework.test.web.servlet.ResultActions; | ||
import org.springframework.test.web.servlet.setup.MockMvcBuilders; | ||
|
||
import com.fasterxml.jackson.databind.ObjectMapper; | ||
import com.inmybook.adapter.in.web.dto.PostMapper; | ||
import com.inmybook.adapter.in.web.dto.response.PostDetailsResponse; | ||
import com.inmybook.application.port.in.ReadPostInput; | ||
import com.inmybook.application.port.in.ReadPostUseCase; | ||
import com.inmybook.application.service.ContentDetailsOutput; | ||
import com.inmybook.application.service.MemberDetailsOutput; | ||
import com.inmybook.application.service.PostDetailsOutput; | ||
|
||
@ExtendWith(MockitoExtension.class) | ||
class PostControllerTest { | ||
|
||
@InjectMocks | ||
PostController postController; | ||
@Mock | ||
ReadPostUseCase readPostUseCase; | ||
|
||
private MockMvc mockMvc; | ||
private final ObjectMapper objectMapper = new ObjectMapper(); | ||
|
||
@BeforeEach | ||
public void init() { | ||
mockMvc = MockMvcBuilders.standaloneSetup(postController).build(); | ||
} | ||
|
||
@Test | ||
@DisplayName("사용자는 독서록 게시글을 조회할 수 있다.") | ||
void readPost() throws Exception { | ||
PostDetailsOutput mockPostDetailsOutput = getPostDetailsOutput(); | ||
PostDetailsResponse mockPostDetailsResponse = getPostDetailsResponse(mockPostDetailsOutput); | ||
String postId = mockPostDetailsOutput.postId(); | ||
|
||
try (MockedStatic<PostMapper> mockPostMapper = mockStatic(PostMapper.class)) { | ||
when(readPostUseCase.findPostById(new ReadPostInput(postId))).thenReturn(mockPostDetailsOutput); | ||
mockPostMapper.when(() -> createReadPostDetailsResponse(mockPostDetailsOutput)).thenReturn( | ||
mockPostDetailsResponse); | ||
|
||
ResultActions resultActions = mockMvc.perform(get("/posts/{postId}", postId) | ||
.contentType(MediaType.APPLICATION_JSON) | ||
.characterEncoding("utf-8") | ||
.content(postId) | ||
); | ||
|
||
MvcResult mvcResult = resultActions.andExpect(status().isOk()).andReturn(); | ||
|
||
PostDetailsResponse postDetailsResponse = objectMapper.readValue(mvcResult.getResponse().getContentAsString( | ||
StandardCharsets.UTF_8), PostDetailsResponse.class); | ||
|
||
assertThat(postDetailsResponse.postId()).isEqualTo(postId); | ||
assertThat(postDetailsResponse.contentResponse().title()).isEqualTo("HTTP 완벽 가이드 독서록"); | ||
} | ||
|
||
} | ||
|
||
private PostDetailsResponse getPostDetailsResponse(PostDetailsOutput postDetailsOutput) { | ||
return createReadPostDetailsResponse(postDetailsOutput); | ||
} | ||
|
||
private PostDetailsOutput getPostDetailsOutput() { | ||
String postId = getUuid(); | ||
|
||
ContentDetailsOutput contentDetailsOutput = new ContentDetailsOutput( | ||
"HTTP 완벽 가이드 독서록", | ||
"유익합니다.", | ||
"2024-07-14", | ||
"2024-07-21", | ||
4.5, | ||
0, | ||
0, | ||
"Y" | ||
); | ||
|
||
MemberDetailsOutput memberDetailsOutput = new MemberDetailsOutput( | ||
0L, | ||
"dani820", | ||
"dani820" | ||
); | ||
|
||
return new PostDetailsOutput( | ||
postId, | ||
contentDetailsOutput, | ||
memberDetailsOutput | ||
); | ||
} | ||
|
||
private String getUuid() { | ||
return UUID.randomUUID().toString(); | ||
} | ||
|
||
} |