diff --git a/src/docs/asciidoc/auth.adoc b/src/docs/asciidoc/auth.adoc index 2e91169..f670880 100644 --- a/src/docs/asciidoc/auth.adoc +++ b/src/docs/asciidoc/auth.adoc @@ -75,4 +75,28 @@ include::{snippets}/auth-controller-test/kakao-login-callback/http-response.adoc ==== 응답 -include::{snippets}/auth-controller-test/kakao-login-callback/response-body.adoc[] \ No newline at end of file +include::{snippets}/auth-controller-test/kakao-login-callback/response-body.adoc[] + +== 로그아웃 + +서비스와 카카오 로그아웃을 처리합니다. + +=== Example + +include::{snippets}/auth-controller-test/kakao-logout/curl-request.adoc[] + +=== HTTP + +==== 요청 + +include::{snippets}/auth-controller-test/kakao-logout/http-request.adoc[] + +==== 응답 + +include::{snippets}/auth-controller-test/kakao-logout/http-response.adoc[] + +=== Body + +==== 응답 + +include::{snippets}/auth-controller-test/kakao-logout/response-body.adoc[] \ No newline at end of file diff --git a/src/docs/asciidoc/expense.adoc b/src/docs/asciidoc/expense.adoc index 251d1cc..605f7cc 100644 --- a/src/docs/asciidoc/expense.adoc +++ b/src/docs/asciidoc/expense.adoc @@ -195,4 +195,6 @@ include::{snippets}/expense-controller-test/update-img-url-success/http-response ==== 요청 -include::{snippets}/expense-controller-test/update-img-url-success/request-body.adoc[] \ No newline at end of file +include::{snippets}/expense-controller-test/update-img-url-success/request-body.adoc[] + +operation::create-expense[snippets="path-parameters,http-request,request-body,request-fields,http-response"] \ No newline at end of file diff --git a/src/docs/asciidoc/index.adoc b/src/docs/asciidoc/index.adoc index 38dc806..22eb38e 100644 --- a/src/docs/asciidoc/index.adoc +++ b/src/docs/asciidoc/index.adoc @@ -7,6 +7,9 @@ :toclevels: 2 :sectnums: + +include::auth.adoc[] + include::character.adoc[] include::expense.adoc[] diff --git a/src/test/java/com/dnd/moddo/domain/auth/controller/AuthControllerTest.java b/src/test/java/com/dnd/moddo/domain/auth/controller/AuthControllerTest.java index 3a440ac..a371a4d 100644 --- a/src/test/java/com/dnd/moddo/domain/auth/controller/AuthControllerTest.java +++ b/src/test/java/com/dnd/moddo/domain/auth/controller/AuthControllerTest.java @@ -3,6 +3,7 @@ import static org.mockito.BDDMockito.*; import static org.springframework.restdocs.cookies.CookieDocumentation.*; import static org.springframework.restdocs.headers.HeaderDocumentation.*; +import static org.springframework.restdocs.mockmvc.MockMvcRestDocumentation.*; import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.*; import static org.springframework.restdocs.payload.PayloadDocumentation.*; import static org.springframework.restdocs.request.RequestDocumentation.*; @@ -42,8 +43,8 @@ void getGuestToken() throws Exception { .andExpect(jsonPath("$.refreshToken").value("refresh-token")) .andExpect(jsonPath("$.isMember").value(false)) .andDo(restDocs.document( - responseHeaders( - headerWithName("Set-Cookie").description("엑세스 토큰") + responseCookies( + cookieWithName("accessToken").description("엑세스 토큰") ), responseFields( fieldWithPath("accessToken").type(JsonFieldType.STRING).description("액세스 토큰"), @@ -93,12 +94,12 @@ void kakaoLoginCallback() throws Exception { mockMvc.perform(get("/api/v1/login/oauth2/callback") .param("code", "test code")) .andExpect(status().isOk()) - .andDo(restDocs.document( + .andDo(document("login", queryParameters( parameterWithName("code").description("카카오 인가 코드") ), - responseHeaders( - headerWithName("Set-Cookie").description("엑세스 토큰") + responseCookies( + cookieWithName("accessToken").description("엑세스 토큰") ) )); } @@ -114,7 +115,7 @@ void kakaoLogout() throws Exception { mockMvc.perform(get("/api/v1/logout") .cookie(new Cookie("accessToken", "access-token"))) .andExpect(status().isOk()) - .andDo(restDocs.document( + .andDo(document("logout", requestCookies( cookieWithName("accessToken").description("액세스 토큰") ), diff --git a/src/test/java/com/dnd/moddo/domain/expense/controller/ExpenseControllerTest.java b/src/test/java/com/dnd/moddo/domain/expense/controller/ExpenseControllerTest.java index 1096267..1eb3e28 100644 --- a/src/test/java/com/dnd/moddo/domain/expense/controller/ExpenseControllerTest.java +++ b/src/test/java/com/dnd/moddo/domain/expense/controller/ExpenseControllerTest.java @@ -4,7 +4,10 @@ import static org.hamcrest.Matchers.*; import static org.mockito.BDDMockito.any; import static org.mockito.BDDMockito.*; +import static org.springframework.restdocs.mockmvc.MockMvcRestDocumentation.*; import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.*; +import static org.springframework.restdocs.payload.PayloadDocumentation.*; +import static org.springframework.restdocs.request.RequestDocumentation.*; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; import java.time.LocalDate; @@ -13,6 +16,7 @@ import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.http.MediaType; +import org.springframework.restdocs.payload.JsonFieldType; import com.dnd.moddo.domain.expense.dto.request.ExpenseImageRequest; import com.dnd.moddo.domain.expense.dto.request.ExpenseRequest; @@ -74,7 +78,21 @@ void saveExpensesSuccess() throws Exception { .param("groupToken", groupToken) .contentType(MediaType.APPLICATION_JSON) .content(objectMapper.writeValueAsString(request))) - .andExpect(status().isOk()); + .andExpect(status().isOk()) + .andDo(document("create-expense", + requestFields( + fieldWithPath("expenses").type(JsonFieldType.ARRAY).description("지출 항목 목록"), + fieldWithPath("expenses[].amount").type(JsonFieldType.NUMBER).description("지출 금액"), + fieldWithPath("expenses[].content").type(JsonFieldType.STRING).description("지출 내용"), + fieldWithPath("expenses[].date").type(JsonFieldType.STRING).description("지출 일자 (yyyy-MM-dd)"), + fieldWithPath("expenses[].memberExpenses").type(JsonFieldType.ARRAY).description("멤버별 지출 내역"), + fieldWithPath("expenses[].memberExpenses[].id").type(JsonFieldType.NUMBER) + .description("멤버 ID"), + fieldWithPath("expenses[].memberExpenses[].amount").type(JsonFieldType.NUMBER) + .description("멤버가 실제로 부담한 금액") + )) + ) + ; } @Test @@ -123,7 +141,28 @@ void getAllByGroupIdSuccess() throws Exception { .andExpect(status().isOk()) .andExpect(jsonPath("$.expenses.length()").value(4)) .andExpect(jsonPath("$.expenses[0].id").value(1)) - .andExpect(jsonPath("$.expenses[0].memberExpenses[0].name").value("김모또")); + .andExpect(jsonPath("$.expenses[0].memberExpenses[0].name").value("김모또")) + .andDo(document("get-expenses", + queryParameters( + parameterWithName("groupToken").description("조회할 그룹 토큰") + ), + responseFields( + fieldWithPath("expenses").type(JsonFieldType.ARRAY).description("지출 내역 목록"), + fieldWithPath("expenses[].id").type(JsonFieldType.NUMBER).description("지출 ID"), + fieldWithPath("expenses[].amount").type(JsonFieldType.NUMBER).description("지출 금액"), + fieldWithPath("expenses[].content").type(JsonFieldType.STRING).description("지출 내역 내용"), + fieldWithPath("expenses[].date").type(JsonFieldType.STRING).description("지출 날짜 (yyyy-MM-dd)"), + fieldWithPath("expenses[].memberExpenses").type(JsonFieldType.ARRAY).description("멤버별 지출 상세"), + fieldWithPath("expenses[].memberExpenses[].id").type(JsonFieldType.NUMBER).description("멤버 ID"), + fieldWithPath("expenses[].memberExpenses[].name").type(JsonFieldType.STRING).description("멤버 이름"), + fieldWithPath("expenses[].memberExpenses[].role").type(JsonFieldType.STRING) + .description("멤버 역할(MANAGER/PARTICIPANT)"), + fieldWithPath("expenses[].memberExpenses[].profile").type(JsonFieldType.STRING) + .description("프로필 이미지 URL"), + fieldWithPath("expenses[].memberExpenses[].amount").type(JsonFieldType.NUMBER) + .description("해당 멤버의 지출 금액") + ) + )); } @Test