diff --git a/src/test/java/roomescape/member/controller/MemberControllerTest.kt b/src/test/java/roomescape/member/controller/MemberControllerTest.kt index 59e5b3a2..7f24f6d8 100644 --- a/src/test/java/roomescape/member/controller/MemberControllerTest.kt +++ b/src/test/java/roomescape/member/controller/MemberControllerTest.kt @@ -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("Login")) + runGetTest( + mockMvc = mockMvc, + endpoint = endpoint, + log = true + ) { + status { is3xxRedirection() } + header { + string("Location", "/login") + } } } then("일반 회원") { - setUpUser() + loginAsUser() - runGetTest(endpoint) { - statusCode(200) - body(containsString("Login")) + runGetTest( + mockMvc = mockMvc, + endpoint = endpoint, + log = true + ) { + status { is3xxRedirection() } + header { + string("Location", "/login") + } } } }