diff --git a/src/main/java/com/todaysound/todaysound_server/domain/alarm/controller/AlarmApi.java b/src/main/java/com/todaysound/todaysound_server/domain/alarm/controller/AlarmApi.java index 119752e..2b7c416 100644 --- a/src/main/java/com/todaysound/todaysound_server/domain/alarm/controller/AlarmApi.java +++ b/src/main/java/com/todaysound/todaysound_server/domain/alarm/controller/AlarmApi.java @@ -1,7 +1,7 @@ package com.todaysound.todaysound_server.domain.alarm.controller; import com.todaysound.todaysound_server.domain.alarm.dto.response.RecentAlarmResponse; -import com.todaysound.todaysound_server.global.dto.PageRequestDTO; +import com.todaysound.todaysound_server.global.dto.PageRequest; import com.todaysound.todaysound_server.global.exception.CustomErrorResponse; import com.todaysound.todaysound_server.global.response.ApiResponse; import io.swagger.v3.oas.annotations.Operation; @@ -91,7 +91,7 @@ public interface AlarmApi { ) }) List getRecentAlarms( - @ModelAttribute PageRequestDTO pageRequest, + @ModelAttribute PageRequest pageRequest, @RequestHeader("X-User-ID") String userUuid, @RequestHeader("X-Device-Secret") String deviceSecret ); diff --git a/src/main/java/com/todaysound/todaysound_server/domain/alarm/controller/AlarmQueryController.java b/src/main/java/com/todaysound/todaysound_server/domain/alarm/controller/AlarmQueryController.java index 4b8bb87..d58fe98 100644 --- a/src/main/java/com/todaysound/todaysound_server/domain/alarm/controller/AlarmQueryController.java +++ b/src/main/java/com/todaysound/todaysound_server/domain/alarm/controller/AlarmQueryController.java @@ -6,7 +6,7 @@ import com.todaysound.todaysound_server.domain.alarm.dto.response.RecentAlarmResponse; import com.todaysound.todaysound_server.domain.alarm.service.AlarmQueryService; import com.todaysound.todaysound_server.domain.summary.service.SummaryCommandService; -import com.todaysound.todaysound_server.global.dto.PageRequestDTO; +import com.todaysound.todaysound_server.global.dto.PageRequest; import lombok.RequiredArgsConstructor; @RestController @@ -23,7 +23,7 @@ public class AlarmQueryController implements AlarmApi { @GetMapping() @Override public List getRecentAlarms( - @ModelAttribute final PageRequestDTO pageRequest, + @ModelAttribute final PageRequest pageRequest, @RequestHeader("X-User-ID") String userUuid, @RequestHeader("X-Device-Secret") String deviceSecret) { diff --git a/src/main/java/com/todaysound/todaysound_server/domain/alarm/repository/AlarmDynamicRepository.java b/src/main/java/com/todaysound/todaysound_server/domain/alarm/repository/AlarmDynamicRepository.java index c5a2208..1e9849b 100644 --- a/src/main/java/com/todaysound/todaysound_server/domain/alarm/repository/AlarmDynamicRepository.java +++ b/src/main/java/com/todaysound/todaysound_server/domain/alarm/repository/AlarmDynamicRepository.java @@ -3,10 +3,10 @@ import java.util.List; import com.todaysound.todaysound_server.domain.summary.entity.Summary; -import com.todaysound.todaysound_server.global.dto.PageRequestDTO; +import com.todaysound.todaysound_server.global.dto.PageRequest; public interface AlarmDynamicRepository { - List findAlarms(Long userId, PageRequestDTO pageRequest); + List findAlarms(Long userId, PageRequest pageRequest); } diff --git a/src/main/java/com/todaysound/todaysound_server/domain/alarm/repository/AlarmDynamicRepositoryImpl.java b/src/main/java/com/todaysound/todaysound_server/domain/alarm/repository/AlarmDynamicRepositoryImpl.java index 88e72a6..a2edfa7 100644 --- a/src/main/java/com/todaysound/todaysound_server/domain/alarm/repository/AlarmDynamicRepositoryImpl.java +++ b/src/main/java/com/todaysound/todaysound_server/domain/alarm/repository/AlarmDynamicRepositoryImpl.java @@ -3,14 +3,9 @@ import java.util.List; import com.todaysound.todaysound_server.domain.summary.entity.Summary; -import com.todaysound.todaysound_server.global.exception.BaseException; import org.springframework.stereotype.Repository; -import com.querydsl.core.types.dsl.BooleanExpression; -import com.querydsl.jpa.JPAExpressions; import com.querydsl.jpa.impl.JPAQueryFactory; -import com.todaysound.todaysound_server.domain.alarm.exception.AlarmException; -import com.todaysound.todaysound_server.domain.subscription.entity.Subscription; -import com.todaysound.todaysound_server.global.dto.PageRequestDTO; +import com.todaysound.todaysound_server.global.dto.PageRequest; import lombok.RequiredArgsConstructor; import static com.todaysound.todaysound_server.domain.subscription.entity.QSubscription.subscription; @@ -24,7 +19,7 @@ public class AlarmDynamicRepositoryImpl implements AlarmDynamicRepository { private final JPAQueryFactory queryFactory; @Override - public List findAlarms(Long userId, PageRequestDTO pageRequest) { + public List findAlarms(Long userId, PageRequest pageRequest) { return queryFactory.selectFrom(summary).innerJoin(summary.subscription, subscription).fetchJoin() .where(subscription.user.id.eq(userId), subscription.isAlarmEnabled.eq(true)) diff --git a/src/main/java/com/todaysound/todaysound_server/domain/alarm/service/AlarmQueryService.java b/src/main/java/com/todaysound/todaysound_server/domain/alarm/service/AlarmQueryService.java index 1a3d9b9..e25f458 100644 --- a/src/main/java/com/todaysound/todaysound_server/domain/alarm/service/AlarmQueryService.java +++ b/src/main/java/com/todaysound/todaysound_server/domain/alarm/service/AlarmQueryService.java @@ -8,7 +8,7 @@ import org.springframework.stereotype.Service; import com.todaysound.todaysound_server.domain.alarm.dto.response.RecentAlarmResponse; import com.todaysound.todaysound_server.domain.alarm.repository.AlarmRepository; -import com.todaysound.todaysound_server.global.dto.PageRequestDTO; +import com.todaysound.todaysound_server.global.dto.PageRequest; import lombok.RequiredArgsConstructor; import org.springframework.transaction.annotation.Transactional; @@ -20,7 +20,7 @@ public class AlarmQueryService { private final AlarmRepository alarmRepository; private final HeaderAuthValidator headerAuthValidator; - public List getRecentAlarms(final PageRequestDTO pageRequest, final String userUuid, + public List getRecentAlarms(final PageRequest pageRequest, final String userUuid, final String deviceSecret) { // 헤더 인증 검증 및 사용자 획득 diff --git a/src/main/java/com/todaysound/todaysound_server/domain/feed/controller/FeedApi.java b/src/main/java/com/todaysound/todaysound_server/domain/feed/controller/FeedApi.java index af01931..23d2c80 100644 --- a/src/main/java/com/todaysound/todaysound_server/domain/feed/controller/FeedApi.java +++ b/src/main/java/com/todaysound/todaysound_server/domain/feed/controller/FeedApi.java @@ -2,7 +2,7 @@ import com.todaysound.todaysound_server.domain.feed.dto.response.FeedResponseDTO; import com.todaysound.todaysound_server.domain.feed.dto.response.HomeFeedResponse; -import com.todaysound.todaysound_server.global.dto.PageRequestDTO; +import com.todaysound.todaysound_server.global.dto.PageRequest; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import org.springframework.web.bind.annotation.ModelAttribute; @@ -17,7 +17,7 @@ public interface FeedApi { 사용자의 읽지 않은 요약(Summary) 중 알람이 활성화된 구독의 요약들인 피드를 페이지네이션하여 조회합니다. """, tags = {"Feed"}, operationId = "getFeeds") - List findFeeds(@ModelAttribute PageRequestDTO pageRequest, + List findFeeds(@ModelAttribute PageRequest pageRequest, @RequestHeader("X-User-ID") String userUuid, @RequestHeader("X-Device-Secret") String deviceSecret); diff --git a/src/main/java/com/todaysound/todaysound_server/domain/feed/controller/FeedController.java b/src/main/java/com/todaysound/todaysound_server/domain/feed/controller/FeedController.java index b49333f..8169e9f 100644 --- a/src/main/java/com/todaysound/todaysound_server/domain/feed/controller/FeedController.java +++ b/src/main/java/com/todaysound/todaysound_server/domain/feed/controller/FeedController.java @@ -9,7 +9,7 @@ import com.todaysound.todaysound_server.domain.feed.dto.response.FeedResponseDTO; import com.todaysound.todaysound_server.domain.feed.dto.response.HomeFeedResponse; import com.todaysound.todaysound_server.domain.feed.service.FeedQueryService; -import com.todaysound.todaysound_server.global.dto.PageRequestDTO; +import com.todaysound.todaysound_server.global.dto.PageRequest; import lombok.RequiredArgsConstructor; @RestController @@ -21,7 +21,7 @@ public class FeedController implements FeedApi { @Override @GetMapping() - public List findFeeds(@ModelAttribute final PageRequestDTO pageRequest, + public List findFeeds(@ModelAttribute final PageRequest pageRequest, @RequestHeader("X-User-ID") String userUuid, @RequestHeader("X-Device-Secret") String deviceSecret) { diff --git a/src/main/java/com/todaysound/todaysound_server/domain/feed/repository/FeedDynamicRepository.java b/src/main/java/com/todaysound/todaysound_server/domain/feed/repository/FeedDynamicRepository.java index 0cf42ef..cedee90 100644 --- a/src/main/java/com/todaysound/todaysound_server/domain/feed/repository/FeedDynamicRepository.java +++ b/src/main/java/com/todaysound/todaysound_server/domain/feed/repository/FeedDynamicRepository.java @@ -3,13 +3,13 @@ import java.util.List; import com.todaysound.todaysound_server.domain.summary.entity.Summary; -import com.todaysound.todaysound_server.global.dto.PageRequestDTO; +import com.todaysound.todaysound_server.global.dto.PageRequest; public interface FeedDynamicRepository { - List findFeeds(Long userId, PageRequestDTO pageRequest); + List findFeeds(Long userId, PageRequest pageRequest); List findFeedsForHome(Long userId); diff --git a/src/main/java/com/todaysound/todaysound_server/domain/feed/repository/FeedDynamicRepositoryImpl.java b/src/main/java/com/todaysound/todaysound_server/domain/feed/repository/FeedDynamicRepositoryImpl.java index 7cd5e34..b863829 100644 --- a/src/main/java/com/todaysound/todaysound_server/domain/feed/repository/FeedDynamicRepositoryImpl.java +++ b/src/main/java/com/todaysound/todaysound_server/domain/feed/repository/FeedDynamicRepositoryImpl.java @@ -4,7 +4,7 @@ import org.springframework.stereotype.Repository; import com.querydsl.jpa.impl.JPAQueryFactory; import com.todaysound.todaysound_server.domain.summary.entity.Summary; -import com.todaysound.todaysound_server.global.dto.PageRequestDTO; +import com.todaysound.todaysound_server.global.dto.PageRequest; import lombok.RequiredArgsConstructor; import static com.todaysound.todaysound_server.domain.summary.entity.QSummary.summary; @@ -18,7 +18,7 @@ public class FeedDynamicRepositoryImpl implements FeedDynamicRepository { private final JPAQueryFactory queryFactory; @Override - public List findFeeds(Long userId, PageRequestDTO pageRequest) { + public List findFeeds(Long userId, PageRequest pageRequest) { return queryFactory.selectFrom(summary).innerJoin(summary.subscription, subscription).fetchJoin() .where(subscription.user.id.eq(userId)).orderBy(summary.updatedAt.desc(), summary.id.desc()) diff --git a/src/main/java/com/todaysound/todaysound_server/domain/feed/service/FeedQueryService.java b/src/main/java/com/todaysound/todaysound_server/domain/feed/service/FeedQueryService.java index 44b9d8e..24a9241 100644 --- a/src/main/java/com/todaysound/todaysound_server/domain/feed/service/FeedQueryService.java +++ b/src/main/java/com/todaysound/todaysound_server/domain/feed/service/FeedQueryService.java @@ -7,7 +7,7 @@ import lombok.RequiredArgsConstructor; import org.springframework.transaction.annotation.Transactional; -import com.todaysound.todaysound_server.global.dto.PageRequestDTO; +import com.todaysound.todaysound_server.global.dto.PageRequest; import com.todaysound.todaysound_server.domain.feed.dto.response.FeedResponseDTO; import com.todaysound.todaysound_server.domain.feed.dto.response.HomeFeedResponse; import com.todaysound.todaysound_server.domain.feed.repository.FeedDynamicRepository; @@ -23,7 +23,7 @@ public class FeedQueryService { private final HeaderAuthValidator headerAuthValidator; public List findFeeds(final String userUuid, final String deviceSecret, - final PageRequestDTO pageRequest) { + final PageRequest pageRequest) { User user = headerAuthValidator.validateAndGetUser(userUuid, deviceSecret); diff --git a/src/main/java/com/todaysound/todaysound_server/domain/subscription/controller/SubscriptionApi.java b/src/main/java/com/todaysound/todaysound_server/domain/subscription/controller/SubscriptionApi.java index d9126cb..b7de8fa 100644 --- a/src/main/java/com/todaysound/todaysound_server/domain/subscription/controller/SubscriptionApi.java +++ b/src/main/java/com/todaysound/todaysound_server/domain/subscription/controller/SubscriptionApi.java @@ -4,7 +4,7 @@ import com.todaysound.todaysound_server.domain.subscription.dto.response.KeywordListResponseDto; import com.todaysound.todaysound_server.domain.subscription.dto.response.SubscriptionCreationResponseDto; import com.todaysound.todaysound_server.domain.subscription.dto.response.SubscriptionResponse; -import com.todaysound.todaysound_server.global.dto.PageRequestDTO; +import com.todaysound.todaysound_server.global.dto.PageRequest; import com.todaysound.todaysound_server.global.exception.CustomErrorResponse; import com.todaysound.todaysound_server.global.response.ApiResponse; import io.swagger.v3.oas.annotations.Operation; @@ -105,7 +105,7 @@ public interface SubscriptionApi { ) }) List getMySubscriptions( - @ModelAttribute PageRequestDTO pageRequest, + @ModelAttribute PageRequest pageRequest, @RequestHeader("X-User-ID") String userUuid, @RequestHeader("X-Device-Secret") String deviceSecret ); diff --git a/src/main/java/com/todaysound/todaysound_server/domain/subscription/controller/SubscriptionController.java b/src/main/java/com/todaysound/todaysound_server/domain/subscription/controller/SubscriptionController.java index 17f9d66..26631d3 100644 --- a/src/main/java/com/todaysound/todaysound_server/domain/subscription/controller/SubscriptionController.java +++ b/src/main/java/com/todaysound/todaysound_server/domain/subscription/controller/SubscriptionController.java @@ -7,7 +7,7 @@ import com.todaysound.todaysound_server.domain.subscription.dto.response.SubscriptionResponse; import com.todaysound.todaysound_server.domain.subscription.service.SubscriptionCommandService; import com.todaysound.todaysound_server.domain.subscription.service.SubscriptionQueryService; -import com.todaysound.todaysound_server.global.dto.PageRequestDTO; +import com.todaysound.todaysound_server.global.dto.PageRequest; import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; @@ -27,7 +27,7 @@ public class SubscriptionController implements SubscriptionApi { // 사용자의 구독을 페이지네이션(한 페이지 size 만큼)해서 가져옴. @GetMapping() - public List getMySubscriptions(@ModelAttribute final PageRequestDTO pageRequest, + public List getMySubscriptions(@ModelAttribute final PageRequest pageRequest, @RequestHeader("X-User-ID") String userUuid, @RequestHeader("X-Device-Secret") String deviceSecret) { diff --git a/src/main/java/com/todaysound/todaysound_server/domain/subscription/service/SubscriptionQueryService.java b/src/main/java/com/todaysound/todaysound_server/domain/subscription/service/SubscriptionQueryService.java index c015544..19a5a2e 100644 --- a/src/main/java/com/todaysound/todaysound_server/domain/subscription/service/SubscriptionQueryService.java +++ b/src/main/java/com/todaysound/todaysound_server/domain/subscription/service/SubscriptionQueryService.java @@ -11,7 +11,7 @@ import com.todaysound.todaysound_server.domain.subscription.repository.SubscriptionRepository; import com.todaysound.todaysound_server.domain.user.entity.User; import com.todaysound.todaysound_server.domain.user.validator.HeaderAuthValidator; -import com.todaysound.todaysound_server.global.dto.PageRequestDTO; +import com.todaysound.todaysound_server.global.dto.PageRequest; import lombok.RequiredArgsConstructor; @Service @@ -23,7 +23,7 @@ public class SubscriptionQueryService { private final KeywordRepository keywordRepository; private final HeaderAuthValidator headerAuthValidator; - public List getMySubscriptions(final PageRequestDTO pageRequest, + public List getMySubscriptions(final PageRequest pageRequest, final String userUuid, final String deviceSecret) { // 헤더 인증 검증 및 사용자 획득 diff --git a/src/main/java/com/todaysound/todaysound_server/global/dto/PageRequestDTO.java b/src/main/java/com/todaysound/todaysound_server/global/dto/PageRequest.java similarity index 81% rename from src/main/java/com/todaysound/todaysound_server/global/dto/PageRequestDTO.java rename to src/main/java/com/todaysound/todaysound_server/global/dto/PageRequest.java index 6264aba..3051004 100644 --- a/src/main/java/com/todaysound/todaysound_server/global/dto/PageRequestDTO.java +++ b/src/main/java/com/todaysound/todaysound_server/global/dto/PageRequest.java @@ -1,6 +1,6 @@ package com.todaysound.todaysound_server.global.dto; -public record PageRequestDTO(Long page, Integer size) { +public record PageRequest(Long page, Integer size) { private static final Integer DEFAULT_SIZE = 5; @Override diff --git a/src/test/java/com/todaysound/todaysound_server/domain/feed/controller/FeedControllerTest.java b/src/test/java/com/todaysound/todaysound_server/domain/feed/controller/FeedControllerTest.java new file mode 100644 index 0000000..ddad25a --- /dev/null +++ b/src/test/java/com/todaysound/todaysound_server/domain/feed/controller/FeedControllerTest.java @@ -0,0 +1,90 @@ +package com.todaysound.todaysound_server.domain.feed.controller; + +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.BDDMockito.given; +import static org.mockito.BDDMockito.willReturn; +import static org.springframework.restdocs.payload.PayloadDocumentation.fieldWithPath; +import static org.springframework.restdocs.payload.PayloadDocumentation.requestFields; +import static org.springframework.restdocs.payload.PayloadDocumentation.responseFields; +import static org.springframework.restdocs.request.RequestDocumentation.parameterWithName; +import static org.springframework.restdocs.request.RequestDocumentation.pathParameters; +import static org.springframework.restdocs.request.RequestDocumentation.queryParameters; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +import com.todaysound.todaysound_server.domain.feed.dto.response.FeedResponseDTO; +import com.todaysound.todaysound_server.domain.feed.dto.response.HomeFeedResponse; +import com.todaysound.todaysound_server.support.DocumentationTestSupport; +import java.util.List; +import org.junit.jupiter.api.Test; +import org.springframework.data.domain.PageRequest; +import org.springframework.test.web.servlet.ResultActions; + +class FeedControllerTest extends DocumentationTestSupport { + + + @Test + void 피드_목록을_조회합니다() throws Exception { + // given + PageRequest request = PageRequest.of(0, 10); + + FeedResponseDTO response1 = new FeedResponseDTO(1L, "피드 내용", "작성자 이름", "2024-06-01T12:00:00", "fe", "1시간 전"); + FeedResponseDTO response2 = new FeedResponseDTO(2L, "또 다른 피드 내용", "다른 작성자", "2024-06-01T11:30:00", "fe2", + "2시간 전"); + FeedResponseDTO response3 = new FeedResponseDTO(3L, "세 번째 피드 내용", "세 번째 작성자", "2024-06-01T10:00:00", "fe3", + "3시간 전"); + + List responseList = List.of(response1, response2, response3); + + given(feedQueryService.findFeeds(anyString(), anyString(), any())).willReturn(responseList); + + // when + ResultActions result = mockMvc.perform( + get("/api/feeds").header("X-User-Id", "test-user-id").header("X-Device-Secret", "test-device-secret") + .param("page", String.valueOf(request.getPageNumber())) + .param("size", String.valueOf(request.getPageSize()))); + // then + result.andExpect(status().isOk()).andDo(restDocsHandler.document( + queryParameters(parameterWithName("page").description("페이지 번호 (0부터 시작)"), + parameterWithName("size").description("페이지 크기")), + responseFields(fieldWithPath("errorCode").description("응답 코드"), + fieldWithPath("message").description("응답 메시지"), fieldWithPath("result").description("피드 목록"), + fieldWithPath("result[].subscriptionId").description("구독 ID"), + fieldWithPath("result[].alias").description("구독 별칭"), + fieldWithPath("result[].summaryTitle").description("요약 제목"), + fieldWithPath("result[].summaryContent").description("요약 내용"), + fieldWithPath("result[].postUrl").description("연결 url"), + fieldWithPath("result[].timeAgo").description("피드 작성 후 경과 시간")))); + } + + + @Test + void 홈_피드_목록을_조회합니다() throws Exception { + // given + + HomeFeedResponse response1 = new HomeFeedResponse(1L, "피드 내용", "작성자 이름", "2024-06-01T12:00:00", "fe", "1시간 전"); + HomeFeedResponse response2 = new HomeFeedResponse(2L, "또 다른 피드 내용", "다른 작성자", "2024-06-01T11:30:00", "fe2", + "2시간 전"); + HomeFeedResponse response3 = new HomeFeedResponse(3L, "세 번째 피드 내용", "세 번째 작성자", "2024-06-01T10:00:00", "fe3", + "3시간 전"); + + List responseList = List.of(response1, response2, response3); + + given(feedQueryService.findFeedsForHome(anyString(), anyString())).willReturn(responseList); + + // when + ResultActions result = mockMvc.perform(get("/api/feeds/home").header("X-User-Id", "test-user-id") + .header("X-Device-Secret", "test-device-secret")); + // then + result.andExpect(status().isOk()).andDo(restDocsHandler.document( + responseFields(fieldWithPath("errorCode").description("응답 코드"), + fieldWithPath("message").description("응답 메시지"), fieldWithPath("result").description("피드 목록"), + fieldWithPath("result[].subscriptionId").description("구독 ID"), + fieldWithPath("result[].alias").description("구독 별칭"), + fieldWithPath("result[].summaryTitle").description("요약 제목"), + fieldWithPath("result[].summaryContent").description("요약 내용"), + fieldWithPath("result[].postUrl").description("연결 url"), + fieldWithPath("result[].timeAgo").description("피드 작성 후 경과 시간")))); + } +} \ No newline at end of file diff --git a/src/test/java/com/todaysound/todaysound_server/support/DocumentationTestSupport.java b/src/test/java/com/todaysound/todaysound_server/support/DocumentationTestSupport.java index 44d42d5..b07b22f 100644 --- a/src/test/java/com/todaysound/todaysound_server/support/DocumentationTestSupport.java +++ b/src/test/java/com/todaysound/todaysound_server/support/DocumentationTestSupport.java @@ -1,31 +1,35 @@ package com.todaysound.todaysound_server.support; import com.fasterxml.jackson.databind.ObjectMapper; +import com.todaysound.todaysound_server.domain.feed.controller.FeedController; +import com.todaysound.todaysound_server.domain.feed.service.FeedQueryService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.restdocs.AutoConfigureRestDocs; import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; import org.springframework.context.annotation.Import; import org.springframework.restdocs.mockmvc.RestDocumentationResultHandler; +import org.springframework.test.context.bean.override.mockito.MockitoBean; import org.springframework.test.web.servlet.MockMvc; @WebMvcTest(controllers = { - -}) -@Import({ - RestDocsConfig.class, + FeedController.class, }) +@Import({RestDocsConfig.class,}) @AutoConfigureRestDocs @AutoConfigureMockMvc(addFilters = false) public class DocumentationTestSupport { - @Autowired - protected RestDocumentationResultHandler restDocsHandler; + @Autowired + protected RestDocumentationResultHandler restDocsHandler; + + @Autowired + protected MockMvc mockMvc; - @Autowired - protected MockMvc mockMvc; + @Autowired + protected ObjectMapper objectMapper; - @Autowired - protected ObjectMapper objectMapper; + @MockitoBean + protected FeedQueryService feedQueryService; }