test(notification): 알림 읽음, 해제 테스트 작성
This commit is contained in:
72
notification-service/src/docs/asciidoc/api-docs.adoc
Normal file
72
notification-service/src/docs/asciidoc/api-docs.adoc
Normal file
@@ -0,0 +1,72 @@
|
||||
:doctype: book
|
||||
:icons: font
|
||||
:source-highlighter: highlightjs
|
||||
:toc: left
|
||||
:toclevels: 2
|
||||
:sectlinks:
|
||||
|
||||
|
||||
[[overview]]
|
||||
= 개요
|
||||
|
||||
[[overview-http-verbs]]
|
||||
== HTTP 동사
|
||||
|
||||
본 REST API에서 사용하는 HTTP 동사(verbs)는 가능한한 표준 HTTP와 REST 규약을 따릅니다.
|
||||
|
||||
|===
|
||||
| 동사 | 용례
|
||||
|
||||
| `GET`
|
||||
| 리소스를 가져올 때 사용
|
||||
|
||||
| `POST`
|
||||
| 새 리소스를 만들 때 사용
|
||||
|
||||
| `PUT`
|
||||
| 기존 리소스를 수정할 때 사용
|
||||
|
||||
| `PATCH`
|
||||
| 기존 리소스의 일부를 수정할 때 사용
|
||||
|
||||
| `DELETE`
|
||||
| 기존 리소스를 삭제할 떄 사용
|
||||
|===
|
||||
|
||||
[[overview-http-status-codes]]
|
||||
== HTTP 상태 코드
|
||||
|
||||
본 REST API에서 사용하는 HTTP 상태 코드는 가능한 표준 HTTP와 REST 규약을 따릅니다.
|
||||
|
||||
|===
|
||||
| 상태 코드 | 용례
|
||||
|
||||
| `200 OK`
|
||||
| 요청을 성공적으로 처리함
|
||||
|
||||
| `201 Created`
|
||||
| 새 리소스를 성공적으로 생성함. 응답의 `Location` 헤더에 해당 리소스의 URI가 담겨있다.
|
||||
|
||||
| `204 No Content`
|
||||
| 기존 리소스를 성공적으로 수정함.
|
||||
|
||||
| `400 Bad Request`
|
||||
| 잘못된 요청을 보낸 경우. 응답 본문에 더 오류에 대한 정보가 담겨있다.
|
||||
|
||||
| `404 Not Found`
|
||||
| 요청한 리소스가 없음.
|
||||
|
||||
| `409 Conflict`
|
||||
| 클라이언트의 요청이 서버의 상태와 충돌이 발생한 경우.
|
||||
|===
|
||||
|
||||
[[snippets-write-convention]]
|
||||
== snippets 작성 컨벤션
|
||||
domain-httpRequestCode-etc
|
||||
|
||||
== 알림
|
||||
=== 알림 조회 - 회원 고유번호
|
||||
operation::notification-get[snippets='curl-request,http-request,http-response,request-headers,response-fields']
|
||||
=== 알림 수정
|
||||
operation::notification-patch[snippets='curl-request,http-request,http-response,path-parameters,request-fields,response-fields']
|
||||
|
||||
@@ -4,6 +4,7 @@ import com.justpickup.notificationservice.domain.notification.dto.FindNotificati
|
||||
import com.justpickup.notificationservice.domain.notification.dto.UpdateNotificationDto;
|
||||
import com.justpickup.notificationservice.domain.notification.service.NotificationService;
|
||||
import com.justpickup.notificationservice.global.dto.Result;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
@@ -69,7 +70,7 @@ public class NotificationController {
|
||||
return ResponseEntity.ok(Result.createSuccessResult(null));
|
||||
}
|
||||
|
||||
@Data @NoArgsConstructor
|
||||
@Data @NoArgsConstructor @AllArgsConstructor
|
||||
static class PatchNotificationRequest {
|
||||
private boolean read;
|
||||
}
|
||||
|
||||
@@ -4,6 +4,7 @@ import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import com.justpickup.notificationservice.config.TestConfig;
|
||||
import com.justpickup.notificationservice.domain.notification.dto.FindNotificationDto;
|
||||
import com.justpickup.notificationservice.domain.notification.service.NotificationService;
|
||||
import com.justpickup.notificationservice.domain.notification.web.NotificationController.PatchNotificationRequest;
|
||||
import com.justpickup.notificationservice.global.dto.Code;
|
||||
import com.justpickup.notificationservice.global.dto.Yn;
|
||||
import org.junit.jupiter.api.DisplayName;
|
||||
@@ -13,6 +14,8 @@ import org.springframework.boot.test.autoconfigure.restdocs.AutoConfigureRestDoc
|
||||
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.restdocs.request.RequestDocumentation;
|
||||
import org.springframework.test.web.servlet.MockMvc;
|
||||
import org.springframework.test.web.servlet.ResultActions;
|
||||
|
||||
@@ -25,8 +28,10 @@ import static org.springframework.restdocs.headers.HeaderDocumentation.headerWit
|
||||
import static org.springframework.restdocs.headers.HeaderDocumentation.requestHeaders;
|
||||
import static org.springframework.restdocs.mockmvc.MockMvcRestDocumentation.document;
|
||||
import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.get;
|
||||
import static org.springframework.restdocs.payload.PayloadDocumentation.fieldWithPath;
|
||||
import static org.springframework.restdocs.payload.PayloadDocumentation.responseFields;
|
||||
import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.patch;
|
||||
import static org.springframework.restdocs.payload.PayloadDocumentation.*;
|
||||
import static org.springframework.restdocs.request.RequestDocumentation.parameterWithName;
|
||||
import static org.springframework.restdocs.request.RequestDocumentation.pathParameters;
|
||||
import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;
|
||||
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
|
||||
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
|
||||
@@ -93,4 +98,39 @@ class NotificationControllerTest {
|
||||
}
|
||||
return returnList;
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("[API] 알림 수정")
|
||||
void patchNotification() throws Exception {
|
||||
// GIVEN
|
||||
long notificationId = 1L;
|
||||
PatchNotificationRequest request = new PatchNotificationRequest(true);
|
||||
String requestBody = objectMapper.writeValueAsString(request);
|
||||
|
||||
// WHEN
|
||||
ResultActions actions = mockMvc.perform(
|
||||
patch(url + "/{notificationId}", String.valueOf(notificationId))
|
||||
.content(requestBody)
|
||||
.contentType(MediaType.APPLICATION_JSON)
|
||||
.accept(MediaType.APPLICATION_JSON)
|
||||
);
|
||||
|
||||
// THEN
|
||||
actions.andExpect(status().isOk())
|
||||
.andDo(print())
|
||||
.andDo(document("notification-patch",
|
||||
pathParameters(
|
||||
parameterWithName("notificationId").description("알림 고유번호")
|
||||
),
|
||||
requestFields(
|
||||
fieldWithPath("read").description("읽음 여부")
|
||||
),
|
||||
responseFields(
|
||||
fieldWithPath("code").description("결과코드 SUCCESS/ERROR"),
|
||||
fieldWithPath("message").description("메시지"),
|
||||
fieldWithPath("data").description("데이터")
|
||||
)
|
||||
))
|
||||
;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user