diff --git a/src/test/kotlin/me/nettee/board/adapter/driving/web/BoardQueryApiTest.kt b/src/test/kotlin/me/nettee/board/adapter/driving/web/BoardQueryApiTest.kt index 484360d..5fea48a 100644 --- a/src/test/kotlin/me/nettee/board/adapter/driving/web/BoardQueryApiTest.kt +++ b/src/test/kotlin/me/nettee/board/adapter/driving/web/BoardQueryApiTest.kt @@ -1,8 +1,5 @@ package me.nettee.board.adapter.driving.web -import com.fasterxml.jackson.annotation.JsonInclude -import com.fasterxml.jackson.databind.ObjectMapper -import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule import io.kotest.core.spec.style.FreeSpec import me.nettee.board.adapter.driving.web.dto.BoardQueryDto.BoardDetailResponse import me.nettee.board.adapter.driving.web.mapper.BoardDtoMapper @@ -11,20 +8,19 @@ import me.nettee.board.application.model.BoardQueryModels.BoardSummary import me.nettee.board.application.model.BoardQueryModels.BoardDetail import me.nettee.board.application.usecase.BoardReadByStatusesUseCase import me.nettee.board.application.usecase.BoardReadUseCase +import me.nettee.core.config.JacksonTestConfig import org.junit.jupiter.api.extension.ExtendWith import org.mockito.ArgumentMatchers.any import org.mockito.ArgumentMatchers.argThat import org.mockito.Mockito.`when` import org.springframework.beans.factory.annotation.Autowired import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest -import org.springframework.boot.test.context.TestConfiguration -import org.springframework.context.annotation.Bean +import org.springframework.context.annotation.Import import org.springframework.data.domain.Page import org.springframework.data.domain.PageImpl import org.springframework.data.domain.Pageable import org.springframework.http.HttpStatus import org.springframework.http.MediaType -import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter import org.springframework.test.context.bean.override.mockito.MockitoBean import org.springframework.test.context.junit.jupiter.SpringExtension import org.springframework.test.web.servlet.MockMvc @@ -35,6 +31,7 @@ import java.time.Instant @WebMvcTest(BoardQueryApi::class) @ExtendWith(SpringExtension::class) +@Import(JacksonTestConfig::class) class BoardQueryApiTest( @MockitoBean private val boardReadUseCase: BoardReadUseCase, @MockitoBean private val boardReadByStatusesUseCase: BoardReadByStatusesUseCase, @@ -107,11 +104,6 @@ class BoardQueryApiTest( ) -> Page beforeSpec { - val objectMapper = ObjectMapper().apply { - registerModule(JavaTimeModule()) - setSerializationInclusion(JsonInclude.Include.NON_NULL) - } - boardReadSummaryModelPage = { boardList, pageable, boardStatus -> val filteredBoards = boardList .takeIf { it.isNotEmpty() } @@ -137,9 +129,6 @@ class BoardQueryApiTest( ) } - val jsonResult = objectMapper.writeValueAsString(boardDetailWithNull) - val nonNullResponse = objectMapper.readValue(jsonResult, BoardDetail::class.java) - `when`(boardReadUseCase.getBoard(1L)).thenAnswer { boardDetail } `when`(boardReadUseCase.getBoard(2L)).thenAnswer { boardDetailWithNull } `when`(boardReadUseCase.getBoard(argThat { it != 1L && it != 2L })).thenThrow(ResponseStatusException(HttpStatus.NOT_FOUND)) @@ -154,21 +143,6 @@ class BoardQueryApiTest( boardReadSummaryModelPage(boardList, pageable, statuses) } `when`(boardDtoMapper.toDtoDetail(boardDetail)).thenReturn(BoardDetailResponse(boardDetail)) - `when`(boardDtoMapper.toDtoDetail(boardDetailWithNull)).thenReturn(BoardDetailResponse(nonNullResponse)) - } -}) { - @TestConfiguration - class JacksonTestConfig { - @Bean - fun objectMapper(): ObjectMapper { - return ObjectMapper() - .registerModule(JavaTimeModule()) - .setSerializationInclusion(JsonInclude.Include.NON_NULL) - } - - @Bean - fun mappingJackson2HttpMessageConverter(objectMapper: ObjectMapper): MappingJackson2HttpMessageConverter { - return MappingJackson2HttpMessageConverter(objectMapper) - } + `when`(boardDtoMapper.toDtoDetail(boardDetailWithNull)).thenReturn(BoardDetailResponse(boardDetailWithNull)) } -} +}) diff --git a/src/test/kotlin/me/nettee/core/config/JacksonTestConfig.kt b/src/test/kotlin/me/nettee/core/config/JacksonTestConfig.kt new file mode 100644 index 0000000..d603446 --- /dev/null +++ b/src/test/kotlin/me/nettee/core/config/JacksonTestConfig.kt @@ -0,0 +1,23 @@ +package me.nettee.core.config + +import com.fasterxml.jackson.annotation.JsonInclude +import com.fasterxml.jackson.databind.ObjectMapper +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule +import org.springframework.boot.test.context.TestConfiguration +import org.springframework.context.annotation.Bean +import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter + +@TestConfiguration +class JacksonTestConfig { + @Bean + fun objectMapper(): ObjectMapper { + return ObjectMapper() + .registerModule(JavaTimeModule()) + .setSerializationInclusion(JsonInclude.Include.NON_NULL) + } + + @Bean + fun mappingJackson2HttpMessageConverter(objectMapper: ObjectMapper): MappingJackson2HttpMessageConverter { + return MappingJackson2HttpMessageConverter(objectMapper) + } +} \ No newline at end of file