Skip to content

Commit

Permalink
REST Docs 설정을 수정한다. (#24)
Browse files Browse the repository at this point in the history
* refactor: 사용하지 않는 gradle bootJar 설정 제거

* refactor: asciidoctor doFirst docs 삭제 추가

* refactor: 사용하지 않는 restassured 제거

* refactor: @WebMvcTest 합쳐서 컨텍스트 재사용

* refactor: Controller, Document 테스트 추상화 후 분리
  • Loading branch information
alstn113 committed Jan 11, 2025
1 parent aee24bd commit abadb43
Show file tree
Hide file tree
Showing 9 changed files with 97 additions and 139 deletions.
12 changes: 4 additions & 8 deletions server/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,6 @@ dependencies {
// test
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
testImplementation 'io.rest-assured:rest-assured'
asciidoctorExt 'org.springframework.restdocs:spring-restdocs-asciidoctor'
testImplementation 'org.springframework.restdocs:spring-restdocs-mockmvc'
}
Expand All @@ -86,20 +85,17 @@ test {
outputs.dir snippetsDir
}

asciidoctor.doFirst {
delete file("src/main/resources/static/docs") // docs 디렉토리 삭제
}

asciidoctor {
inputs.dir snippetsDir
configurations 'asciidoctorExt'
dependsOn test
baseDirFollowsSourceFile()
}

bootJar {
dependsOn asciidoctor
from("${asciidoctor.outputDir}") {
into 'static/docs'
}
}

tasks.register('copyDocument', Copy) {
dependsOn asciidoctor
from file("build/docs/asciidoc")
Expand Down
12 changes: 1 addition & 11 deletions server/src/test/java/com/fluffy/auth/api/AuthDocumentTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,29 +10,19 @@
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.header;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;

import com.fluffy.auth.application.AuthService;
import com.fluffy.auth.application.response.MyInfoResponse;
import com.fluffy.global.web.cookie.CookieManager;
import com.fluffy.support.AbstractDocumentTest;
import jakarta.servlet.http.Cookie;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.context.annotation.Import;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseCookie;

@WebMvcTest(AuthController.class)
@Import({CookieManager.class})
@Import(CookieManager.class)
class AuthDocumentTest extends AbstractDocumentTest {

@MockBean
private AuthService authService;

@MockBean
private CookieManager cookieManager;

@Test
@DisplayName("나의 정보를 조회할 수 있다.")
void getMyInfo() throws Exception {
Expand Down
11 changes: 0 additions & 11 deletions server/src/test/java/com/fluffy/exam/api/ExamDocumentTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,6 @@
import com.fluffy.exam.api.request.UpdateExamDescriptionWebRequest;
import com.fluffy.exam.api.request.UpdateExamQuestionsWebRequest;
import com.fluffy.exam.api.request.UpdateExamTitleWebRequest;
import com.fluffy.exam.application.ExamQueryService;
import com.fluffy.exam.application.ExamService;
import com.fluffy.exam.application.request.question.LongAnswerQuestionAppRequest;
import com.fluffy.exam.application.request.question.MultipleChoiceAppRequest;
import com.fluffy.exam.application.request.question.QuestionOptionRequest;
Expand All @@ -46,20 +44,11 @@
import java.util.List;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.http.MediaType;
import org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders;

@WebMvcTest(ExamController.class)
class ExamDocumentTest extends AbstractDocumentTest {

@MockBean
private ExamService examService;

@MockBean
private ExamQueryService examQueryService;

@Test
@DisplayName("출제된 시험 요약 목록을 조회할 수 있다.")
void getPublishedExamSummaries() throws Exception {
Expand Down
11 changes: 0 additions & 11 deletions server/src/test/java/com/fluffy/oauth2/api/OAuth2DocumentTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,25 +9,14 @@
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;

import com.fluffy.auth.application.response.TokenResponse;
import com.fluffy.global.web.cookie.CookieManager;
import com.fluffy.oauth2.application.OAuth2Service;
import com.fluffy.support.AbstractDocumentTest;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.http.ResponseCookie;
import org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders;

@WebMvcTest(OAuth2Controller.class)
class OAuth2DocumentTest extends AbstractDocumentTest {

@MockBean
private OAuth2Service oauth2Service;

@MockBean
private CookieManager cookieManager;

@Test
@DisplayName("OAuth2 로그인 페이지로 리다이렉트 된다.")
void oauth2Redirect() throws Exception {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,6 @@
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;

import com.fluffy.submission.api.request.SubmissionWebRequest;
import com.fluffy.submission.application.SubmissionQueryService;
import com.fluffy.submission.application.SubmissionService;
import com.fluffy.submission.application.request.QuestionResponseAppRequest;
import com.fluffy.submission.application.response.SubmissionDetailResponse;
import com.fluffy.submission.application.response.SubmissionDetailResponse.ChoiceAnswerResponse;
Expand All @@ -28,20 +26,11 @@
import java.util.List;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.http.MediaType;
import org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders;

@WebMvcTest(SubmissionController.class)
class SubmissionDocumentTest extends AbstractDocumentTest {

@MockBean
private SubmissionService submissionService;

@MockBean
private SubmissionQueryService submissionQueryService;

@Test
@DisplayName("시험 제출 요약 목록을 조회할 수 있다.")
void getSummaries() throws Exception {
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
package com.fluffy.support;

import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.when;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fluffy.auth.api.AuthController;
import com.fluffy.auth.application.AuthService;
import com.fluffy.exam.api.ExamController;
import com.fluffy.exam.application.ExamQueryService;
import com.fluffy.exam.application.ExamService;
import com.fluffy.global.web.Accessor;
import com.fluffy.global.web.AuthArgumentResolver;
import com.fluffy.global.web.cookie.CookieManager;
import com.fluffy.oauth2.api.OAuth2Controller;
import com.fluffy.oauth2.application.OAuth2Service;
import com.fluffy.submission.api.SubmissionController;
import com.fluffy.submission.application.SubmissionQueryService;
import com.fluffy.submission.application.SubmissionService;
import org.junit.jupiter.api.BeforeEach;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.test.context.ActiveProfiles;
import org.springframework.test.web.servlet.MockMvc;

@WebMvcTest({
AuthController.class,
ExamController.class,
OAuth2Controller.class,
SubmissionController.class,
})
@ActiveProfiles("test")
public abstract class AbstractControllerTest {

protected MockMvc mockMvc;

@Autowired
protected ObjectMapper objectMapper;

@MockBean
protected AuthArgumentResolver authArgumentResolver;

@MockBean
protected AuthService authService;

@MockBean
protected CookieManager cookieManager;

@MockBean
protected ExamService examService;

@MockBean
protected ExamQueryService examQueryService;

@MockBean
protected OAuth2Service oauth2Service;

@MockBean
protected SubmissionService submissionService;

@MockBean
protected SubmissionQueryService submissionQueryService;

@BeforeEach
public void setUp() {
when(authArgumentResolver.resolveArgument(any(), any(), any(), any()))
.thenReturn(new Accessor(1L));
}
}
54 changes: 22 additions & 32 deletions server/src/test/java/com/fluffy/support/AbstractDocumentTest.java
Original file line number Diff line number Diff line change
@@ -1,69 +1,59 @@
package com.fluffy.support;

import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.when;
import static org.springframework.restdocs.mockmvc.MockMvcRestDocumentation.documentationConfiguration;
import static org.springframework.restdocs.operation.preprocess.Preprocessors.modifyUris;
import static org.springframework.restdocs.operation.preprocess.Preprocessors.prettyPrint;
import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fluffy.global.web.Accessor;
import com.fluffy.global.web.AuthArgumentResolver;
import com.fluffy.support.AbstractDocumentTest.RestDocsConfig;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.restdocs.AutoConfigureRestDocs;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.boot.test.context.TestConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Import;
import org.springframework.restdocs.RestDocumentationContextProvider;
import org.springframework.restdocs.RestDocumentationExtension;
import org.springframework.restdocs.mockmvc.MockMvcRestDocumentation;
import org.springframework.restdocs.mockmvc.RestDocumentationResultHandler;
import org.springframework.test.context.ActiveProfiles;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.filter.CharacterEncodingFilter;

@AutoConfigureRestDocs
@ExtendWith(RestDocumentationExtension.class)
@Import(RestDocsConfig.class)
@ActiveProfiles("test")
public abstract class AbstractDocumentTest {

protected MockMvc mockMvc;

protected ObjectMapper objectMapper;
@Import(RestDocsConfig.class)
@ExtendWith(RestDocumentationExtension.class)
public abstract class AbstractDocumentTest extends AbstractControllerTest {

@Autowired
protected RestDocumentationResultHandler restDocs;

@MockBean
protected AuthArgumentResolver authArgumentResolver;

@BeforeEach
public void setUp(
WebApplicationContext context,
RestDocumentationContextProvider provider,
@Autowired ObjectMapper objectMapper
WebApplicationContext webApplicationContext,
RestDocumentationContextProvider restDocumentation
) {
mockMvc = MockMvcBuilders.webAppContextSetup(context)
.apply(documentationConfiguration(provider)
mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext)
.apply(documentationConfiguration(restDocumentation)
.operationPreprocessors()
.withRequestDefaults(
modifyUris()
.scheme("https")
.host("api.fluffy.com")
.removePort()
prettyPrint(),
modifyUris().scheme("https").host("api.fluffy.com").removePort()
)
.withResponseDefaults(prettyPrint())
)
.alwaysDo(print())
.alwaysDo(restDocs)
.addFilter(new CharacterEncodingFilter("UTF-8", true))
.build();
}

this.objectMapper = objectMapper;
@TestConfiguration
static class RestDocsConfig {

when(authArgumentResolver.resolveArgument(any(), any(), any(), any()))
.thenReturn(new Accessor(1L));
@Bean
public RestDocumentationResultHandler restDocs() {
return MockMvcRestDocumentation.document("{class-name}/{method-name}");
}
}
}
20 changes: 0 additions & 20 deletions server/src/test/java/com/fluffy/support/RestDocsConfig.java

This file was deleted.

0 comments on commit abadb43

Please sign in to comment.