diff --git a/src/test/kotlin/roomescape/auth/AuthApiTest.kt b/src/test/kotlin/roomescape/auth/AuthApiTest.kt index fdacef30..6d3c9173 100644 --- a/src/test/kotlin/roomescape/auth/AuthApiTest.kt +++ b/src/test/kotlin/roomescape/auth/AuthApiTest.kt @@ -38,7 +38,7 @@ class AuthApiTest( AdminFixture.hqDefault ).forEach { test("${it.type} 타입 관리자") { - val admin = authUtil.createAdmin(it) + val admin = testAuthUtil.createAdmin(it) runLoginSuccessTest( id = admin.id, @@ -56,7 +56,7 @@ class AuthApiTest( } test("회원") { - val user: UserEntity = authUtil.signup(UserFixture.createRequest) + val user: UserEntity = testAuthUtil.signup(UserFixture.createRequest) runLoginSuccessTest( id = user.id, @@ -73,7 +73,7 @@ class AuthApiTest( context("실패 응답") { context("계정이 맞으면 로그인 실패 이력을 남긴다.") { test("비밀번호가 틀린 경우") { - val admin = authUtil.createAdmin(AdminFixture.default) + val admin = testAuthUtil.createAdmin(AdminFixture.default) val request = LoginRequest(admin.account, "wrong_password", PrincipalType.ADMIN) runTest( @@ -96,7 +96,7 @@ class AuthApiTest( } test("토큰 생성 과정에서 오류가 발생하는 경우") { - val admin = authUtil.createAdmin(AdminFixture.default) + val admin = testAuthUtil.createAdmin(AdminFixture.default) val request = LoginRequest(admin.account, admin.password, PrincipalType.ADMIN) every { @@ -125,7 +125,7 @@ class AuthApiTest( context("계정이 일치하지 않으면 로그인 실패 이력을 남기지 않는다.") { test("회원") { - val user = authUtil.signup(UserFixture.createRequest) + val user = testAuthUtil.signup(UserFixture.createRequest) val invalidEmail = "test@email.com".also { it shouldNotBe user.email } @@ -149,7 +149,7 @@ class AuthApiTest( } test("관리자") { - val admin = authUtil.createAdmin(AdminFixture.default) + val admin = testAuthUtil.createAdmin(AdminFixture.default) val invalidAccount = "invalid".also { it shouldNotBe admin.account } diff --git a/src/test/kotlin/roomescape/auth/FailOnSaveLoginHistoryTest.kt b/src/test/kotlin/roomescape/auth/FailOnSaveLoginHistoryTest.kt index da8a9aa6..b4d1e724 100644 --- a/src/test/kotlin/roomescape/auth/FailOnSaveLoginHistoryTest.kt +++ b/src/test/kotlin/roomescape/auth/FailOnSaveLoginHistoryTest.kt @@ -27,7 +27,7 @@ class FailOnSaveLoginHistoryTest( } test("회원") { - val user = authUtil.signup(UserFixture.createRequest) + val user = testAuthUtil.signup(UserFixture.createRequest) val request = LoginRequest(user.email, user.password, PrincipalType.USER) runTest( @@ -44,7 +44,7 @@ class FailOnSaveLoginHistoryTest( } test("관리자") { - val admin = authUtil.createAdmin(AdminFixture.default) + val admin = testAuthUtil.createAdmin(AdminFixture.default) val request = LoginRequest(admin.account, admin.password, PrincipalType.ADMIN) runTest( diff --git a/src/test/kotlin/roomescape/payment/PaymentAPITest.kt b/src/test/kotlin/roomescape/payment/PaymentAPITest.kt index 834b8caf..6949ac5a 100644 --- a/src/test/kotlin/roomescape/payment/PaymentAPITest.kt +++ b/src/test/kotlin/roomescape/payment/PaymentAPITest.kt @@ -43,7 +43,7 @@ class PaymentAPITest( test("관리자") { runExceptionTest( - token = authUtil.defaultStoreAdminLogin(), + token = testAuthUtil.defaultStoreAdminLogin(), method = HttpMethod.POST, endpoint = endpoint, expectedErrorCode = AuthErrorCode.ACCESS_DENIED @@ -165,8 +165,8 @@ class PaymentAPITest( PaymentMethod.entries.filter { it !in supportedMethod }.forEach { test("결제 수단: ${it.koreanName}") { val reservation = dummyInitializer.createConfirmReservation( - adminToken = authUtil.defaultStoreAdminLogin(), - reserverToken = authUtil.defaultUserLogin() + adminToken = testAuthUtil.defaultStoreAdminLogin(), + reserverToken = testAuthUtil.defaultUserLogin() ) val request = PaymentFixture.confirmRequest @@ -183,7 +183,7 @@ class PaymentAPITest( ) runExceptionTest( - token = authUtil.defaultUserLogin(), + token = testAuthUtil.defaultUserLogin(), method = HttpMethod.POST, endpoint = "/payments?reservationId=${reservation.id}", requestBody = PaymentFixture.confirmRequest, @@ -209,7 +209,7 @@ class PaymentAPITest( test("관리자") { runExceptionTest( - token = authUtil.defaultStoreAdminLogin(), + token = testAuthUtil.defaultStoreAdminLogin(), method = HttpMethod.POST, endpoint = endpoint, requestBody = PaymentFixture.cancelRequest, @@ -219,10 +219,10 @@ class PaymentAPITest( } test("정상 취소") { - val userToken = authUtil.defaultUserLogin() + val userToken = testAuthUtil.defaultUserLogin() val confirmRequest = PaymentFixture.confirmRequest val reservation = dummyInitializer.createConfirmReservation( - adminToken = authUtil.defaultStoreAdminLogin(), + adminToken = testAuthUtil.defaultStoreAdminLogin(), reserverToken = userToken ) @@ -266,9 +266,9 @@ class PaymentAPITest( } test("예약에 대한 결제 정보가 없으면 실패한다.") { - val userToken = authUtil.defaultUserLogin() + val userToken = testAuthUtil.defaultUserLogin() val reservation = dummyInitializer.createConfirmReservation( - adminToken = authUtil.defaultStoreAdminLogin(), + adminToken = testAuthUtil.defaultStoreAdminLogin(), reserverToken = userToken, ) @@ -312,8 +312,8 @@ class PaymentAPITest( val request = PaymentFixture.confirmRequest.copy(paymentKey = paymentKey, amount = amount) val reservation: ReservationEntity = dummyInitializer.createPendingReservation( - adminToken = authUtil.defaultStoreAdminLogin(), - reserverToken = authUtil.defaultUserLogin(), + adminToken = testAuthUtil.defaultStoreAdminLogin(), + reserverToken = testAuthUtil.defaultUserLogin(), ) val method = if (easyPayDetail != null) { @@ -335,7 +335,7 @@ class PaymentAPITest( } returns clientResponse runTest( - token = authUtil.defaultUserLogin(), + token = testAuthUtil.defaultUserLogin(), using = { body(request) }, diff --git a/src/test/kotlin/roomescape/reservation/ReservationApiTest.kt b/src/test/kotlin/roomescape/reservation/ReservationApiTest.kt index 2db18f1a..54df0d89 100644 --- a/src/test/kotlin/roomescape/reservation/ReservationApiTest.kt +++ b/src/test/kotlin/roomescape/reservation/ReservationApiTest.kt @@ -55,7 +55,7 @@ class ReservationApiTest( test("관리자") { runExceptionTest( - token = authUtil.defaultStoreAdminLogin(), + token = testAuthUtil.defaultStoreAdminLogin(), method = HttpMethod.POST, endpoint = endpoint, expectedErrorCode = AuthErrorCode.ACCESS_DENIED @@ -66,13 +66,13 @@ class ReservationApiTest( test("정상 생성") { val schedule: ScheduleEntity = dummyInitializer.createSchedule( - adminToken = authUtil.defaultStoreAdminLogin(), + adminToken = testAuthUtil.defaultStoreAdminLogin(), request = ScheduleFixture.createRequest, status = ScheduleStatus.HOLD ) runTest( - token = authUtil.defaultUserLogin(), + token = testAuthUtil.defaultUserLogin(), using = { body(commonRequest.copy(scheduleId = schedule.id)) }, @@ -95,13 +95,13 @@ class ReservationApiTest( test("예약을 생성할 때 해당 일정이 ${ScheduleStatus.HOLD} 상태가 아니면 실패한다.") { val schedule: ScheduleEntity = dummyInitializer.createSchedule( - adminToken = authUtil.defaultStoreAdminLogin(), + adminToken = testAuthUtil.defaultStoreAdminLogin(), request = ScheduleFixture.createRequest, status = ScheduleStatus.AVAILABLE ) runTest( - token = authUtil.defaultUserLogin(), + token = testAuthUtil.defaultUserLogin(), using = { body(commonRequest.copy(scheduleId = schedule.id)) }, @@ -116,7 +116,7 @@ class ReservationApiTest( } test("예약 인원이 테마의 최소 인원보다 작거나 최대 인원보다 많으면 실패한다.") { - val adminToken = authUtil.defaultStoreAdminLogin() + val adminToken = testAuthUtil.defaultStoreAdminLogin() val theme: ThemeEntity = dummyInitializer.createTheme( adminToken = adminToken, request = ThemeFixture.createRequest @@ -128,7 +128,7 @@ class ReservationApiTest( status = ScheduleStatus.HOLD ) - val userToken = authUtil.defaultUserLogin() + val userToken = testAuthUtil.defaultUserLogin() runExceptionTest( token = userToken, @@ -156,7 +156,7 @@ class ReservationApiTest( context("필수 입력값이 입력되지 않으면 실패한다.") { test("예약자명") { runExceptionTest( - token = authUtil.defaultUserLogin(), + token = testAuthUtil.defaultUserLogin(), method = HttpMethod.POST, endpoint = endpoint, requestBody = commonRequest.copy(reserverName = ""), @@ -166,7 +166,7 @@ class ReservationApiTest( test("예약자 연락처") { runExceptionTest( - token = authUtil.defaultUserLogin(), + token = testAuthUtil.defaultUserLogin(), method = HttpMethod.POST, endpoint = endpoint, requestBody = commonRequest.copy(reserverContact = ""), @@ -190,7 +190,7 @@ class ReservationApiTest( test("관리자") { runExceptionTest( - token = authUtil.defaultStoreAdminLogin(), + token = testAuthUtil.defaultStoreAdminLogin(), method = HttpMethod.POST, endpoint = endpoint, expectedErrorCode = AuthErrorCode.ACCESS_DENIED @@ -199,10 +199,10 @@ class ReservationApiTest( } test("정상 응답") { - val userToken = authUtil.defaultUserLogin() + val userToken = testAuthUtil.defaultUserLogin() val reservation: ReservationEntity = dummyInitializer.createPendingReservation( - adminToken = authUtil.defaultStoreAdminLogin(), + adminToken = testAuthUtil.defaultStoreAdminLogin(), reserverToken = userToken, ) @@ -228,7 +228,7 @@ class ReservationApiTest( test("예약이 없으면 실패한다.") { runExceptionTest( - token = authUtil.defaultUserLogin(), + token = testAuthUtil.defaultUserLogin(), method = HttpMethod.POST, endpoint = "/reservations/$INVALID_PK/confirm", expectedErrorCode = ReservationErrorCode.RESERVATION_NOT_FOUND @@ -250,7 +250,7 @@ class ReservationApiTest( test("관리자") { runExceptionTest( - token = authUtil.defaultStoreAdminLogin(), + token = testAuthUtil.defaultStoreAdminLogin(), method = HttpMethod.POST, endpoint = endpoint, expectedErrorCode = AuthErrorCode.ACCESS_DENIED @@ -259,10 +259,10 @@ class ReservationApiTest( } test("정상 응답") { - val userToken = authUtil.defaultUserLogin() + val userToken = testAuthUtil.defaultUserLogin() val reservation: ReservationEntity = dummyInitializer.createConfirmReservation( - adminToken = authUtil.defaultStoreAdminLogin(), + adminToken = testAuthUtil.defaultStoreAdminLogin(), reserverToken = userToken, ) @@ -291,7 +291,7 @@ class ReservationApiTest( test("예약이 없으면 실패한다.") { runExceptionTest( - token = authUtil.defaultUserLogin(), + token = testAuthUtil.defaultUserLogin(), method = HttpMethod.POST, endpoint = "/reservations/$INVALID_PK/cancel", requestBody = ReservationCancelRequest(cancelReason = "test"), @@ -301,12 +301,12 @@ class ReservationApiTest( test("다른 회원의 예약을 취소할 수 없다.") { val reservation: ReservationEntity = dummyInitializer.createConfirmReservation( - adminToken = authUtil.defaultStoreAdminLogin(), - reserverToken = authUtil.defaultUserLogin(), + adminToken = testAuthUtil.defaultStoreAdminLogin(), + reserverToken = testAuthUtil.defaultUserLogin(), ) val otherUserToken = - authUtil.userLogin(UserFixture.createUser(email = "test@test.com", phone = "01011111111")) + testAuthUtil.userLogin(UserFixture.createUser(email = "test@test.com", phone = "01011111111")) runExceptionTest( token = otherUserToken, @@ -332,7 +332,7 @@ class ReservationApiTest( test("관리자") { runExceptionTest( - token = authUtil.defaultStoreAdminLogin(), + token = testAuthUtil.defaultStoreAdminLogin(), method = HttpMethod.POST, endpoint = endpoint, expectedErrorCode = AuthErrorCode.ACCESS_DENIED @@ -341,8 +341,8 @@ class ReservationApiTest( } test("정상 응답") { - val userToken = authUtil.defaultUserLogin() - val adminToken = authUtil.defaultStoreAdminLogin() + val userToken = testAuthUtil.defaultUserLogin() + val adminToken = testAuthUtil.defaultStoreAdminLogin() for (i in 1..3) { dummyInitializer.createConfirmReservation( @@ -398,7 +398,7 @@ class ReservationApiTest( test("관리자") { runExceptionTest( - token = authUtil.defaultStoreAdminLogin(), + token = testAuthUtil.defaultStoreAdminLogin(), method = HttpMethod.POST, endpoint = endpoint, expectedErrorCode = AuthErrorCode.ACCESS_DENIED @@ -413,8 +413,8 @@ class ReservationApiTest( beforeTest { reservation = dummyInitializer.createConfirmReservation( - adminToken = authUtil.defaultStoreAdminLogin(), - reserverToken = authUtil.defaultUserLogin(), + adminToken = testAuthUtil.defaultStoreAdminLogin(), + reserverToken = testAuthUtil.defaultUserLogin(), ) } @@ -480,7 +480,7 @@ class ReservationApiTest( val cancelReason = "테스트입니다." - val user = authUtil.defaultUser() + val user = testAuthUtil.defaultUser() dummyInitializer.cancelPayment( userId = user.id, @@ -547,7 +547,7 @@ class ReservationApiTest( test("예약이 없으면 실패한다.") { runExceptionTest( - token = authUtil.defaultUserLogin(), + token = testAuthUtil.defaultUserLogin(), method = HttpMethod.GET, endpoint = "/reservations/$INVALID_PK/detail", expectedErrorCode = ReservationErrorCode.RESERVATION_NOT_FOUND @@ -556,12 +556,12 @@ class ReservationApiTest( test("예약은 있지만, 결제 정보를 찾을 수 없으면 null로 지정한다.") { val reservation = dummyInitializer.createConfirmReservation( - adminToken = authUtil.defaultStoreAdminLogin(), - reserverToken = authUtil.defaultUserLogin(), + adminToken = testAuthUtil.defaultStoreAdminLogin(), + reserverToken = testAuthUtil.defaultUserLogin(), ) runTest( - token = authUtil.defaultUserLogin(), + token = testAuthUtil.defaultUserLogin(), on = { get("/reservations/${reservation.id}/detail") }, @@ -574,8 +574,8 @@ class ReservationApiTest( test("예약과 결제는 있지만, 결제 세부 내역이 없으면 세부 내역만 null로 지정한다..") { val reservation = dummyInitializer.createConfirmReservation( - adminToken = authUtil.defaultStoreAdminLogin(), - reserverToken = authUtil.defaultUserLogin(), + adminToken = testAuthUtil.defaultStoreAdminLogin(), + reserverToken = testAuthUtil.defaultUserLogin(), ) dummyInitializer.createPayment( @@ -586,7 +586,7 @@ class ReservationApiTest( } runTest( - token = authUtil.defaultUserLogin(), + token = testAuthUtil.defaultUserLogin(), on = { get("/reservations/${reservation.id}/detail") }, @@ -621,7 +621,7 @@ class ReservationApiTest( reservation: ReservationEntity ): LinkedHashMap { return runTest( - token = authUtil.defaultUserLogin(), + token = testAuthUtil.defaultUserLogin(), on = { get("/reservations/${reservation.id}/detail") }, @@ -636,7 +636,7 @@ class ReservationApiTest( } private fun initializeForPopularThemeTest(): MostReservedThemeIdListResponse { - val user: UserEntity = authUtil.defaultUser() + val user: UserEntity = testAuthUtil.defaultUser() val themeIds: List = (1..5).map { themeRepository.save( diff --git a/src/test/kotlin/roomescape/schedule/ScheduleApiTest.kt b/src/test/kotlin/roomescape/schedule/ScheduleApiTest.kt index 274267a3..14b9dd9b 100644 --- a/src/test/kotlin/roomescape/schedule/ScheduleApiTest.kt +++ b/src/test/kotlin/roomescape/schedule/ScheduleApiTest.kt @@ -32,7 +32,7 @@ class ScheduleApiTest( val endpoint = "/schedules/themes?date=$date" test("정상 응답") { - val adminToken = authUtil.defaultStoreAdminLogin() + val adminToken = testAuthUtil.defaultStoreAdminLogin() for (i in 1..10) { dummyInitializer.createSchedule( @@ -45,7 +45,7 @@ class ScheduleApiTest( } runTest( - token = authUtil.defaultUserLogin(), + token = testAuthUtil.defaultUserLogin(), on = { get(endpoint) }, @@ -61,7 +61,7 @@ class ScheduleApiTest( test("정상 응답") { val date = LocalDate.now().plusDays(1) - val adminToken = authUtil.defaultStoreAdminLogin() + val adminToken = testAuthUtil.defaultStoreAdminLogin() val createdSchedule = dummyInitializer.createSchedule( adminToken = adminToken, request = createRequest.copy(date = date, time = LocalTime.now()) @@ -79,7 +79,7 @@ class ScheduleApiTest( } runTest( - token = authUtil.defaultUserLogin(), + token = testAuthUtil.defaultUserLogin(), on = { get("/schedules?date=$date&themeId=${createdSchedule.themeId}") }, @@ -109,7 +109,7 @@ class ScheduleApiTest( test("회원") { runExceptionTest( - token = authUtil.defaultUserLogin(), + token = testAuthUtil.defaultUserLogin(), method = HttpMethod.GET, endpoint = endpoint, expectedErrorCode = AuthErrorCode.ACCESS_DENIED @@ -120,7 +120,7 @@ class ScheduleApiTest( val admin = AdminFixture.create(permissionLevel = AdminPermissionLevel.READ_SUMMARY) runExceptionTest( - token = authUtil.adminLogin(admin), + token = testAuthUtil.adminLogin(admin), method = HttpMethod.GET, endpoint = endpoint, expectedErrorCode = AuthErrorCode.ACCESS_DENIED @@ -129,7 +129,7 @@ class ScheduleApiTest( } test("정상 응답") { - val token = authUtil.defaultStoreAdminLogin() + val token = testAuthUtil.defaultStoreAdminLogin() val createdSchedule = dummyInitializer.createSchedule( adminToken = token, @@ -161,7 +161,7 @@ class ScheduleApiTest( test("일정이 없으면 실패한다.") { runExceptionTest( - token = authUtil.defaultStoreAdminLogin(), + token = testAuthUtil.defaultStoreAdminLogin(), method = HttpMethod.GET, endpoint = "/schedules/$INVALID_PK", expectedErrorCode = ScheduleErrorCode.SCHEDULE_NOT_FOUND @@ -184,7 +184,7 @@ class ScheduleApiTest( test("회원") { runExceptionTest( - token = authUtil.defaultUserLogin(), + token = testAuthUtil.defaultUserLogin(), method = HttpMethod.POST, requestBody = createRequest, endpoint = endpoint, @@ -197,7 +197,7 @@ class ScheduleApiTest( val admin = AdminFixture.create(permissionLevel = it) runExceptionTest( - token = authUtil.adminLogin(admin), + token = testAuthUtil.adminLogin(admin), method = HttpMethod.POST, requestBody = createRequest, endpoint = endpoint, @@ -208,7 +208,7 @@ class ScheduleApiTest( } test("정상 생성 및 감사 정보 확인") { - val token = authUtil.defaultStoreAdminLogin() + val token = testAuthUtil.defaultStoreAdminLogin() val themeId: Long = dummyInitializer.createTheme( adminToken = token, @@ -246,7 +246,7 @@ class ScheduleApiTest( } test("이미 동일한 날짜, 시간, 테마인 일정이 있으면 실패한다.") { - val token = authUtil.defaultStoreAdminLogin() + val token = testAuthUtil.defaultStoreAdminLogin() val date = LocalDate.now().plusDays(1) val time = LocalTime.of(10, 0) @@ -267,7 +267,7 @@ class ScheduleApiTest( } test("입력된 날짜 + 시간이 현재 시간 이전이면 실패한다.") { - val token = authUtil.defaultStoreAdminLogin() + val token = testAuthUtil.defaultStoreAdminLogin() val body = createRequest.copy(LocalDate.now(), LocalTime.now().minusMinutes(1)) runExceptionTest( @@ -294,7 +294,7 @@ class ScheduleApiTest( test("관리자") { runExceptionTest( - token = authUtil.defaultStoreAdminLogin(), + token = testAuthUtil.defaultStoreAdminLogin(), method = HttpMethod.PATCH, endpoint = endpoint, expectedErrorCode = AuthErrorCode.ACCESS_DENIED @@ -304,12 +304,12 @@ class ScheduleApiTest( test("해당 일정이 ${ScheduleStatus.AVAILABLE} 상태이면 정상 응답") { val createdSchedule: ScheduleEntity = dummyInitializer.createSchedule( - adminToken = authUtil.defaultStoreAdminLogin(), + adminToken = testAuthUtil.defaultStoreAdminLogin(), request = createRequest ) runTest( - token = authUtil.defaultUserLogin(), + token = testAuthUtil.defaultUserLogin(), on = { patch("/schedules/${createdSchedule.id}/hold") }, @@ -326,7 +326,7 @@ class ScheduleApiTest( test("예약이 없으면 실패한다.") { runExceptionTest( - token = authUtil.defaultUserLogin(), + token = testAuthUtil.defaultUserLogin(), method = HttpMethod.PATCH, endpoint = "/schedules/$INVALID_PK/hold", expectedErrorCode = ScheduleErrorCode.SCHEDULE_NOT_FOUND @@ -334,7 +334,7 @@ class ScheduleApiTest( } test("해당 일정이 ${ScheduleStatus.AVAILABLE} 상태가 아니면 실패한다.") { - val adminToken = authUtil.defaultStoreAdminLogin() + val adminToken = testAuthUtil.defaultStoreAdminLogin() val createdSchedule: ScheduleEntity = dummyInitializer.createSchedule( adminToken = adminToken, @@ -361,7 +361,7 @@ class ScheduleApiTest( ) runExceptionTest( - token = authUtil.defaultUserLogin(), + token = testAuthUtil.defaultUserLogin(), method = HttpMethod.PATCH, endpoint = "/schedules/${createdSchedule.id}/hold", expectedErrorCode = ScheduleErrorCode.SCHEDULE_NOT_AVAILABLE @@ -389,7 +389,7 @@ class ScheduleApiTest( test("회원") { runExceptionTest( - token = authUtil.defaultUserLogin(), + token = testAuthUtil.defaultUserLogin(), method = HttpMethod.PATCH, requestBody = updateRequest, endpoint = endpoint, @@ -402,7 +402,7 @@ class ScheduleApiTest( val admin = AdminFixture.create(permissionLevel = it) runExceptionTest( - token = authUtil.adminLogin(admin), + token = testAuthUtil.adminLogin(admin), method = HttpMethod.PATCH, requestBody = updateRequest, endpoint = endpoint, @@ -414,14 +414,14 @@ class ScheduleApiTest( test("정상 수정 및 감사 정보 변경 확인") { val createdSchedule: ScheduleEntity = dummyInitializer.createSchedule( - adminToken = authUtil.defaultStoreAdminLogin(), + adminToken = testAuthUtil.defaultStoreAdminLogin(), request = createRequest.copy( date = LocalDate.now().plusDays(1), time = LocalTime.now().plusMinutes(1), ) ) - val otherAdminToken = authUtil.adminLogin( + val otherAdminToken = testAuthUtil.adminLogin( AdminFixture.create(account = "otherAdmin", phone = "01099999999") ) @@ -449,7 +449,7 @@ class ScheduleApiTest( } test("입력값이 없으면 수정하지 않는다.") { - val token = authUtil.defaultStoreAdminLogin() + val token = testAuthUtil.defaultStoreAdminLogin() val createdSchedule: ScheduleEntity = dummyInitializer.createSchedule( adminToken = token, @@ -477,7 +477,7 @@ class ScheduleApiTest( test("일정이 없으면 실패한다.") { runExceptionTest( - token = authUtil.defaultStoreAdminLogin(), + token = testAuthUtil.defaultStoreAdminLogin(), method = HttpMethod.PATCH, requestBody = updateRequest, endpoint = "/schedules/${INVALID_PK}", @@ -486,7 +486,7 @@ class ScheduleApiTest( } test("입력된 날짜 + 시간이 현재 시간 이전이면 실패한다.") { - val token = authUtil.defaultStoreAdminLogin() + val token = testAuthUtil.defaultStoreAdminLogin() val createdSchedule: ScheduleEntity = dummyInitializer.createSchedule( adminToken = token, request = @@ -518,7 +518,7 @@ class ScheduleApiTest( test("회원") { runExceptionTest( - token = authUtil.defaultUserLogin(), + token = testAuthUtil.defaultUserLogin(), method = HttpMethod.DELETE, endpoint = endpoint, expectedErrorCode = AuthErrorCode.ACCESS_DENIED @@ -530,7 +530,7 @@ class ScheduleApiTest( val admin = AdminFixture.create(permissionLevel = it) runExceptionTest( - token = authUtil.adminLogin(admin), + token = testAuthUtil.adminLogin(admin), method = HttpMethod.DELETE, endpoint = endpoint, expectedErrorCode = AuthErrorCode.ACCESS_DENIED @@ -540,7 +540,7 @@ class ScheduleApiTest( } test("정상 삭제") { - val token = authUtil.defaultStoreAdminLogin() + val token = testAuthUtil.defaultStoreAdminLogin() val createdSchedule: ScheduleEntity = dummyInitializer.createSchedule( adminToken = token, request = createRequest @@ -560,7 +560,7 @@ class ScheduleApiTest( } test("예약 중이거나 예약이 완료된 일정이면 실패한다.") { - val token = authUtil.defaultStoreAdminLogin() + val token = testAuthUtil.defaultStoreAdminLogin() val createdSchedule: ScheduleEntity = dummyInitializer.createSchedule( adminToken = token, diff --git a/src/test/kotlin/roomescape/supports/KotestConfig.kt b/src/test/kotlin/roomescape/supports/KotestConfig.kt index 553afd7f..5ee8b11c 100644 --- a/src/test/kotlin/roomescape/supports/KotestConfig.kt +++ b/src/test/kotlin/roomescape/supports/KotestConfig.kt @@ -47,11 +47,11 @@ abstract class FunSpecSpringbootTest : FunSpec({ @LocalServerPort var port: Int = 0 - lateinit var authUtil: AuthUtil + lateinit var testAuthUtil: TestAuthUtil override suspend fun beforeSpec(spec: Spec) { RestAssured.port = port - authUtil = AuthUtil(userRepository, adminRepository, storeRepository) + testAuthUtil = TestAuthUtil(userRepository, adminRepository, storeRepository) } } diff --git a/src/test/kotlin/roomescape/supports/TestAuthUtil.kt b/src/test/kotlin/roomescape/supports/TestAuthUtil.kt new file mode 100644 index 00000000..55e66d0d --- /dev/null +++ b/src/test/kotlin/roomescape/supports/TestAuthUtil.kt @@ -0,0 +1,94 @@ +package roomescape.supports + +import io.restassured.module.kotlin.extensions.Extract +import io.restassured.module.kotlin.extensions.Given +import io.restassured.module.kotlin.extensions.Then +import io.restassured.module.kotlin.extensions.When +import org.springframework.data.repository.findByIdOrNull +import org.springframework.http.HttpStatus +import org.springframework.http.MediaType +import roomescape.admin.infrastructure.persistence.AdminEntity +import roomescape.admin.infrastructure.persistence.AdminRepository +import roomescape.auth.web.LoginRequest +import roomescape.common.dto.PrincipalType +import roomescape.store.infrastructure.persistence.StoreRepository +import roomescape.user.infrastructure.persistence.UserEntity +import roomescape.user.infrastructure.persistence.UserRepository +import roomescape.user.web.UserCreateRequest + +class TestAuthUtil( + private val userRepository: UserRepository, + private val adminRepository: AdminRepository, + private val storeRepository: StoreRepository, +) { + fun createAdmin(admin: AdminEntity): AdminEntity { + val storeId = admin.storeId + if (storeId != null && storeRepository.findByIdOrNull(storeId) == null) { + storeRepository.save( + StoreFixture.create( + id = storeId, + businessRegNum = randomBusinessRegNum(), + ) + ) + } + + return adminRepository.save(admin) + } + + fun signup(request: UserCreateRequest): UserEntity { + val userId: Long = Given { + contentType(MediaType.APPLICATION_JSON_VALUE) + body(request) + } When { + post("/users") + } Then { + statusCode(HttpStatus.OK.value()) + } Extract { + path("data.id") + } + + return userRepository.findByIdOrNull(userId) + ?: throw AssertionError("Unexpected Exception Occurred.") + } + + fun adminLogin(admin: AdminEntity): String { + val saved = createAdmin(admin) + val requestBody = LoginRequest(saved.account, saved.password, PrincipalType.ADMIN) + + return Given { + contentType(MediaType.APPLICATION_JSON_VALUE) + body(requestBody) + } When { + post("/auth/login") + } Then { + statusCode(200) + } Extract { + path("data.accessToken") + } + } + + fun defaultStoreAdminLogin(): String = adminLogin(AdminFixture.storeDefault) + fun defaultHqAdminLogin(): String = adminLogin(AdminFixture.hqDefault) + + fun userLogin(user: UserEntity): String { + if (userRepository.findByEmail(user.email) == null) { + userRepository.save(user) + } + + return Given { + contentType(MediaType.APPLICATION_JSON_VALUE) + body(LoginRequest(account = user.email, password = user.password, principalType = PrincipalType.USER)) + } When { + post("/auth/login") + } Then { + statusCode(200) + } Extract { + path("data.accessToken") + } + } + + fun defaultUserLogin(): String = userLogin(UserFixture.default) + + fun defaultUser(): UserEntity = userRepository.findByEmail(UserFixture.default.email) + ?: userRepository.save(UserFixture.default) +} \ No newline at end of file diff --git a/src/test/kotlin/roomescape/theme/ThemeApiTest.kt b/src/test/kotlin/roomescape/theme/HQAdminThemeApiTest.kt similarity index 84% rename from src/test/kotlin/roomescape/theme/ThemeApiTest.kt rename to src/test/kotlin/roomescape/theme/HQAdminThemeApiTest.kt index 4007516a..e253b886 100644 --- a/src/test/kotlin/roomescape/theme/ThemeApiTest.kt +++ b/src/test/kotlin/roomescape/theme/HQAdminThemeApiTest.kt @@ -19,13 +19,12 @@ import roomescape.theme.business.MIN_PRICE import roomescape.theme.exception.ThemeErrorCode import roomescape.theme.infrastructure.persistence.ThemeEntity import roomescape.theme.infrastructure.persistence.ThemeRepository -import roomescape.theme.web.ThemeIdListRequest import roomescape.theme.web.ThemeUpdateRequest import roomescape.supports.* import roomescape.supports.ThemeFixture.createRequest import kotlin.random.Random -class ThemeApiTest( +class HQAdminThemeApiTest( private val themeRepository: ThemeRepository ) : FunSpecSpringbootTest() { @@ -45,7 +44,7 @@ class ThemeApiTest( test("회원") { runExceptionTest( - token = authUtil.defaultUserLogin(), + token = testAuthUtil.defaultUserLogin(), method = HttpMethod.POST, requestBody = createRequest, endpoint = endpoint, @@ -58,7 +57,7 @@ class ThemeApiTest( val admin = AdminFixture.createStoreAdmin(permissionLevel = it) runExceptionTest( - token = authUtil.adminLogin(admin), + token = testAuthUtil.adminLogin(admin), method = HttpMethod.POST, requestBody = createRequest, endpoint = endpoint, @@ -71,7 +70,7 @@ class ThemeApiTest( val admin = AdminFixture.createHqAdmin(permissionLevel = it) runExceptionTest( - token = authUtil.adminLogin(admin), + token = testAuthUtil.adminLogin(admin), method = HttpMethod.POST, requestBody = createRequest, endpoint = endpoint, @@ -84,7 +83,7 @@ class ThemeApiTest( test("정상 생성 및 감사 정보 확인") { - val token = authUtil.defaultHqAdminLogin() + val token = testAuthUtil.defaultHqAdminLogin() runTest( token = token, @@ -112,7 +111,7 @@ class ThemeApiTest( } test("이미 동일한 이름의 테마가 있으면 실패한다.") { - val token = authUtil.defaultHqAdminLogin() + val token = testAuthUtil.defaultHqAdminLogin() val commonName = "test123" dummyInitializer.createTheme( adminToken = token, @@ -135,7 +134,7 @@ class ThemeApiTest( } test("금액이 ${MIN_PRICE}원 미만이면 실패한다.") { - val token = authUtil.defaultHqAdminLogin() + val token = testAuthUtil.defaultHqAdminLogin() runTest( token = token, using = { @@ -158,7 +157,7 @@ class ThemeApiTest( } test("field: availableMinutes") { - val token = authUtil.defaultHqAdminLogin() + val token = testAuthUtil.defaultHqAdminLogin() runTest( token = token, using = { @@ -172,7 +171,7 @@ class ThemeApiTest( } test("field: expectedMinutesFrom") { - val token = authUtil.defaultHqAdminLogin() + val token = testAuthUtil.defaultHqAdminLogin() runTest( token = token, using = { @@ -186,7 +185,7 @@ class ThemeApiTest( } test("field: expectedMinutesTo") { - val token = authUtil.defaultHqAdminLogin() + val token = testAuthUtil.defaultHqAdminLogin() runTest( token = token, using = { @@ -202,7 +201,7 @@ class ThemeApiTest( context("시간 범위가 잘못 지정되면 실패한다.") { test("최소 예상 시간 > 최대 예상 시간") { - val token = authUtil.defaultHqAdminLogin() + val token = testAuthUtil.defaultHqAdminLogin() runTest( token = token, using = { @@ -219,7 +218,7 @@ class ThemeApiTest( } test("최대 예상 시간 > 이용 가능 시간") { - val token = authUtil.defaultHqAdminLogin() + val token = testAuthUtil.defaultHqAdminLogin() runTest( token = token, using = { @@ -249,7 +248,7 @@ class ThemeApiTest( } test("field: minParticipants") { - val token = authUtil.defaultHqAdminLogin() + val token = testAuthUtil.defaultHqAdminLogin() runTest( token = token, using = { @@ -263,7 +262,7 @@ class ThemeApiTest( } test("field: maxParticipants") { - val token = authUtil.defaultHqAdminLogin() + val token = testAuthUtil.defaultHqAdminLogin() runTest( token = token, using = { @@ -279,7 +278,7 @@ class ThemeApiTest( context("인원 범위가 잘못 지정되면 실패한다.") { test("최소 인원 > 최대 인원") { - val token = authUtil.defaultHqAdminLogin() + val token = testAuthUtil.defaultHqAdminLogin() runTest( token = token, using = { @@ -297,59 +296,6 @@ class ThemeApiTest( } } - context("입력된 모든 ID에 대한 테마를 조회한다.") { - test("정상 응답") { - val adminToken = authUtil.defaultHqAdminLogin() - val themeSize = 3 - val themeIds = mutableListOf() - - for (i in 1..themeSize) { - dummyInitializer.createTheme(adminToken, createRequest.copy(name = "test$i")) - .also { themeIds.add(it.id) } - } - - runTest( - token = authUtil.defaultUserLogin(), - using = { - body(ThemeIdListRequest(themeIds)) - }, - on = { - post("/themes/batch") - }, - expect = { - statusCode(HttpStatus.OK.value()) - body("data.themes.size()", equalTo(themeSize)) - } - ) - } - - test("없는 테마가 있으면 생략한다.") { - val token = authUtil.defaultHqAdminLogin() - val themeSize = 3 - val themeIds = mutableListOf() - - for (i in 1..themeSize) { - dummyInitializer.createTheme(token, createRequest.copy(name = "test$i")) - .also { themeIds.add(it.id) } - } - - themeIds.add(INVALID_PK) - runTest( - token = authUtil.defaultUserLogin(), - using = { - body(ThemeIdListRequest(themeIds)) - }, - on = { - post("/themes/batch") - }, - expect = { - statusCode(HttpStatus.OK.value()) - body("data.themes.size()", equalTo(themeSize)) - } - ) - } - } - context("관리자가 모든 테마를 조회한다.") { val endpoint = "/admin/themes" val requests = listOf( @@ -368,7 +314,7 @@ class ThemeApiTest( test("회원") { runExceptionTest( - token = authUtil.defaultUserLogin(), + token = testAuthUtil.defaultUserLogin(), method = HttpMethod.GET, endpoint = endpoint, expectedErrorCode = AuthErrorCode.ACCESS_DENIED @@ -380,7 +326,7 @@ class ThemeApiTest( val admin = AdminFixture.createStoreAdmin(permissionLevel = it) runExceptionTest( - token = authUtil.adminLogin(admin), + token = testAuthUtil.adminLogin(admin), method = HttpMethod.POST, requestBody = createRequest, endpoint = endpoint, @@ -392,7 +338,7 @@ class ThemeApiTest( test("비공개 테마까지 포함하여 간단한 정보만 조회된다.") { - val token = authUtil.defaultHqAdminLogin() + val token = testAuthUtil.defaultHqAdminLogin() requests.forEach { dummyInitializer.createTheme(token, it) } runTest( @@ -411,40 +357,6 @@ class ThemeApiTest( } } - context("ID로 테마 정보를 조회한다.") { - test("성공 응답") { - val createdTheme: ThemeEntity = dummyInitializer.createTheme( - adminToken = authUtil.defaultHqAdminLogin(), - request = createRequest - ) - - runTest( - on = { - get("/themes/${createdTheme.id}") - }, - expect = { - body("data.id", equalTo(createdTheme.id)) - body("data.name", equalTo(createdTheme.name)) - assertProperties( - props = setOf( - "id", "name", "thumbnailUrl", "description", "difficulty", "price", - "minParticipants", "maxParticipants", - "availableMinutes", "expectedMinutesFrom", "expectedMinutesTo" - ), - ) - } - ) - } - - test("테마가 없으면 실패한다.") { - runExceptionTest( - method = HttpMethod.GET, - endpoint = "/themes/$INVALID_PK", - expectedErrorCode = ThemeErrorCode.THEME_NOT_FOUND - ) - } - } - context("관리자 페이지에서 특정 테마의 상세 정보를 조회한다.") { context("권한이 없으면 접근할 수 없다.") { val endpoint = "/admin/themes/$INVALID_PK" @@ -459,7 +371,7 @@ class ThemeApiTest( test("회원") { runExceptionTest( - token = authUtil.defaultUserLogin(), + token = testAuthUtil.defaultUserLogin(), method = HttpMethod.GET, endpoint = endpoint, expectedErrorCode = AuthErrorCode.ACCESS_DENIED @@ -471,7 +383,7 @@ class ThemeApiTest( val admin = AdminFixture.createStoreAdmin(permissionLevel = it) runExceptionTest( - token = authUtil.adminLogin(admin), + token = testAuthUtil.adminLogin(admin), method = HttpMethod.GET, endpoint = endpoint, expectedErrorCode = AuthErrorCode.ACCESS_DENIED @@ -483,7 +395,7 @@ class ThemeApiTest( val admin = AdminFixture.createHqAdmin(permissionLevel = it) runExceptionTest( - token = authUtil.adminLogin(admin), + token = testAuthUtil.adminLogin(admin), method = HttpMethod.GET, endpoint = endpoint, expectedErrorCode = AuthErrorCode.ACCESS_DENIED @@ -494,7 +406,7 @@ class ThemeApiTest( } test("정상 응답") { - val token = authUtil.defaultHqAdminLogin() + val token = testAuthUtil.defaultHqAdminLogin() val createdTheme = dummyInitializer.createTheme( adminToken = token, request = createRequest @@ -522,7 +434,7 @@ class ThemeApiTest( test("테마가 없으면 실패한다.") { runExceptionTest( - token = authUtil.defaultHqAdminLogin(), + token = testAuthUtil.defaultHqAdminLogin(), method = HttpMethod.GET, endpoint = "/admin/themes/$INVALID_PK", expectedErrorCode = ThemeErrorCode.THEME_NOT_FOUND @@ -531,7 +443,6 @@ class ThemeApiTest( } context("테마를 삭제한다.") { - context("권한이 없으면 접근할 수 없다.") { val endpoint = "/admin/themes/${INVALID_PK}" @@ -545,7 +456,7 @@ class ThemeApiTest( test("회원") { runExceptionTest( - token = authUtil.defaultUserLogin(), + token = testAuthUtil.defaultUserLogin(), method = HttpMethod.DELETE, endpoint = endpoint, expectedErrorCode = AuthErrorCode.ACCESS_DENIED @@ -557,7 +468,7 @@ class ThemeApiTest( val admin = AdminFixture.createStoreAdmin(permissionLevel = it) runExceptionTest( - token = authUtil.adminLogin(admin), + token = testAuthUtil.adminLogin(admin), method = HttpMethod.DELETE, endpoint = endpoint, expectedErrorCode = AuthErrorCode.ACCESS_DENIED @@ -569,7 +480,7 @@ class ThemeApiTest( val admin = AdminFixture.createHqAdmin(permissionLevel = it) runExceptionTest( - token = authUtil.adminLogin(admin), + token = testAuthUtil.adminLogin(admin), method = HttpMethod.DELETE, endpoint = endpoint, expectedErrorCode = AuthErrorCode.ACCESS_DENIED @@ -580,7 +491,7 @@ class ThemeApiTest( } test("정상 삭제") { - val token = authUtil.defaultHqAdminLogin() + val token = testAuthUtil.defaultHqAdminLogin() val createdTheme = dummyInitializer.createTheme( adminToken = token, request = createRequest @@ -601,7 +512,7 @@ class ThemeApiTest( test("테마가 없으면 실패한다.") { runExceptionTest( - token = authUtil.defaultHqAdminLogin(), + token = testAuthUtil.defaultHqAdminLogin(), method = HttpMethod.DELETE, endpoint = "/admin/themes/$INVALID_PK", expectedErrorCode = ThemeErrorCode.THEME_NOT_FOUND @@ -625,7 +536,7 @@ class ThemeApiTest( test("회원") { runExceptionTest( - token = authUtil.defaultUserLogin(), + token = testAuthUtil.defaultUserLogin(), method = HttpMethod.PATCH, endpoint = endpoint, requestBody = request, @@ -638,7 +549,7 @@ class ThemeApiTest( val admin = AdminFixture.createStoreAdmin(permissionLevel = it) runExceptionTest( - token = authUtil.adminLogin(admin), + token = testAuthUtil.adminLogin(admin), method = HttpMethod.PATCH, endpoint = endpoint, requestBody = request, @@ -651,7 +562,7 @@ class ThemeApiTest( val admin = AdminFixture.createHqAdmin(permissionLevel = it) runExceptionTest( - token = authUtil.adminLogin(admin), + token = testAuthUtil.adminLogin(admin), method = HttpMethod.PATCH, endpoint = endpoint, requestBody = request, @@ -666,10 +577,10 @@ class ThemeApiTest( test("정상 수정 및 감사 정보 변경 확인") { val createdTheme: ThemeEntity = dummyInitializer.createTheme( - adminToken = authUtil.defaultHqAdminLogin(), + adminToken = testAuthUtil.defaultHqAdminLogin(), request = createRequest.copy(name = "theme-${Random.nextInt()}") ) - val otherAdminToken: String = authUtil.adminLogin( + val otherAdminToken: String = testAuthUtil.adminLogin( AdminFixture.createHqAdmin(permissionLevel = AdminPermissionLevel.WRITABLE) ) @@ -696,12 +607,12 @@ class ThemeApiTest( test("입력값이 없으면 수정하지 않는다.") { val createdTheme: ThemeEntity = dummyInitializer.createTheme( - adminToken = authUtil.defaultHqAdminLogin(), + adminToken = testAuthUtil.defaultHqAdminLogin(), request = createRequest.copy(name = "theme-${Random.nextInt()}") ) runTest( - token = authUtil.defaultHqAdminLogin(), + token = testAuthUtil.defaultHqAdminLogin(), using = { body(ThemeUpdateRequest()) }, @@ -721,7 +632,7 @@ class ThemeApiTest( test("테마가 없으면 실패한다.") { runExceptionTest( - token = authUtil.defaultHqAdminLogin(), + token = testAuthUtil.defaultHqAdminLogin(), method = HttpMethod.PATCH, endpoint = "/admin/themes/$INVALID_PK", requestBody = updateRequest, @@ -730,7 +641,7 @@ class ThemeApiTest( } test("금액이 ${MIN_PRICE}원 미만이면 실패한다.") { - val adminToken = authUtil.defaultHqAdminLogin() + val adminToken = testAuthUtil.defaultHqAdminLogin() val createdTheme: ThemeEntity = dummyInitializer.createTheme( adminToken = adminToken, request = createRequest.copy(name = "theme-${Random.nextInt()}") @@ -750,7 +661,7 @@ class ThemeApiTest( lateinit var createdTheme: ThemeEntity beforeTest { - adminToken = authUtil.defaultHqAdminLogin() + adminToken = testAuthUtil.defaultHqAdminLogin() createdTheme = dummyInitializer.createTheme( adminToken = adminToken, request = createRequest.copy(name = "theme-${Random.nextInt()}") @@ -793,7 +704,7 @@ class ThemeApiTest( lateinit var createdTheme: ThemeEntity beforeTest { - adminToken = authUtil.defaultHqAdminLogin() + adminToken = testAuthUtil.defaultHqAdminLogin() createdTheme = dummyInitializer.createTheme( adminToken = adminToken, request = createRequest.copy(name = "theme-${Random.nextInt()}") @@ -834,7 +745,7 @@ class ThemeApiTest( lateinit var createdTheme: ThemeEntity beforeTest { - adminToken = authUtil.defaultHqAdminLogin() + adminToken = testAuthUtil.defaultHqAdminLogin() createdTheme = dummyInitializer.createTheme( adminToken = adminToken, request = createRequest.copy(name = "theme-${Random.nextInt()}") @@ -867,7 +778,7 @@ class ThemeApiTest( lateinit var createdTheme: ThemeEntity beforeTest { - adminToken = authUtil.defaultHqAdminLogin() + adminToken = testAuthUtil.defaultHqAdminLogin() createdTheme = dummyInitializer.createTheme( adminToken = adminToken, request = createRequest.copy(name = "theme-${Random.nextInt()}") diff --git a/src/test/kotlin/roomescape/user/UserApiTest.kt b/src/test/kotlin/roomescape/user/UserApiTest.kt index b396ba97..6fc8167e 100644 --- a/src/test/kotlin/roomescape/user/UserApiTest.kt +++ b/src/test/kotlin/roomescape/user/UserApiTest.kt @@ -145,7 +145,7 @@ class UserApiTest( test("관리자") { runExceptionTest( - token = authUtil.defaultStoreAdminLogin(), + token = testAuthUtil.defaultStoreAdminLogin(), method = HttpMethod.GET, endpoint = endpoint, expectedErrorCode = AuthErrorCode.ACCESS_DENIED @@ -154,8 +154,8 @@ class UserApiTest( } test("정상 응답") { - val user = authUtil.defaultUser() - val token = authUtil.userLogin(user) + val user = testAuthUtil.defaultUser() + val token = testAuthUtil.userLogin(user) runTest( token = token,