Skip to content
Open
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
Original file line number Diff line number Diff line change
@@ -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;
Expand Down Expand Up @@ -66,8 +65,7 @@ public ApiResponse<SuccessBody<DocumentResponse>> getRandom() {
@Operation(summary = "위키 글 전체 조회", description = "페이지네이션을 통해 모든 위키 글을 조회합니다.")
@GetMapping("")
public ApiResponse<SuccessBody<PagedResponse<List<DocumentListResponse>>>> findAll(@ModelAttribute PagingRequest pageRequestDto) {
Page<Document> pageResponses = documentService.findAll(pageRequestDto);
Page<DocumentListResponse> responses = pageResponses.map(DocumentListResponse::from);
Page<DocumentListResponse> responses = documentService.findAll(pageRequestDto);
return ApiResponseGenerator.success(convertToResponse(responses));
}

Expand Down
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -23,8 +24,9 @@ public class DocumentService {
private final DocumentRepository documentRepository;

@Transactional(readOnly = true)
public Page<Document> findAll(PagingRequest pagingRequest) {
return documentRepository.findAll(pagingRequest.toPageable());
public Page<DocumentListResponse> findAll(PagingRequest pagingRequest) {
return documentRepository.findAll(pagingRequest.toPageable())
.map(DocumentListResponse::from);
}

public List<DocumentTitleListResponse> findAllTitles() {
Expand Down
Original file line number Diff line number Diff line change
@@ -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"));
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
Expand Down Expand Up @@ -137,8 +137,20 @@ void findAll_success_bySomeData() {
crewDocumentService.create(documentRequestDto);
}

Page<DocumentListResponse> 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("저장된 문서가 존재하지 않을 때 요청 시 예외 없이 빈 리스트를 반환한다")
Expand All @@ -162,7 +174,7 @@ void findAll_success_byPagingRequestDefault() {
}

// when
Page<@NotNull Document> documentPages = documentService.findAll(pageRequestDto);
Page<DocumentListResponse> documentPages = documentService.findAll(pageRequestDto);

// then
SoftAssertions softAssertions = new SoftAssertions();
Expand All @@ -187,7 +199,7 @@ void findAll_success_byPagingRequest() {
}

// when
Page<@NotNull Document> documentPages = documentService.findAll(pageRequestDto);
Page<DocumentListResponse> documentPages = documentService.findAll(pageRequestDto);

// then
SoftAssertions softAssertions = new SoftAssertions();
Expand Down
Loading