From bd5d91a840ad4692f62bd1385c287202c6b05ac5 Mon Sep 17 00:00:00 2001 From: bum12ark Date: Wed, 9 Mar 2022 14:07:26 +0900 Subject: [PATCH] =?UTF-8?q?test(notification):=20[API]=20=EC=82=AC?= =?UTF-8?q?=EC=9A=A9=EC=9E=90=20=EA=B3=A0=EC=9C=A0=EB=B2=88=ED=98=B8?= =?UTF-8?q?=EB=A1=9C=20=EC=A1=B0=ED=9A=8C=20=ED=85=8C=EC=8A=A4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../config/TestConfig.java | 18 ++++ .../web/NotificationControllerTest.java | 96 +++++++++++++++++++ 2 files changed, 114 insertions(+) create mode 100644 notification-service/src/test/java/com/justpickup/notificationservice/config/TestConfig.java create mode 100644 notification-service/src/test/java/com/justpickup/notificationservice/domain/notification/web/NotificationControllerTest.java diff --git a/notification-service/src/test/java/com/justpickup/notificationservice/config/TestConfig.java b/notification-service/src/test/java/com/justpickup/notificationservice/config/TestConfig.java new file mode 100644 index 0000000..d4f484a --- /dev/null +++ b/notification-service/src/test/java/com/justpickup/notificationservice/config/TestConfig.java @@ -0,0 +1,18 @@ +package com.justpickup.notificationservice.config; + +import org.springframework.boot.test.autoconfigure.restdocs.RestDocsMockMvcConfigurationCustomizer; +import org.springframework.boot.test.context.TestConfiguration; +import org.springframework.context.annotation.Bean; + +import static org.springframework.restdocs.operation.preprocess.Preprocessors.prettyPrint; + +@TestConfiguration +public class TestConfig { + + @Bean + public RestDocsMockMvcConfigurationCustomizer restDocsMockMvcConfigurationCustomizer() { + return configurer -> configurer.operationPreprocessors() + .withRequestDefaults(prettyPrint()) + .withResponseDefaults(prettyPrint()); + } +} diff --git a/notification-service/src/test/java/com/justpickup/notificationservice/domain/notification/web/NotificationControllerTest.java b/notification-service/src/test/java/com/justpickup/notificationservice/domain/notification/web/NotificationControllerTest.java new file mode 100644 index 0000000..25c07fe --- /dev/null +++ b/notification-service/src/test/java/com/justpickup/notificationservice/domain/notification/web/NotificationControllerTest.java @@ -0,0 +1,96 @@ +package com.justpickup.notificationservice.domain.notification.web; + +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.global.dto.Code; +import com.justpickup.notificationservice.global.dto.Yn; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.restdocs.AutoConfigureRestDocs; +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.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.ResultActions; + +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; + +import static org.mockito.BDDMockito.given; +import static org.springframework.restdocs.headers.HeaderDocumentation.headerWithName; +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.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; + +@WebMvcTest(NotificationController.class) +@Import(TestConfig.class) +@AutoConfigureRestDocs(uriHost = "https://just-pickup.com", uriPort = 8000) +class NotificationControllerTest { + + @Autowired + MockMvc mockMvc; + + @Autowired + ObjectMapper objectMapper; + + @MockBean + NotificationService notificationService; + + private final String url = "/notification"; + + @Test + @DisplayName("[GET] 회원 고유번호로 알림 가져오기") + void getNotificationByUserId() throws Exception { + // GIVEN + long userId = 1L; + given(notificationService.findNotificationByUserId(userId)) + .willReturn(getNotificationByUserIdWillReturn(userId)); + + // THEN + ResultActions actions + = mockMvc.perform(get(url).header("user-id", String.valueOf(userId))); + + // WHEN + actions.andExpect(status().isOk()) + .andExpect(jsonPath("code").value(Code.SUCCESS.name())) + .andExpect(jsonPath("message").value("")) + .andExpect(jsonPath("data").isNotEmpty()) + .andDo(print()) + .andDo(document("notification-get", + requestHeaders( + headerWithName("user-id").description("회원 고유번호") + ), + responseFields( + fieldWithPath("code").description("결과코드 SUCCESS/ERROR"), + fieldWithPath("message").description("메시지"), + fieldWithPath("data.notifications[*].id").description("알림 고유번호"), + fieldWithPath("data.notifications[*].message").description("알림 내용"), + fieldWithPath("data.notifications[*].title").description("알림 제목"), + fieldWithPath("data.notifications[*].read").description("알림 읽음 여부"), + fieldWithPath("data.notifications[*].time").description("알림 생성 시간 [YYYY-MM-DD HH:MM]") + ) + ) + ) + ; + } + + private List getNotificationByUserIdWillReturn(long userId) { + List returnList = new ArrayList<>(); + for (long id = 1; id <= 5; id++) { + returnList.add(FindNotificationDto.of(id, userId, id + "번 메시지 예시입니다.", "제목" + id, Yn.Y, LocalDateTime.now())); + } + for (long id = 6; id <= 10; id++) { + returnList.add(FindNotificationDto.of(id, userId, id + "번 메시지 예시입니다.", "제목" + id, Yn.N, LocalDateTime.now())); + } + return returnList; + } +}