[#34] 회원 / 인증 도메인 재정의 #43

Merged
pricelees merged 73 commits from refactor/#34 into main 2025-09-13 10:13:45 +00:00
6 changed files with 80 additions and 80 deletions
Showing only changes of commit 59907bd643 - Show all commits

View File

@ -145,8 +145,8 @@ class PaymentAPITest(
PaymentMethod.entries.filter { it !in supportedMethod }.forEach {
test("결제 수단: ${it.koreanName}") {
val reservation = dummyInitializer.createConfirmReservation(
adminToken = loginUtil.loginAsAdmin(),
reserverToken = loginUtil.loginAsUser()
adminToken = authUtil.loginAsAdmin(),
reserverToken = authUtil.loginAsUser()
)
val request = PaymentFixture.confirmRequest
@ -163,7 +163,7 @@ class PaymentAPITest(
)
runTest(
token = loginUtil.loginAsUser(),
token = authUtil.loginAsUser(),
using = {
body(PaymentFixture.confirmRequest)
},
@ -182,7 +182,7 @@ class PaymentAPITest(
context("결제를 취소한다.") {
test("정상 취소") {
val token = loginUtil.loginAsAdmin()
val token = authUtil.loginAsAdmin()
val confirmRequest = PaymentFixture.confirmRequest
val reservation = dummyInitializer.createConfirmReservation(
adminToken = token,
@ -230,7 +230,7 @@ class PaymentAPITest(
}
test("예약에 대한 결제 정보가 없으면 실패한다.") {
val token = loginUtil.loginAsAdmin()
val token = authUtil.loginAsAdmin()
val reservation = dummyInitializer.createConfirmReservation(
adminToken = token,
reserverToken = token,
@ -282,8 +282,8 @@ class PaymentAPITest(
val request = PaymentFixture.confirmRequest.copy(paymentKey = paymentKey, amount = amount)
val reservation: ReservationEntity = dummyInitializer.createPendingReservation(
adminToken = loginUtil.loginAsAdmin(),
reserverToken = loginUtil.loginAsUser(),
adminToken = authUtil.loginAsAdmin(),
reserverToken = authUtil.loginAsUser(),
)
val method = if (easyPayDetail != null) {
@ -305,7 +305,7 @@ class PaymentAPITest(
} returns clientResponse
runTest(
token = loginUtil.loginAsUser(),
token = authUtil.loginAsUser(),
using = {
body(request)
},

View File

@ -38,13 +38,13 @@ class ReservationApiTest(
test("정상 생성") {
val schedule: ScheduleEntity = dummyInitializer.createSchedule(
adminToken = loginUtil.loginAsAdmin(),
adminToken = authUtil.loginAsAdmin(),
request = ScheduleFixture.createRequest,
status = ScheduleStatus.HOLD
)
runTest(
token = loginUtil.loginAsUser(),
token = authUtil.loginAsUser(),
using = {
body(commonRequest.copy(scheduleId = schedule.id))
},
@ -67,13 +67,13 @@ class ReservationApiTest(
test("예약을 생성할 때 해당 일정이 ${ScheduleStatus.HOLD} 상태가 아니면 실패한다.") {
val schedule: ScheduleEntity = dummyInitializer.createSchedule(
adminToken = loginUtil.loginAsAdmin(),
adminToken = authUtil.loginAsAdmin(),
request = ScheduleFixture.createRequest,
status = ScheduleStatus.AVAILABLE
)
runTest(
token = loginUtil.loginAsUser(),
token = authUtil.loginAsUser(),
using = {
body(commonRequest.copy(scheduleId = schedule.id))
},
@ -88,7 +88,7 @@ class ReservationApiTest(
}
test("예약 인원이 테마의 최소 인원보다 작거나 최대 인원보다 많으면 실패한다.") {
val adminToken = loginUtil.loginAsAdmin()
val adminToken = authUtil.loginAsAdmin()
val theme: ThemeEntity = dummyInitializer.createTheme(
adminToken = adminToken,
request = ThemeFixture.createRequest
@ -101,7 +101,7 @@ class ReservationApiTest(
)
runTest(
token = loginUtil.loginAsUser(),
token = authUtil.loginAsUser(),
using = {
body(
commonRequest.copy(
@ -120,7 +120,7 @@ class ReservationApiTest(
)
runTest(
token = loginUtil.loginAsUser(),
token = authUtil.loginAsUser(),
using = {
body(
commonRequest.copy(
@ -142,7 +142,7 @@ class ReservationApiTest(
context("필수 입력값이 입력되지 않으면 실패한다.") {
test("예약자명") {
runTest(
token = loginUtil.loginAsUser(),
token = authUtil.loginAsUser(),
using = {
body(commonRequest.copy(reserverName = ""))
},
@ -158,7 +158,7 @@ class ReservationApiTest(
test("예약자 연락처") {
runTest(
token = loginUtil.loginAsUser(),
token = authUtil.loginAsUser(),
using = {
body(commonRequest.copy(reserverContact = ""))
},
@ -176,10 +176,10 @@ class ReservationApiTest(
context("예약을 확정한다.") {
test("정상 응답") {
val userToken = loginUtil.loginAsUser()
val userToken = authUtil.loginAsUser()
val reservation: ReservationEntity = dummyInitializer.createPendingReservation(
adminToken = loginUtil.loginAsAdmin(),
adminToken = authUtil.loginAsAdmin(),
reserverToken = userToken,
)
@ -205,7 +205,7 @@ class ReservationApiTest(
test("예약이 없으면 실패한다.") {
runTest(
token = loginUtil.loginAsUser(),
token = authUtil.loginAsUser(),
on = {
post("/reservations/$INVALID_PK/confirm")
},
@ -219,10 +219,10 @@ class ReservationApiTest(
context("예약을 취소한다.") {
test("정상 응답") {
val userToken = loginUtil.loginAsUser()
val userToken = authUtil.loginAsUser()
val reservation: ReservationEntity = dummyInitializer.createConfirmReservation(
adminToken = loginUtil.loginAsAdmin(),
adminToken = authUtil.loginAsAdmin(),
reserverToken = userToken,
)
@ -251,7 +251,7 @@ class ReservationApiTest(
test("예약이 없으면 실패한다.") {
runTest(
token = loginUtil.loginAsUser(),
token = authUtil.loginAsUser(),
using = {
body(ReservationCancelRequest(cancelReason = "test"))
},
@ -267,11 +267,11 @@ class ReservationApiTest(
test("관리자가 아닌 회원은 다른 회원의 예약을 취소할 수 없다.") {
val reservation: ReservationEntity = dummyInitializer.createConfirmReservation(
adminToken = loginUtil.loginAsAdmin(),
reserverToken = loginUtil.loginAsUser(),
adminToken = authUtil.loginAsAdmin(),
reserverToken = authUtil.loginAsUser(),
)
val otherUserToken = loginUtil.login("other@example.com", "other", role = Role.MEMBER)
val otherUserToken = authUtil.login("other@example.com", "other", role = Role.MEMBER)
runTest(
token = otherUserToken,
@ -290,11 +290,11 @@ class ReservationApiTest(
test("관리자는 다른 회원의 예약을 취소할 수 있다.") {
val reservation: ReservationEntity = dummyInitializer.createConfirmReservation(
adminToken = loginUtil.loginAsAdmin(),
reserverToken = loginUtil.loginAsAdmin(),
adminToken = authUtil.loginAsAdmin(),
reserverToken = authUtil.loginAsAdmin(),
)
val otherAdminToken = loginUtil.login("admin1@example.com", "admin1", role = Role.ADMIN)
val otherAdminToken = authUtil.login("admin1@example.com", "admin1", role = Role.ADMIN)
runTest(
token = otherAdminToken,
@ -322,8 +322,8 @@ class ReservationApiTest(
context("나의 예약 목록을 조회한다.") {
test("정상 응답") {
val userToken = loginUtil.loginAsUser()
val adminToken = loginUtil.loginAsAdmin()
val userToken = authUtil.loginAsUser()
val adminToken = authUtil.loginAsAdmin()
for (i in 1..3) {
dummyInitializer.createConfirmReservation(
@ -362,8 +362,8 @@ class ReservationApiTest(
beforeTest {
reservation = dummyInitializer.createConfirmReservation(
adminToken = loginUtil.loginAsAdmin(),
reserverToken = loginUtil.loginAsUser(),
adminToken = authUtil.loginAsAdmin(),
reserverToken = authUtil.loginAsUser(),
)
}
@ -428,7 +428,7 @@ class ReservationApiTest(
)
val cancelReason = "테스트입니다."
val memberId = loginUtil.getUser().id!!
val memberId = authUtil.getUser().id!!
dummyInitializer.cancelPayment(
memberId = memberId,
@ -495,7 +495,7 @@ class ReservationApiTest(
test("예약이 없으면 실패한다.") {
runTest(
token = loginUtil.loginAsUser(),
token = authUtil.loginAsUser(),
on = {
get("/reservations/$INVALID_PK/detail")
},
@ -508,12 +508,12 @@ class ReservationApiTest(
test("예약은 있지만, 결제 정보가 없으면 실패한다.") {
val reservation = dummyInitializer.createConfirmReservation(
adminToken = loginUtil.loginAsAdmin(),
reserverToken = loginUtil.loginAsUser(),
adminToken = authUtil.loginAsAdmin(),
reserverToken = authUtil.loginAsUser(),
)
runTest(
token = loginUtil.loginAsUser(),
token = authUtil.loginAsUser(),
on = {
get("/reservations/${reservation.id}/detail")
},
@ -526,8 +526,8 @@ class ReservationApiTest(
test("예약과 결제는 있지만, 결제 세부 내역이 없으면 실패한다.") {
val reservation = dummyInitializer.createConfirmReservation(
adminToken = loginUtil.loginAsAdmin(),
reserverToken = loginUtil.loginAsUser(),
adminToken = authUtil.loginAsAdmin(),
reserverToken = authUtil.loginAsUser(),
)
dummyInitializer.createPayment(
@ -538,7 +538,7 @@ class ReservationApiTest(
}
runTest(
token = loginUtil.loginAsUser(),
token = authUtil.loginAsUser(),
on = {
get("/reservations/${reservation.id}/detail")
},
@ -555,7 +555,7 @@ class ReservationApiTest(
reservation: ReservationEntity
): LinkedHashMap<String, Any> {
return runTest(
token = loginUtil.loginAsUser(),
token = authUtil.loginAsUser(),
on = {
get("/reservations/${reservation.id}/detail")
},

View File

@ -35,7 +35,7 @@ class ScheduleApiTest(
lateinit var token: String
beforeTest {
token = loginUtil.loginAsUser()
token = authUtil.loginAsUser()
}
val commonAssertion: ValidatableResponse.() -> Unit = {
@ -107,7 +107,7 @@ class ScheduleApiTest(
lateinit var token: String
beforeTest {
token = loginUtil.loginAsUser()
token = authUtil.loginAsUser()
}
test("예약 가능 테마 조회: GET /schedules/themes?date={date}") {
@ -184,7 +184,7 @@ class ScheduleApiTest(
}
runTest(
token = loginUtil.loginAsUser(),
token = authUtil.loginAsUser(),
on = {
get("/schedules/themes?date=$date")
},
@ -216,7 +216,7 @@ class ScheduleApiTest(
}
runTest(
token = loginUtil.loginAsUser(),
token = authUtil.loginAsUser(),
on = {
get("/schedules?date=$date&themeId=${createdSchedule.themeId}")
},
@ -237,7 +237,7 @@ class ScheduleApiTest(
val createdSchedule = createDummySchedule(createRequest)
runTest(
token = loginUtil.loginAsAdmin(),
token = authUtil.loginAsAdmin(),
on = {
get("/schedules/${createdSchedule.id}")
},
@ -261,7 +261,7 @@ class ScheduleApiTest(
test("일정이 없으면 실패한다.") {
runTest(
token = loginUtil.loginAsAdmin(),
token = authUtil.loginAsAdmin(),
on = {
get("/schedules/$INVALID_PK")
},
@ -280,7 +280,7 @@ class ScheduleApiTest(
lateinit var token: String
beforeTest {
token = loginUtil.loginAsAdmin()
token = authUtil.loginAsAdmin()
}
test("정상 생성 및 감사 정보 확인") {
@ -383,7 +383,7 @@ class ScheduleApiTest(
val createdSchedule: ScheduleEntity = createDummySchedule(createRequest)
runTest(
token = loginUtil.loginAsUser(),
token = authUtil.loginAsUser(),
on = {
patch("/schedules/${createdSchedule.id}/hold")
},
@ -400,7 +400,7 @@ class ScheduleApiTest(
test("예약이 없으면 실패한다.") {
runTest(
token = loginUtil.loginAsUser(),
token = authUtil.loginAsUser(),
on = {
patch("/schedules/$INVALID_PK/hold")
},
@ -419,7 +419,7 @@ class ScheduleApiTest(
* 생성 API에서는 일정 생성 AVAILABLE을 기본 상태로 지정하기 때문.
*/
runTest(
token = loginUtil.loginAsAdmin(),
token = authUtil.loginAsAdmin(),
using = {
body(
ScheduleUpdateRequest(
@ -436,7 +436,7 @@ class ScheduleApiTest(
)
runTest(
token = loginUtil.loginAsUser(),
token = authUtil.loginAsUser(),
on = {
patch("/schedules/${createdSchedule.id}/hold")
},
@ -461,7 +461,7 @@ class ScheduleApiTest(
time = LocalTime.now().plusMinutes(1),
)
)
val otherAdminToken = loginUtil.login("admin1@admin.com", "admin1", Role.ADMIN)
val otherAdminToken = authUtil.login("admin1@admin.com", "admin1", Role.ADMIN)
runTest(
token = otherAdminToken,
@ -490,7 +490,7 @@ class ScheduleApiTest(
val createdSchedule: ScheduleEntity = createDummySchedule(createRequest)
runTest(
token = loginUtil.loginAsAdmin(),
token = authUtil.loginAsAdmin(),
using = {
body(ScheduleUpdateRequest())
},
@ -510,7 +510,7 @@ class ScheduleApiTest(
test("일정이 없으면 실패한다.") {
runTest(
token = loginUtil.loginAsAdmin(),
token = authUtil.loginAsAdmin(),
using = {
body(updateRequest)
},
@ -530,7 +530,7 @@ class ScheduleApiTest(
)
runTest(
token = loginUtil.loginAsAdmin(),
token = authUtil.loginAsAdmin(),
using = {
body(
updateRequest.copy(
@ -554,7 +554,7 @@ class ScheduleApiTest(
val createdSchedule: ScheduleEntity = createDummySchedule(createRequest)
runTest(
token = loginUtil.loginAsAdmin(),
token = authUtil.loginAsAdmin(),
on = {
delete("/schedules/${createdSchedule.id}")
},
@ -574,7 +574,7 @@ class ScheduleApiTest(
* 생성 API에서는 일정 생성 AVAILABLE을 기본 상태로 지정하기 때문.
*/
runTest(
token = loginUtil.loginAsAdmin(),
token = authUtil.loginAsAdmin(),
using = {
body(
ScheduleUpdateRequest(
@ -594,7 +594,7 @@ class ScheduleApiTest(
* 삭제 테스트
*/
runTest(
token = loginUtil.loginAsAdmin(),
token = authUtil.loginAsAdmin(),
on = {
delete("/schedules/${createdSchedule.id}")
},
@ -608,7 +608,7 @@ class ScheduleApiTest(
}
fun createDummySchedule(request: ScheduleCreateRequest): ScheduleEntity {
val token = loginUtil.loginAsAdmin()
val token = authUtil.loginAsAdmin()
val themeId: Long = if (request.themeId > 1L) {
request.themeId

View File

@ -35,7 +35,7 @@ class ThemeApiTest(
lateinit var token: String
beforeTest {
token = loginUtil.loginAsUser()
token = authUtil.loginAsUser()
}
val commonAssertion: ValidatableResponse.() -> Unit = {
@ -102,10 +102,10 @@ class ThemeApiTest(
context("일반 회원도 접근할 수 있다.") {
test("테마 조회: GET /v2/themes") {
val token = loginUtil.loginAsUser()
val token = authUtil.loginAsUser()
dummyInitializer.createTheme(
adminToken = loginUtil.loginAsAdmin(),
adminToken = authUtil.loginAsAdmin(),
request = createRequest.copy(name = "test123", isOpen = true)
)
@ -129,7 +129,7 @@ class ThemeApiTest(
lateinit var token: String
beforeTest {
token = loginUtil.loginAsAdmin()
token = authUtil.loginAsAdmin()
}
test("정상 생성 및 감사 정보 확인") {
@ -340,7 +340,7 @@ class ThemeApiTest(
beforeTest {
for (i in 1..3) {
dummyInitializer.createTheme(
adminToken = loginUtil.loginAsAdmin(),
adminToken = authUtil.loginAsAdmin(),
request = createRequest.copy(name = "test$i")
).also {
themeIds.add(it.id)
@ -354,7 +354,7 @@ class ThemeApiTest(
test("정상 응답") {
runTest(
token = loginUtil.loginAsUser(),
token = authUtil.loginAsUser(),
using = {
body(ThemeListRetrieveRequest(themeIds))
},
@ -372,7 +372,7 @@ class ThemeApiTest(
themeIds.add(INVALID_PK)
runTest(
token = loginUtil.loginAsUser(),
token = authUtil.loginAsUser(),
using = {
body(ThemeListRetrieveRequest(themeIds))
},
@ -391,7 +391,7 @@ class ThemeApiTest(
lateinit var token: String
beforeTest {
token = loginUtil.loginAsAdmin()
token = authUtil.loginAsAdmin()
dummyInitializer.createTheme(
adminToken = token,
request = createRequest.copy(name = "open", isOpen = true)
@ -420,7 +420,7 @@ class ThemeApiTest(
test("예약 페이지에서는 공개된 테마의 전체 정보가 조회된다.") {
runTest(
token = loginUtil.loginAsUser(),
token = authUtil.loginAsUser(),
on = {
get("/v2/themes")
},
@ -442,7 +442,7 @@ class ThemeApiTest(
context("관리자 페이지에서 특정 테마의 상세 정보를 조회한다.") {
test("정상 응답") {
val token = loginUtil.loginAsAdmin()
val token = authUtil.loginAsAdmin()
val createdTheme = dummyInitializer.createTheme(
adminToken = token,
request = createRequest
@ -470,7 +470,7 @@ class ThemeApiTest(
test("테마가 없으면 실패한다.") {
runTest(
token = loginUtil.loginAsAdmin(),
token = authUtil.loginAsAdmin(),
on = {
get("/admin/themes/$INVALID_PK")
},
@ -484,7 +484,7 @@ class ThemeApiTest(
context("테마를 삭제한다.") {
test("정상 삭제") {
val token = loginUtil.loginAsAdmin()
val token = authUtil.loginAsAdmin()
val createdTheme = dummyInitializer.createTheme(
adminToken = token,
request = createRequest
@ -505,7 +505,7 @@ class ThemeApiTest(
test("테마가 없으면 실패한다.") {
runTest(
token = loginUtil.loginAsAdmin(),
token = authUtil.loginAsAdmin(),
on = {
delete("/admin/themes/$INVALID_PK")
},
@ -525,7 +525,7 @@ class ThemeApiTest(
val updateRequest = ThemeUpdateRequest(name = "modified")
beforeTest {
token = loginUtil.loginAsAdmin()
token = authUtil.loginAsAdmin()
createdTheme = dummyInitializer.createTheme(
adminToken = token,
request = createRequest.copy(name = "theme-${Random.nextInt()}")
@ -534,7 +534,7 @@ class ThemeApiTest(
}
test("정상 수정 및 감사 정보 변경 확인") {
val otherAdminToken = loginUtil.login("admin1@admin.com", "admin1", Role.ADMIN)
val otherAdminToken = authUtil.login("admin1@admin.com", "admin1", Role.ADMIN)
runTest(
token = otherAdminToken,
@ -559,7 +559,7 @@ class ThemeApiTest(
test("입력값이 없으면 수정하지 않는다.") {
runTest(
token = loginUtil.loginAsAdmin(),
token = authUtil.loginAsAdmin(),
using = {
body(ThemeUpdateRequest())
},

View File

@ -38,11 +38,11 @@ abstract class FunSpecSpringbootTest : FunSpec({
@LocalServerPort
var port: Int = 0
lateinit var loginUtil: LoginUtil
lateinit var authUtil: AuthUtil
override suspend fun beforeSpec(spec: Spec) {
RestAssured.port = port
loginUtil = LoginUtil(memberRepository)
authUtil = AuthUtil(memberRepository)
}
}

View File

@ -14,7 +14,7 @@ import roomescape.member.infrastructure.persistence.MemberEntity
import roomescape.member.infrastructure.persistence.MemberRepository
import roomescape.member.infrastructure.persistence.Role
class LoginUtil(
class AuthUtil(
private val memberRepository: MemberRepository
) {
fun login(email: String, password: String, role: Role = Role.MEMBER): String {