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
import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
import io.kotest.assertions.assertSoftly
import io.kotest.matchers.collections.shouldContainAll
import io.kotest.matchers.shouldBe
import io.mockk.every
import io.restassured.module.kotlin.extensions.Extract
import org.hamcrest.Matchers.containsString
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.member.web.MemberController
import roomescape.member.web.MembersResponse
import roomescape.util.MemberFixture
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 {
given("GET /members 요청을") {
@ -24,16 +28,21 @@ class MemberControllerTest : RoomescapeApiTest() {
)
`when`("관리자가 보내면") {
setUpAdmin()
loginAsAdmin()
then("성공한다.") {
val result: Any = runGetTest(endpoint) {
statusCode(200)
} Extract {
path("data")
}
val result: String = runGetTest(
mockMvc = mockMvc,
endpoint = endpoint,
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) {
it.size shouldBe 3
@ -44,20 +53,32 @@ class MemberControllerTest : RoomescapeApiTest() {
`when`("관리자가 아니면 로그인 페이지로 이동한다.") {
then("비회원") {
setUpNotLoggedIn()
doNotLogin()
runGetTest(endpoint) {
statusCode(200)
body(containsString("<title>Login</title>"))
runGetTest(
mockMvc = mockMvc,
endpoint = endpoint,
log = true
) {
status { is3xxRedirection() }
header {
string("Location", "/login")
}
}
}
then("일반 회원") {
setUpUser()
loginAsUser()
runGetTest(endpoint) {
statusCode(200)
body(containsString("<title>Login</title>"))
runGetTest(
mockMvc = mockMvc,
endpoint = endpoint,
log = true
) {
status { is3xxRedirection() }
header {
string("Location", "/login")
}
}
}
}