From 7143948fd5671d79306b393568815c1d56f61ea8 Mon Sep 17 00:00:00 2001 From: pricelees Date: Sat, 12 Jul 2025 19:57:47 +0900 Subject: [PATCH] =?UTF-8?q?test:=20=ED=9A=8C=EC=9B=90=20API=20=ED=85=8C?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=20=EC=BD=94=ED=8B=80=EB=A6=B0=20=EB=B3=80?= =?UTF-8?q?=ED=99=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../member/controller/MemberControllerTest.kt | 114 +++++++++--------- 1 file changed, 55 insertions(+), 59 deletions(-) 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("Login")) + } + } - private String getAdminAccessTokenCookieByLogin(final String email, final String password) { - memberRepository.save(new Member("이름", email, password, Role.ADMIN)); + then("일반 회원") { + setUpUser() - Map loginParams = Map.of( - "email", email, - "password", password - ); - - String accessToken = RestAssured.given().log().all() - .contentType(ContentType.JSON) - .port(port) - .body(loginParams) - .when().post("/login") - .then().log().all().extract().cookie("accessToken"); - - return "accessToken=" + accessToken; - } + runTest(endpoint) { + statusCode(200) + body(containsString("Login")) + } + } + } + } + } }