From cd6f44ca60d986e2ba4ce175f25488e3a7ab6497 Mon Sep 17 00:00:00 2001 From: pricelees Date: Wed, 16 Jul 2025 18:07:07 +0900 Subject: [PATCH] =?UTF-8?q?test:=20Payment=20=EB=B0=8F=20=EA=B4=80?= =?UTF-8?q?=EB=A0=A8=20Fixture=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../member/controller/MemberControllerTest.kt | 7 +- src/test/java/roomescape/util/Fixtures.kt | 127 ++++++++++++++++-- 2 files changed, 123 insertions(+), 11 deletions(-) diff --git a/src/test/java/roomescape/member/controller/MemberControllerTest.kt b/src/test/java/roomescape/member/controller/MemberControllerTest.kt index 7f24f6d8..7eddc94e 100644 --- a/src/test/java/roomescape/member/controller/MemberControllerTest.kt +++ b/src/test/java/roomescape/member/controller/MemberControllerTest.kt @@ -11,6 +11,7 @@ import roomescape.member.web.MemberController import roomescape.member.web.MembersResponse import roomescape.util.MemberFixture import roomescape.util.RoomescapeApiTest +import kotlin.random.Random @WebMvcTest(controllers = [MemberController::class]) class MemberControllerTest( @@ -22,9 +23,9 @@ class MemberControllerTest( val endpoint = "/members" every { memberRepository.findAll() } returns listOf( - MemberFixture.create(name = "name1"), - MemberFixture.create(name = "name2"), - MemberFixture.create(name = "name3"), + MemberFixture.create(id = Random.nextLong(), name = "name1"), + MemberFixture.create(id = Random.nextLong(), name = "name2"), + MemberFixture.create(id = Random.nextLong(), name = "name3"), ) `when`("관리자가 보내면") { diff --git a/src/test/java/roomescape/util/Fixtures.kt b/src/test/java/roomescape/util/Fixtures.kt index 4ae7a6b6..abe061ac 100644 --- a/src/test/java/roomescape/util/Fixtures.kt +++ b/src/test/java/roomescape/util/Fixtures.kt @@ -1,37 +1,81 @@ package roomescape.util -import roomescape.member.infrastructure.persistence.Member -import roomescape.member.infrastructure.persistence.Role import roomescape.auth.infrastructure.jwt.JwtHandler import roomescape.auth.web.LoginRequest -import java.util.concurrent.atomic.AtomicLong +import roomescape.member.infrastructure.persistence.Member +import roomescape.member.infrastructure.persistence.Role +import roomescape.payment.infrastructure.persistence.CanceledPaymentEntity +import roomescape.payment.infrastructure.persistence.PaymentEntity +import roomescape.payment.web.PaymentApprove +import roomescape.payment.web.PaymentCancel +import roomescape.reservation.domain.Reservation +import roomescape.reservation.domain.ReservationStatus +import roomescape.reservation.domain.ReservationTime +import roomescape.theme.domain.Theme +import java.time.LocalDate +import java.time.LocalTime +import java.time.OffsetDateTime +import kotlin.random.Random object MemberFixture { const val NOT_LOGGED_IN_USERID: Long = 0 - val idCounter: AtomicLong = AtomicLong(1L) - fun create( - id: Long? = idCounter.incrementAndGet(), + id: Long? = null, name: String = "sangdol", account: String = "default", password: String = "password", role: Role = Role.ADMIN ): Member = Member(id, name, "$account@email.com", password, role) - fun admin(): Member = create(account = "admin", role = Role.ADMIN) + fun admin(): Member = create( + id = 2L, + account = "admin", + role = Role.ADMIN + ) fun adminLoginRequest(): LoginRequest = LoginRequest( email = admin().email, password = admin().password ) - fun user(): Member = create(account = "user", role = Role.MEMBER) + fun user(): Member = create( + id = 1L, + account = "user", + role = Role.MEMBER + ) fun userLoginRequest(): LoginRequest = LoginRequest( email = user().email, password = user().password ) } +object ReservationTimeFixture { + fun create( + id: Long? = null, + startAt: LocalTime = LocalTime.now().plusHours(1), + ): ReservationTime = ReservationTime(id, startAt) +} + +object ThemeFixture { + fun create( + id: Long? = null, + name: String = "Default Theme", + description: String = "Default Description", + thumbnail: String = "https://example.com/default-thumbnail.jpg" + ): Theme = Theme(id, name, description, thumbnail) +} + +object ReservationFixture { + fun create( + id: Long? = null, + date: LocalDate = LocalDate.now().plusWeeks(1), + theme: Theme = ThemeFixture.create(), + reservationTime: ReservationTime = ReservationTimeFixture.create(), + member: Member = MemberFixture.create(), + status: ReservationStatus = ReservationStatus.CONFIRMED_PAYMENT_REQUIRED + ): Reservation = Reservation(id, date, reservationTime, theme, member, status) +} + object JwtFixture { const val SECRET_KEY: String = "daijawligagaf@LIJ$@U)9nagnalkkgalijaddljfi" const val EXPIRATION_TIME: Long = 1000 * 60 * 60 @@ -41,3 +85,70 @@ object JwtFixture { expirationTime: Long = EXPIRATION_TIME ): JwtHandler = JwtHandler(secretKey, expirationTime) } + +object PaymentFixture { + const val PAYMENT_KEY: String = "paymentKey" + const val ORDER_ID: String = "orderId" + const val AMOUNT: Long = 10000L + + fun create( + id: Long? = null, + orderId: String = ORDER_ID, + paymentKey: String = PAYMENT_KEY, + totalAmount: Long = AMOUNT, + reservationId: Long = Random.nextLong(), + approvedAt: OffsetDateTime = OffsetDateTime.now() + ): PaymentEntity = PaymentEntity( + id = id, + orderId = orderId, + paymentKey = paymentKey, + totalAmount = totalAmount, + reservation = ReservationFixture.create(id = reservationId), + approvedAt = approvedAt + ) + + fun createCanceled( + id: Long? = null, + paymentKey: String = PAYMENT_KEY, + cancelReason: String = "Test Cancel", + cancelAmount: Long = AMOUNT, + approvedAt: OffsetDateTime = OffsetDateTime.now(), + canceledAt: OffsetDateTime = approvedAt.plusHours(1) + ): CanceledPaymentEntity = CanceledPaymentEntity( + id = id, + paymentKey = paymentKey, + cancelReason = cancelReason, + cancelAmount = cancelAmount, + approvedAt = approvedAt, + canceledAt = canceledAt + + ) + + fun createApproveRequest(): PaymentApprove.Request = PaymentApprove.Request( + paymentKey = PAYMENT_KEY, + orderId = ORDER_ID, + amount = AMOUNT, + paymentType = "CARD" + ) + + fun createApproveResponse(): PaymentApprove.Response = PaymentApprove.Response( + paymentKey = PAYMENT_KEY, + orderId = ORDER_ID, + approvedAt = OffsetDateTime.now(), + totalAmount = AMOUNT + ) + + fun createCancelRequest(): PaymentCancel.Request = PaymentCancel.Request( + paymentKey = PAYMENT_KEY, + amount = AMOUNT, + cancelReason = "Test Cancel" + ) + + fun createCancelResponse(): PaymentCancel.Response = PaymentCancel.Response( + cancelStatus = "SUCCESS", + cancelReason = "Test Cancel", + cancelAmount = AMOUNT, + canceledAt = OffsetDateTime.now().plusMinutes(1) + ) +} +