generated from pricelees/issue-pr-template
test: 회원 API 테스트 코틀린 변환
This commit is contained in:
parent
3763e3c8b5
commit
7143948fd5
@ -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("<title>Login</title>"))
|
||||
}
|
||||
}
|
||||
|
||||
private String getAdminAccessTokenCookieByLogin(final String email, final String password) {
|
||||
memberRepository.save(new Member("이름", email, password, Role.ADMIN));
|
||||
then("일반 회원") {
|
||||
setUpUser()
|
||||
|
||||
Map<String, String> 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("<title>Login</title>"))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user