generated from pricelees/issue-pr-template
[#9] API 테스트를 @SpringbootTest에서 @WebMvcTest 기반으로 전환 #10
@ -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")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user