From 7b469f523c62d0d8e4f5c239e1a85b25a8c29e7b Mon Sep 17 00:00:00 2001 From: poketopa Date: Wed, 5 Aug 2026 08:05:33 +0900 Subject: [PATCH 1/2] =?UTF-8?q?test:=20=EB=AC=B8=EC=84=9C=20=EB=AA=A9?= =?UTF-8?q?=EB=A1=9D=20=EC=A1=B0=ED=9A=8C=20=EC=9D=91=EB=8B=B5=20=EA=B3=84?= =?UTF-8?q?=EC=95=BD=20=EA=B3=A0=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/DocumentControllerTest.java | 77 +++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 src/test/java/com/wooteco/wiki/document/controller/DocumentControllerTest.java diff --git a/src/test/java/com/wooteco/wiki/document/controller/DocumentControllerTest.java b/src/test/java/com/wooteco/wiki/document/controller/DocumentControllerTest.java new file mode 100644 index 0000000..05aff6e --- /dev/null +++ b/src/test/java/com/wooteco/wiki/document/controller/DocumentControllerTest.java @@ -0,0 +1,77 @@ +package com.wooteco.wiki.document.controller; + +import static org.hamcrest.Matchers.equalTo; +import static org.hamcrest.Matchers.hasSize; +import static org.hamcrest.Matchers.notNullValue; + +import com.wooteco.wiki.document.domain.CrewDocument; +import com.wooteco.wiki.document.fixture.CrewDocumentFixture; +import com.wooteco.wiki.document.repository.CrewDocumentRepository; +import io.restassured.RestAssured; +import java.util.UUID; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; +import org.springframework.boot.test.web.server.LocalServerPort; +import org.springframework.http.HttpStatus; +import org.springframework.test.annotation.DirtiesContext; +import org.springframework.test.annotation.DirtiesContext.ClassMode; + +@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT) +@DirtiesContext(classMode = ClassMode.AFTER_EACH_TEST_METHOD) +class DocumentControllerTest { + + @LocalServerPort + private int port; + + @Autowired + private CrewDocumentRepository crewDocumentRepository; + + @BeforeEach + void setUp() { + RestAssured.port = port; + } + + @Nested + @DisplayName("전체 문서 목록 조회 API를 호출할 때") + class FindAll { + + @Test + @DisplayName("페이지 정보와 문서 목록을 응답한다.") + void findAll_success_byExistingDocument() { + // given + UUID documentUuid = UUID.fromString("11111111-1111-1111-1111-111111111111"); + CrewDocument document = crewDocumentRepository.save(CrewDocumentFixture.createCrewDocument( + "title", + "contents", + "writer", + 10L, + documentUuid + )); + + // when & then + RestAssured.given().log().all() + .when() + .get("/document") + .then().log().all() + .statusCode(HttpStatus.OK.value()) + .body("code", equalTo("SUCCESS")) + .body("data.page", equalTo(0)) + .body("data.totalPage", equalTo(1)) + .body("data.data", hasSize(1)) + .body("data.data[0].id", equalTo(document.getId().intValue())) + .body("data.data[0].title", equalTo("title")) + .body("data.data[0].contents", equalTo("contents")) + .body("data.data[0].writer", equalTo("writer")) + .body("data.data[0].documentBytes", equalTo(10)) + .body("data.data[0].generateTime", notNullValue()) + .body("data.data[0].uuid", equalTo(documentUuid.toString())) + .body("data.data[0].viewCount", equalTo(0)) + .body("data.data[0].documentType", equalTo("CREW")); + } + } +} From d9ba4d0dc333ef64df9db86ecf2d8dfc80c00434 Mon Sep 17 00:00:00 2001 From: poketopa Date: Wed, 5 Aug 2026 08:07:06 +0900 Subject: [PATCH 2/2] =?UTF-8?q?refactor:=20=EB=AC=B8=EC=84=9C=20=EB=AA=A9?= =?UTF-8?q?=EB=A1=9D=20=EC=9D=91=EB=8B=B5=20=EB=B3=80=ED=99=98=EC=9D=84=20?= =?UTF-8?q?=EC=84=9C=EB=B9=84=EC=8A=A4=20=EA=B2=BD=EA=B3=84=EB=A1=9C=20?= =?UTF-8?q?=EC=9D=B4=EB=8F=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/DocumentController.java | 4 +--- .../document/service/DocumentService.java | 6 ++++-- .../document/service/DocumentServiceTest.java | 20 +++++++++++++++---- 3 files changed, 21 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/wooteco/wiki/document/controller/DocumentController.java b/src/main/java/com/wooteco/wiki/document/controller/DocumentController.java index 726f318..208c9af 100644 --- a/src/main/java/com/wooteco/wiki/document/controller/DocumentController.java +++ b/src/main/java/com/wooteco/wiki/document/controller/DocumentController.java @@ -1,7 +1,6 @@ package com.wooteco.wiki.document.controller; import com.wooteco.wiki.admin.service.CrewDocumentService; -import com.wooteco.wiki.document.domain.Document; import com.wooteco.wiki.document.domain.dto.CrewDocumentCreateRequest; import com.wooteco.wiki.document.domain.dto.DocumentListResponse; import com.wooteco.wiki.document.domain.dto.DocumentResponse; @@ -66,8 +65,7 @@ public ApiResponse> getRandom() { @Operation(summary = "위키 글 전체 조회", description = "페이지네이션을 통해 모든 위키 글을 조회합니다.") @GetMapping("") public ApiResponse>>> findAll(@ModelAttribute PagingRequest pageRequestDto) { - Page pageResponses = documentService.findAll(pageRequestDto); - Page responses = pageResponses.map(DocumentListResponse::from); + Page responses = documentService.findAll(pageRequestDto); return ApiResponseGenerator.success(convertToResponse(responses)); } diff --git a/src/main/java/com/wooteco/wiki/document/service/DocumentService.java b/src/main/java/com/wooteco/wiki/document/service/DocumentService.java index 39dc4bd..383ba0b 100644 --- a/src/main/java/com/wooteco/wiki/document/service/DocumentService.java +++ b/src/main/java/com/wooteco/wiki/document/service/DocumentService.java @@ -1,6 +1,7 @@ package com.wooteco.wiki.document.service; import com.wooteco.wiki.document.domain.Document; +import com.wooteco.wiki.document.domain.dto.DocumentListResponse; import com.wooteco.wiki.document.domain.dto.DocumentTitleListResponse; import com.wooteco.wiki.document.domain.dto.DocumentUuidResponse; import com.wooteco.wiki.document.repository.DocumentRepository; @@ -23,8 +24,9 @@ public class DocumentService { private final DocumentRepository documentRepository; @Transactional(readOnly = true) - public Page findAll(PagingRequest pagingRequest) { - return documentRepository.findAll(pagingRequest.toPageable()); + public Page findAll(PagingRequest pagingRequest) { + return documentRepository.findAll(pagingRequest.toPageable()) + .map(DocumentListResponse::from); } public List findAllTitles() { diff --git a/src/test/java/com/wooteco/wiki/document/service/DocumentServiceTest.java b/src/test/java/com/wooteco/wiki/document/service/DocumentServiceTest.java index d91e9dc..633dc46 100644 --- a/src/test/java/com/wooteco/wiki/document/service/DocumentServiceTest.java +++ b/src/test/java/com/wooteco/wiki/document/service/DocumentServiceTest.java @@ -10,6 +10,7 @@ import com.wooteco.wiki.document.domain.Document; import com.wooteco.wiki.document.domain.DocumentType; import com.wooteco.wiki.document.domain.dto.CrewDocumentCreateRequest; +import com.wooteco.wiki.document.domain.dto.DocumentListResponse; import com.wooteco.wiki.document.domain.dto.DocumentResponse; import com.wooteco.wiki.document.domain.dto.DocumentTitleListResponse; import com.wooteco.wiki.document.domain.dto.DocumentUuidResponse; @@ -25,7 +26,6 @@ import java.util.Map; import java.util.UUID; import org.assertj.core.api.SoftAssertions; -import org.jetbrains.annotations.NotNull; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Nested; @@ -137,8 +137,20 @@ void findAll_success_bySomeData() { crewDocumentService.create(documentRequestDto); } + Page responses = documentService.findAll(pageRequestDto); + // then - assertThat(documentService.findAll(pageRequestDto)).hasSize(requestDtos.size()); + assertSoftly(softly -> { + softly.assertThat(responses).hasSize(requestDtos.size()); + softly.assertThat(responses) + .extracting(DocumentListResponse::title) + .containsExactlyInAnyOrder("title1", "title2"); + softly.assertThat(responses) + .extracting(DocumentListResponse::uuid) + .containsExactlyInAnyOrderElementsOf(requestDtos.stream() + .map(CrewDocumentCreateRequest::uuid) + .toList()); + }); } @DisplayName("저장된 문서가 존재하지 않을 때 요청 시 예외 없이 빈 리스트를 반환한다") @@ -162,7 +174,7 @@ void findAll_success_byPagingRequestDefault() { } // when - Page<@NotNull Document> documentPages = documentService.findAll(pageRequestDto); + Page documentPages = documentService.findAll(pageRequestDto); // then SoftAssertions softAssertions = new SoftAssertions(); @@ -187,7 +199,7 @@ void findAll_success_byPagingRequest() { } // when - Page<@NotNull Document> documentPages = documentService.findAll(pageRequestDto); + Page documentPages = documentService.findAll(pageRequestDto); // then SoftAssertions softAssertions = new SoftAssertions();