refactor: 새로 정의한 API 테스트 클래스를 바탕으로 MemberControllerTest 수정

This commit is contained in:
이상진 2025-07-15 16:13:38 +09:00
parent 6f87780344
commit be9a6bc80e

View File

@ -1,17 +1,21 @@
package roomescape.member.controller package roomescape.member.controller
import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
import io.kotest.assertions.assertSoftly import io.kotest.assertions.assertSoftly
import io.kotest.matchers.collections.shouldContainAll import io.kotest.matchers.collections.shouldContainAll
import io.kotest.matchers.shouldBe import io.kotest.matchers.shouldBe
import io.mockk.every import io.mockk.every
import io.restassured.module.kotlin.extensions.Extract import org.springframework.beans.factory.annotation.Autowired
import org.hamcrest.Matchers.containsString import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest
import org.springframework.test.web.servlet.MockMvc
import roomescape.member.web.MemberController
import roomescape.member.web.MembersResponse
import roomescape.util.MemberFixture import roomescape.util.MemberFixture
import roomescape.util.RoomescapeApiTest import roomescape.util.RoomescapeApiTest
import roomescape.member.web.MembersResponse
class MemberControllerTest : RoomescapeApiTest() { @WebMvcTest(controllers = [MemberController::class])
class MemberControllerTest(
@Autowired private val mockMvc: MockMvc
) : RoomescapeApiTest() {
init { init {
given("GET /members 요청을") { given("GET /members 요청을") {
@ -24,16 +28,21 @@ class MemberControllerTest : RoomescapeApiTest() {
) )
`when`("관리자가 보내면") { `when`("관리자가 보내면") {
setUpAdmin() loginAsAdmin()
then("성공한다.") { then("성공한다.") {
val result: Any = runGetTest(endpoint) { val result: String = runGetTest(
statusCode(200) mockMvc = mockMvc,
} Extract { endpoint = endpoint,
path("data") log = true
} ) {
status { isOk() }
}.andReturn().response.contentAsString
val response: MembersResponse = jacksonObjectMapper().convertValue(result, MembersResponse::class.java) val response: MembersResponse = readValue(
responseJson = result,
valueType = MembersResponse::class.java
)
assertSoftly(response.members) { assertSoftly(response.members) {
it.size shouldBe 3 it.size shouldBe 3
@ -44,20 +53,32 @@ class MemberControllerTest : RoomescapeApiTest() {
`when`("관리자가 아니면 로그인 페이지로 이동한다.") { `when`("관리자가 아니면 로그인 페이지로 이동한다.") {
then("비회원") { then("비회원") {
setUpNotLoggedIn() doNotLogin()
runGetTest(endpoint) { runGetTest(
statusCode(200) mockMvc = mockMvc,
body(containsString("<title>Login</title>")) endpoint = endpoint,
log = true
) {
status { is3xxRedirection() }
header {
string("Location", "/login")
}
} }
} }
then("일반 회원") { then("일반 회원") {
setUpUser() loginAsUser()
runGetTest(endpoint) { runGetTest(
statusCode(200) mockMvc = mockMvc,
body(containsString("<title>Login</title>")) endpoint = endpoint,
log = true
) {
status { is3xxRedirection() }
header {
string("Location", "/login")
}
} }
} }
} }