diff --git a/src/test/java/roomescape/member/controller/MemberControllerTest.kt b/src/test/java/roomescape/member/controller/MemberControllerTest.kt index 80744610..2297c194 100644 --- a/src/test/java/roomescape/member/controller/MemberControllerTest.kt +++ b/src/test/java/roomescape/member/controller/MemberControllerTest.kt @@ -1,72 +1,68 @@ -package roomescape.member.controller; +package roomescape.member.controller -import java.util.Map; +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 roomescape.common.MemberFixture +import roomescape.common.NoSqlInitialize +import roomescape.common.RoomescapeApiTest +import roomescape.member.web.MembersResponse -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.web.server.LocalServerPort; -import org.springframework.test.context.jdbc.Sql; +@NoSqlInitialize +class MemberControllerTest : RoomescapeApiTest() { -import io.restassured.RestAssured; -import io.restassured.http.ContentType; -import io.restassured.http.Header; -import roomescape.member.infrastructure.entity.Member; -import roomescape.member.infrastructure.entity.Role; -import roomescape.member.infrastructure.entity.MemberRepository; + init { + given("GET /members 요청을") { + val endpoint = "/members" -@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) -@Sql(scripts = "/truncate.sql", executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD) -class MemberControllerTest { + every { memberRepository.findAll() } returns listOf( + MemberFixture.create(name = "name1"), + MemberFixture.create(name = "name2"), + MemberFixture.create(name = "name3"), + ) - @Autowired - private MemberRepository memberRepository; + `when`("관리자가 보내면") { + setUpAdmin() - @LocalServerPort - private int port; + then("성공한다.") { + val result: Any = runTest(endpoint) { + statusCode(200) + } Extract { + path("data") + } - @BeforeEach - void setUp() { - RestAssured.port = port; - } + val response: MembersResponse = jacksonObjectMapper().convertValue(result, MembersResponse::class.java) - @Test - @DisplayName("/members 로 GET 요청을 보내면 회원 정보와 200 OK 를 받는다.") - void getAdminPage() { - // given - String accessTokenCookie = getAdminAccessTokenCookieByLogin("admin@admin.com", "12341234"); + assertSoftly(response.members) { + it.size shouldBe 3 + it.map { m -> m.name } shouldContainAll listOf("name1", "name2", "name3") + } + } + } - memberRepository.save(new Member("이름1", "test@test.com", "password", Role.MEMBER)); - memberRepository.save(new Member("이름2", "test@test.com", "password", Role.MEMBER)); - memberRepository.save(new Member("이름3", "test@test.com", "password", Role.MEMBER)); - memberRepository.save(new Member("이름4", "test@test.com", "password", Role.MEMBER)); + `when`("관리자가 아니면 로그인 페이지로 이동한다.") { + then("비회원") { + setUpNotLoggedIn() - // when & then - RestAssured.given().log().all() - .port(port) - .header(new Header("Cookie", accessTokenCookie)) - .when().get("/members") - .then().log().all() - .statusCode(200); - } + runTest(endpoint) { + statusCode(200) + body(containsString("