refactor: 기존 테스트에 새로 추가된 MemberFinder, MemberWriter 반영

This commit is contained in:
이상진 2025-08-04 17:26:52 +09:00
parent 35b7f06c2d
commit 2a9484e5dd
2 changed files with 28 additions and 22 deletions

View File

@ -1,15 +1,19 @@
package roomescape.member.controller
import com.ninjasquad.springmockk.MockkBean
import com.ninjasquad.springmockk.SpykBean
import io.kotest.assertions.assertSoftly
import io.kotest.matchers.collections.shouldContainAll
import io.kotest.matchers.shouldBe
import io.mockk.every
import io.mockk.mockk
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest
import org.springframework.test.web.servlet.MockMvc
import roomescape.auth.exception.AuthErrorCode
import roomescape.member.business.MemberService
import roomescape.member.exception.MemberErrorCode
import roomescape.member.exception.MemberException
import roomescape.member.implement.MemberWriter
import roomescape.member.infrastructure.persistence.Role
import roomescape.member.web.MemberController
import roomescape.member.web.MemberRetrieveListResponse
@ -23,11 +27,18 @@ class MemberControllerTest(
@Autowired private val mockMvc: MockMvc
) : RoomescapeApiTest() {
@SpykBean
private lateinit var memberService: MemberService
@MockkBean
private lateinit var memberWriter: MemberWriter
init {
given("GET /members 요청을") {
val endpoint = "/members"
every { memberRepository.findAll() } returns listOf(
every { memberFinder.findAll() } returns listOf(
MemberFixture.create(id = Random.nextLong(), name = "name1"),
MemberFixture.create(id = Random.nextLong(), name = "name2"),
MemberFixture.create(id = Random.nextLong(), name = "name3"),
@ -96,11 +107,7 @@ class MemberControllerTest(
)
`when`("같은 이메일이 없으면") {
every {
memberRepository.existsByEmail(request.email)
} returns false
every {
memberRepository.save(any())
memberWriter.create(any(), any(), any(), any())
} returns MemberFixture.create(
id = 1,
name = request.name,
@ -124,8 +131,8 @@ class MemberControllerTest(
`when`("같은 이메일이 있으면") {
every {
memberRepository.existsByEmail(request.email)
} returns true
memberWriter.create(request.name, request.email, request.password, Role.MEMBER)
} throws MemberException(MemberErrorCode.DUPLICATE_EMAIL)
then("에러 응답") {
val expectedError = MemberErrorCode.DUPLICATE_EMAIL
@ -138,7 +145,6 @@ class MemberControllerTest(
status { isEqualTo(expectedError.httpStatus.value()) }
jsonPath("$.code") { value(expectedError.errorCode) }
}
}
}
}

View File

@ -11,7 +11,6 @@ import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Import
import org.springframework.context.annotation.Primary
import org.springframework.data.jpa.mapping.JpaMetamodelMappingContext
import org.springframework.data.repository.findByIdOrNull
import org.springframework.http.HttpHeaders
import org.springframework.http.MediaType
import org.springframework.test.web.servlet.*
@ -22,7 +21,9 @@ import roomescape.auth.web.support.AuthInterceptor
import roomescape.auth.web.support.MemberIdResolver
import roomescape.common.config.JacksonConfig
import roomescape.common.log.ApiLogMessageConverter
import roomescape.member.business.MemberService
import roomescape.member.exception.MemberErrorCode
import roomescape.member.exception.MemberException
import roomescape.member.implement.MemberFinder
import roomescape.member.infrastructure.persistence.MemberEntity
import roomescape.member.infrastructure.persistence.MemberRepository
import roomescape.util.MemberFixture.NOT_LOGGED_IN_USERID
@ -37,14 +38,14 @@ abstract class RoomescapeApiTest : BehaviorSpec() {
@SpykBean
private lateinit var memberIdResolver: MemberIdResolver
@SpykBean
lateinit var memberService: MemberService
@MockkBean
private lateinit var memberRepository: MemberRepository
@SpykBean
lateinit var apiLogMessageConverter: ApiLogMessageConverter
@MockkBean
lateinit var memberRepository: MemberRepository
@SpykBean
lateinit var memberFinder: MemberFinder
@MockkBean
lateinit var jwtHandler: JwtHandler
@ -96,8 +97,7 @@ abstract class RoomescapeApiTest : BehaviorSpec() {
jwtHandler.getMemberIdFromToken(any())
} returns admin.id!!
every { memberRepository.existsById(admin.id!!) } returns true
every { memberRepository.findByIdOrNull(admin.id!!) } returns admin
every { memberFinder.findById(admin.id!!) } returns admin
}
fun loginAsUser() {
@ -105,8 +105,7 @@ abstract class RoomescapeApiTest : BehaviorSpec() {
jwtHandler.getMemberIdFromToken(any())
} returns user.id!!
every { memberRepository.existsById(user.id!!) } returns true
every { memberRepository.findByIdOrNull(user.id!!) } returns user
every { memberFinder.findById(user.id!!) } returns user
}
fun doNotLogin() {
@ -114,8 +113,9 @@ abstract class RoomescapeApiTest : BehaviorSpec() {
jwtHandler.getMemberIdFromToken(any())
} throws AuthException(AuthErrorCode.INVALID_TOKEN)
every { memberRepository.existsById(NOT_LOGGED_IN_USERID) } returns false
every { memberRepository.findByIdOrNull(NOT_LOGGED_IN_USERID) } returns null
every {
memberFinder.findById(NOT_LOGGED_IN_USERID)
} throws MemberException(MemberErrorCode.MEMBER_NOT_FOUND)
}
fun <T> MvcResult.readValue(valueType: Class<T>): T = this.response.contentAsString