generated from pricelees/issue-pr-template
89 lines
3.1 KiB
Kotlin
89 lines
3.1 KiB
Kotlin
package roomescape.member.controller
|
|
|
|
import io.kotest.assertions.assertSoftly
|
|
import io.kotest.matchers.collections.shouldContainAll
|
|
import io.kotest.matchers.shouldBe
|
|
import io.mockk.every
|
|
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.MemberRetrieveListResponse
|
|
import roomescape.util.MemberFixture
|
|
import roomescape.util.RoomescapeApiTest
|
|
import kotlin.random.Random
|
|
|
|
@WebMvcTest(controllers = [MemberController::class])
|
|
class MemberControllerTest(
|
|
@Autowired private val mockMvc: MockMvc
|
|
) : RoomescapeApiTest() {
|
|
|
|
init {
|
|
given("GET /members 요청을") {
|
|
val endpoint = "/members"
|
|
|
|
every { memberRepository.findAll() } returns listOf(
|
|
MemberFixture.create(id = Random.nextLong(), name = "name1"),
|
|
MemberFixture.create(id = Random.nextLong(), name = "name2"),
|
|
MemberFixture.create(id = Random.nextLong(), name = "name3"),
|
|
)
|
|
|
|
`when`("관리자가 보내면") {
|
|
loginAsAdmin()
|
|
|
|
then("성공한다.") {
|
|
val result: String = runGetTest(
|
|
mockMvc = mockMvc,
|
|
endpoint = endpoint,
|
|
log = true
|
|
) {
|
|
status { isOk() }
|
|
}.andReturn().response.contentAsString
|
|
|
|
val response: MemberRetrieveListResponse = readValue(
|
|
responseJson = result,
|
|
valueType = MemberRetrieveListResponse::class.java
|
|
)
|
|
|
|
assertSoftly(response.members) {
|
|
it.size shouldBe 3
|
|
it.map { m -> m.name } shouldContainAll listOf("name1", "name2", "name3")
|
|
}
|
|
}
|
|
}
|
|
|
|
`when`("관리자가 아니면 로그인 페이지로 이동한다.") {
|
|
then("비회원") {
|
|
doNotLogin()
|
|
|
|
runGetTest(
|
|
mockMvc = mockMvc,
|
|
endpoint = endpoint,
|
|
log = true
|
|
) {
|
|
status { is3xxRedirection() }
|
|
header {
|
|
string("Location", "/login")
|
|
}
|
|
}
|
|
}
|
|
|
|
then("일반 회원") {
|
|
loginAsUser()
|
|
|
|
runGetTest(
|
|
mockMvc = mockMvc,
|
|
endpoint = endpoint,
|
|
log = true
|
|
) {
|
|
status { is3xxRedirection() }
|
|
header {
|
|
string("Location", "/login")
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|