test: Payment 및 관련 Fixture 추가

This commit is contained in:
이상진 2025-07-16 18:07:07 +09:00
parent 54207c2826
commit cd6f44ca60
2 changed files with 123 additions and 11 deletions

View File

@ -11,6 +11,7 @@ import roomescape.member.web.MemberController
import roomescape.member.web.MembersResponse import roomescape.member.web.MembersResponse
import roomescape.util.MemberFixture import roomescape.util.MemberFixture
import roomescape.util.RoomescapeApiTest import roomescape.util.RoomescapeApiTest
import kotlin.random.Random
@WebMvcTest(controllers = [MemberController::class]) @WebMvcTest(controllers = [MemberController::class])
class MemberControllerTest( class MemberControllerTest(
@ -22,9 +23,9 @@ class MemberControllerTest(
val endpoint = "/members" val endpoint = "/members"
every { memberRepository.findAll() } returns listOf( every { memberRepository.findAll() } returns listOf(
MemberFixture.create(name = "name1"), MemberFixture.create(id = Random.nextLong(), name = "name1"),
MemberFixture.create(name = "name2"), MemberFixture.create(id = Random.nextLong(), name = "name2"),
MemberFixture.create(name = "name3"), MemberFixture.create(id = Random.nextLong(), name = "name3"),
) )
`when`("관리자가 보내면") { `when`("관리자가 보내면") {

View File

@ -1,37 +1,81 @@
package roomescape.util package roomescape.util
import roomescape.member.infrastructure.persistence.Member
import roomescape.member.infrastructure.persistence.Role
import roomescape.auth.infrastructure.jwt.JwtHandler import roomescape.auth.infrastructure.jwt.JwtHandler
import roomescape.auth.web.LoginRequest 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 { object MemberFixture {
const val NOT_LOGGED_IN_USERID: Long = 0 const val NOT_LOGGED_IN_USERID: Long = 0
val idCounter: AtomicLong = AtomicLong(1L)
fun create( fun create(
id: Long? = idCounter.incrementAndGet(), id: Long? = null,
name: String = "sangdol", name: String = "sangdol",
account: String = "default", account: String = "default",
password: String = "password", password: String = "password",
role: Role = Role.ADMIN role: Role = Role.ADMIN
): Member = Member(id, name, "$account@email.com", password, role) ): 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( fun adminLoginRequest(): LoginRequest = LoginRequest(
email = admin().email, email = admin().email,
password = admin().password 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( fun userLoginRequest(): LoginRequest = LoginRequest(
email = user().email, email = user().email,
password = user().password 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 { object JwtFixture {
const val SECRET_KEY: String = "daijawligagaf@LIJ$@U)9nagnalkkgalijaddljfi" const val SECRET_KEY: String = "daijawligagaf@LIJ$@U)9nagnalkkgalijaddljfi"
const val EXPIRATION_TIME: Long = 1000 * 60 * 60 const val EXPIRATION_TIME: Long = 1000 * 60 * 60
@ -41,3 +85,70 @@ object JwtFixture {
expirationTime: Long = EXPIRATION_TIME expirationTime: Long = EXPIRATION_TIME
): JwtHandler = JwtHandler(secretKey, expirationTime) ): 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)
)
}