refactor: common.persistence 모듈 분리로 인한 기존 테스트 코드 수정

This commit is contained in:
이상진 2025-09-27 20:19:00 +09:00
parent 07869020be
commit 81572246d2
6 changed files with 948 additions and 954 deletions

View File

@ -1,13 +1,12 @@
package com.sangdol.roomescape.auth package com.sangdol.roomescape.auth
import io.kotest.assertions.throwables.shouldThrow
import io.kotest.core.spec.style.FunSpec
import io.kotest.matchers.shouldBe
import com.sangdol.roomescape.auth.exception.AuthErrorCode import com.sangdol.roomescape.auth.exception.AuthErrorCode
import com.sangdol.roomescape.auth.exception.AuthException import com.sangdol.roomescape.auth.exception.AuthException
import com.sangdol.roomescape.auth.infrastructure.jwt.JwtUtils import com.sangdol.roomescape.auth.infrastructure.jwt.JwtUtils
import com.sangdol.roomescape.common.config.next import com.sangdol.roomescape.supports.IDGenerator
import com.sangdol.roomescape.supports.tsidFactory import io.kotest.assertions.throwables.shouldThrow
import io.kotest.core.spec.style.FunSpec
import io.kotest.matchers.shouldBe
class JwtUtilsTest : FunSpec() { class JwtUtilsTest : FunSpec() {
private val jwtUtils: JwtUtils = JwtUtils( private val jwtUtils: JwtUtils = JwtUtils(
@ -18,7 +17,7 @@ class JwtUtilsTest : FunSpec() {
init { init {
context("종합 테스트") { context("종합 테스트") {
test("Subject + Claim을 담아 토큰을 생성한 뒤 읽어온다.") { test("Subject + Claim을 담아 토큰을 생성한 뒤 읽어온다.") {
val subject = "${tsidFactory.next()}" val subject = "${IDGenerator.create()}"
val claim = mapOf("name" to "sangdol") val claim = mapOf("name" to "sangdol")
jwtUtils.createToken(subject, claim).also { token -> jwtUtils.createToken(subject, claim).also { token ->
@ -32,7 +31,7 @@ class JwtUtilsTest : FunSpec() {
} }
context("실패 테스트") { context("실패 테스트") {
val subject = "${tsidFactory.next()}" val subject = "${IDGenerator.create()}"
val claim = mapOf("name" to "sangdol") val claim = mapOf("name" to "sangdol")
val commonToken = jwtUtils.createToken(subject, claim) val commonToken = jwtUtils.createToken(subject, claim)

View File

@ -1,12 +1,10 @@
package com.sangdol.roomescape.data package com.sangdol.roomescape.data
import org.apache.poi.xssf.usermodel.XSSFWorkbook
import com.sangdol.roomescape.common.config.next
import com.sangdol.roomescape.store.infrastructure.persistence.StoreStatus import com.sangdol.roomescape.store.infrastructure.persistence.StoreStatus
import com.sangdol.roomescape.supports.IDGenerator
import com.sangdol.roomescape.supports.randomPhoneNumber import com.sangdol.roomescape.supports.randomPhoneNumber
import com.sangdol.roomescape.supports.tsidFactory import org.apache.poi.xssf.usermodel.XSSFWorkbook
import java.io.File import java.io.File
import java.nio.file.Paths
import java.time.LocalDateTime import java.time.LocalDateTime
import java.time.ZoneId import java.time.ZoneId
import java.time.format.DateTimeFormatter import java.time.format.DateTimeFormatter
@ -146,7 +144,7 @@ class StoreDataInitializer {
val createdAt = randomLocalDateTime() val createdAt = randomLocalDateTime()
val updatedAt = createdAt val updatedAt = createdAt
val id: Long = tsidFactory.next().also { storeIds.add(it) } val id: Long = IDGenerator.create().also { storeIds.add(it) }
val createdBy = creatableAdminIds.random() val createdBy = creatableAdminIds.random()

View File

@ -1,7 +1,5 @@
package com.sangdol.roomescape.supports package com.sangdol.roomescape.supports
import org.springframework.data.repository.findByIdOrNull
import com.sangdol.roomescape.common.config.next
import com.sangdol.roomescape.payment.business.PaymentWriter import com.sangdol.roomescape.payment.business.PaymentWriter
import com.sangdol.roomescape.payment.infrastructure.client.CardDetail import com.sangdol.roomescape.payment.infrastructure.client.CardDetail
import com.sangdol.roomescape.payment.infrastructure.client.EasyPayDetail import com.sangdol.roomescape.payment.infrastructure.client.EasyPayDetail
@ -31,6 +29,7 @@ import com.sangdol.roomescape.theme.infrastructure.persistence.ThemeRepository
import com.sangdol.roomescape.theme.web.ThemeCreateRequest import com.sangdol.roomescape.theme.web.ThemeCreateRequest
import com.sangdol.roomescape.theme.web.toEntity import com.sangdol.roomescape.theme.web.toEntity
import com.sangdol.roomescape.user.infrastructure.persistence.UserEntity import com.sangdol.roomescape.user.infrastructure.persistence.UserEntity
import org.springframework.data.repository.findByIdOrNull
import java.time.LocalDateTime import java.time.LocalDateTime
class DummyInitializer( class DummyInitializer(
@ -43,7 +42,7 @@ class DummyInitializer(
) { ) {
fun createStore( fun createStore(
id: Long = tsidFactory.next(), id: Long = IDGenerator.create(),
name: String = "행복${randomPhoneNumber()}호점", name: String = "행복${randomPhoneNumber()}호점",
address: String = "강북구 행복로 $name", address: String = "강북구 행복로 $name",
contact: String = randomPhoneNumber(), contact: String = randomPhoneNumber(),
@ -71,11 +70,11 @@ class DummyInitializer(
fun createTheme( fun createTheme(
request: ThemeCreateRequest = ThemeFixture.createRequest request: ThemeCreateRequest = ThemeFixture.createRequest
): ThemeEntity { ): ThemeEntity {
return request.toEntity(tsidFactory.next()).also { themeRepository.save(it) } return request.toEntity(IDGenerator.create()).also { themeRepository.save(it) }
} }
fun createSchedule( fun createSchedule(
storeId: Long = tsidFactory.next(), storeId: Long = IDGenerator.create(),
request: ScheduleCreateRequest = ScheduleFixture.createRequest, request: ScheduleCreateRequest = ScheduleFixture.createRequest,
status: ScheduleStatus = ScheduleStatus.AVAILABLE status: ScheduleStatus = ScheduleStatus.AVAILABLE
): ScheduleEntity { ): ScheduleEntity {
@ -102,7 +101,7 @@ class DummyInitializer(
fun createPendingReservation( fun createPendingReservation(
user: UserEntity, user: UserEntity,
storeId: Long = tsidFactory.next(), storeId: Long = IDGenerator.create(),
themeRequest: ThemeCreateRequest = ThemeFixture.createRequest, themeRequest: ThemeCreateRequest = ThemeFixture.createRequest,
scheduleRequest: ScheduleCreateRequest = ScheduleFixture.createRequest, scheduleRequest: ScheduleCreateRequest = ScheduleFixture.createRequest,
reservationRequest: PendingReservationCreateRequest = ReservationFixture.pendingCreateRequest, reservationRequest: PendingReservationCreateRequest = ReservationFixture.pendingCreateRequest,
@ -129,14 +128,14 @@ class DummyInitializer(
reserverContact = reservationRequest.reserverContact, reserverContact = reservationRequest.reserverContact,
participantCount = reservationRequest.participantCount, participantCount = reservationRequest.participantCount,
requirement = reservationRequest.requirement, requirement = reservationRequest.requirement,
).toEntity(id = tsidFactory.next(), userId = user.id) ).toEntity(id = IDGenerator.create(), userId = user.id)
return reservationRepository.save(reservation) return reservationRepository.save(reservation)
} }
fun createConfirmReservation( fun createConfirmReservation(
user: UserEntity, user: UserEntity,
storeId: Long = tsidFactory.next(), storeId: Long = IDGenerator.create(),
themeRequest: ThemeCreateRequest = ThemeFixture.createRequest, themeRequest: ThemeCreateRequest = ThemeFixture.createRequest,
scheduleRequest: ScheduleCreateRequest = ScheduleFixture.createRequest, scheduleRequest: ScheduleCreateRequest = ScheduleFixture.createRequest,
reservationRequest: PendingReservationCreateRequest = ReservationFixture.pendingCreateRequest, reservationRequest: PendingReservationCreateRequest = ReservationFixture.pendingCreateRequest,

View File

@ -1,10 +1,10 @@
package com.sangdol.roomescape.supports package com.sangdol.roomescape.supports
import com.github.f4b6a3.tsid.TsidFactory import com.github.f4b6a3.tsid.TsidFactory
import com.sangdol.common.persistence.TsidIDGenerator
import com.sangdol.roomescape.admin.infrastructure.persistence.AdminEntity import com.sangdol.roomescape.admin.infrastructure.persistence.AdminEntity
import com.sangdol.roomescape.admin.infrastructure.persistence.AdminPermissionLevel import com.sangdol.roomescape.admin.infrastructure.persistence.AdminPermissionLevel
import com.sangdol.roomescape.admin.infrastructure.persistence.AdminType import com.sangdol.roomescape.admin.infrastructure.persistence.AdminType
import com.sangdol.roomescape.common.config.next
import com.sangdol.roomescape.payment.infrastructure.client.* import com.sangdol.roomescape.payment.infrastructure.client.*
import com.sangdol.roomescape.payment.infrastructure.common.* import com.sangdol.roomescape.payment.infrastructure.common.*
import com.sangdol.roomescape.payment.web.PaymentCancelRequest import com.sangdol.roomescape.payment.web.PaymentCancelRequest
@ -28,7 +28,7 @@ import java.time.LocalTime
import java.time.OffsetDateTime import java.time.OffsetDateTime
const val INVALID_PK: Long = 9999L const val INVALID_PK: Long = 9999L
val tsidFactory = TsidFactory(0) val IDGenerator = TsidIDGenerator(TsidFactory(0))
object StoreFixture { object StoreFixture {
val registerRequest = StoreRegisterRequest( val registerRequest = StoreRegisterRequest(
@ -40,7 +40,7 @@ object StoreFixture {
) )
fun create( fun create(
id: Long = tsidFactory.next(), id: Long = IDGenerator.create(),
name: String = "행복${randomPhoneNumber()}호점", name: String = "행복${randomPhoneNumber()}호점",
address: String = "서울특별시 강북구 행복${randomPhoneNumber()}", address: String = "서울특별시 강북구 행복${randomPhoneNumber()}",
contact: String = randomPhoneNumber(), contact: String = randomPhoneNumber(),
@ -72,12 +72,12 @@ object AdminFixture {
) )
fun createStoreAdmin( fun createStoreAdmin(
id: Long = tsidFactory.next(), id: Long = IDGenerator.create(),
account: String = randomString(), account: String = randomString(),
password: String = "adminPassword", password: String = "adminPassword",
name: String = "admin12345", name: String = "admin12345",
phone: String = randomPhoneNumber(), phone: String = randomPhoneNumber(),
storeId: Long = tsidFactory.next(), storeId: Long = IDGenerator.create(),
permissionLevel: AdminPermissionLevel = AdminPermissionLevel.FULL_ACCESS permissionLevel: AdminPermissionLevel = AdminPermissionLevel.FULL_ACCESS
): AdminEntity { ): AdminEntity {
return create( return create(
@ -93,7 +93,7 @@ object AdminFixture {
} }
fun createHqAdmin( fun createHqAdmin(
id: Long = tsidFactory.next(), id: Long = IDGenerator.create(),
account: String = randomString(), account: String = randomString(),
password: String = "adminPassword", password: String = "adminPassword",
name: String = "admin12345", name: String = "admin12345",
@ -113,13 +113,13 @@ object AdminFixture {
} }
fun create( fun create(
id: Long = tsidFactory.next(), id: Long = IDGenerator.create(),
account: String = randomString(), account: String = randomString(),
password: String = "adminPassword", password: String = "adminPassword",
name: String = "admin", name: String = "admin",
phone: String = randomPhoneNumber(), phone: String = randomPhoneNumber(),
type: AdminType = AdminType.STORE, type: AdminType = AdminType.STORE,
storeId: Long? = tsidFactory.next(), storeId: Long? = IDGenerator.create(),
permissionLevel: AdminPermissionLevel = AdminPermissionLevel.FULL_ACCESS permissionLevel: AdminPermissionLevel = AdminPermissionLevel.FULL_ACCESS
): AdminEntity { ): AdminEntity {
val storeId = if (type == AdminType.HQ) null else storeId val storeId = if (type == AdminType.HQ) null else storeId
@ -144,7 +144,7 @@ object UserFixture {
) )
fun createUser( fun createUser(
id: Long = tsidFactory.next(), id: Long = IDGenerator.create(),
name: String = randomString(), name: String = randomString(),
email: String = randomEmail(), email: String = randomEmail(),
password: String = "a".repeat(MIN_PASSWORD_LENGTH), password: String = "a".repeat(MIN_PASSWORD_LENGTH),
@ -186,7 +186,7 @@ object ThemeFixture {
) )
fun create( fun create(
id: Long = tsidFactory.next(), id: Long = IDGenerator.create(),
name: String = randomString(), name: String = randomString(),
description: String = randomString(), description: String = randomString(),
thumbnailUrl: String = "http://www.bing.com/search?q=fugit", thumbnailUrl: String = "http://www.bing.com/search?q=fugit",
@ -218,15 +218,15 @@ object ScheduleFixture {
val createRequest: ScheduleCreateRequest = ScheduleCreateRequest( val createRequest: ScheduleCreateRequest = ScheduleCreateRequest(
date = LocalDate.now().plusDays(1), date = LocalDate.now().plusDays(1),
time = LocalTime.now(), time = LocalTime.now(),
themeId = tsidFactory.next() themeId = IDGenerator.create()
) )
fun create( fun create(
id: Long = tsidFactory.next(), id: Long = IDGenerator.create(),
date: LocalDate = LocalDate.now().plusDays(1), date: LocalDate = LocalDate.now().plusDays(1),
time: LocalTime = LocalTime.now(), time: LocalTime = LocalTime.now(),
storeId: Long = tsidFactory.next(), storeId: Long = IDGenerator.create(),
themeId: Long = tsidFactory.next() themeId: Long = IDGenerator.create()
): ScheduleEntity = ScheduleEntityFactory.create( ): ScheduleEntity = ScheduleEntityFactory.create(
id = id, id = id,
date = date, date = date,
@ -245,7 +245,7 @@ object PaymentFixture {
) )
val cancelRequest: PaymentCancelRequest = PaymentCancelRequest( val cancelRequest: PaymentCancelRequest = PaymentCancelRequest(
reservationId = tsidFactory.next(), reservationId = IDGenerator.create(),
cancelReason = "cancelReason", cancelReason = "cancelReason",
) )
@ -322,7 +322,7 @@ object PaymentFixture {
object ReservationFixture { object ReservationFixture {
val pendingCreateRequest: PendingReservationCreateRequest = PendingReservationCreateRequest( val pendingCreateRequest: PendingReservationCreateRequest = PendingReservationCreateRequest(
scheduleId = tsidFactory.next(), scheduleId = IDGenerator.create(),
reserverName = "Wilbur Stuart", reserverName = "Wilbur Stuart",
reserverContact = "wilbur@example.com", reserverContact = "wilbur@example.com",
participantCount = 5, participantCount = 5,

View File

@ -1,11 +1,5 @@
package com.sangdol.roomescape.theme package com.sangdol.roomescape.theme
import io.kotest.matchers.collections.shouldContainInOrder
import io.kotest.matchers.collections.shouldHaveSize
import org.hamcrest.CoreMatchers.equalTo
import org.springframework.http.HttpMethod
import org.springframework.http.HttpStatus
import com.sangdol.roomescape.common.config.next
import com.sangdol.roomescape.common.util.DateUtils import com.sangdol.roomescape.common.util.DateUtils
import com.sangdol.roomescape.supports.* import com.sangdol.roomescape.supports.*
import com.sangdol.roomescape.theme.exception.ThemeErrorCode import com.sangdol.roomescape.theme.exception.ThemeErrorCode
@ -14,6 +8,11 @@ import com.sangdol.roomescape.theme.infrastructure.persistence.ThemeRepository
import com.sangdol.roomescape.theme.web.ThemeInfoResponse import com.sangdol.roomescape.theme.web.ThemeInfoResponse
import com.sangdol.roomescape.theme.web.toEntity import com.sangdol.roomescape.theme.web.toEntity
import com.sangdol.roomescape.user.infrastructure.persistence.UserEntity import com.sangdol.roomescape.user.infrastructure.persistence.UserEntity
import io.kotest.matchers.collections.shouldContainInOrder
import io.kotest.matchers.collections.shouldHaveSize
import org.hamcrest.CoreMatchers.equalTo
import org.springframework.http.HttpMethod
import org.springframework.http.HttpStatus
import java.time.LocalDate import java.time.LocalDate
class ThemeApiTest( class ThemeApiTest(
@ -78,7 +77,7 @@ class ThemeApiTest(
val user: UserEntity = testAuthUtil.defaultUser() val user: UserEntity = testAuthUtil.defaultUser()
val themeIds: List<Long> = (1..5).map { val themeIds: List<Long> = (1..5).map {
themeRepository.save(ThemeFixture.createRequest.copy().toEntity(id = tsidFactory.next())).id themeRepository.save(ThemeFixture.createRequest.copy().toEntity(id = IDGenerator.create())).id
} }
val store = dummyInitializer.createStore() val store = dummyInitializer.createStore()