generated from pricelees/issue-pr-template
<!-- 제목 양식 --> <!-- [이슈번호] 작업 요약 (예시: [#10] Gitea 템플릿 생성) --> ## 📝 관련 이슈 및 PR **PR과 관련된 이슈 번호** - #46 ## ✨ 작업 내용 <!-- 어떤 작업을 했는지 알려주세요! --> - 전체 더미 데이터 추가(관리자 약 2,400건 / 회원 100만건 / 예약, 일정 약 197만건 / 결제 및 결제 상세 196만건(대략 충전식 간편결제 29.3만건, 카드 147만건, 계좌이체 19.6만건) / 테마 500건 / 매장 263건 - 로컬 애플리케이션 실행 후, 가장 병목이 되는 메인 인기 테마 쿼리만 성능 개선(5회 측정시 API 응답 시간 평균 3300 -> 90ms) ## 🧪 테스트 <!-- 어떤 테스트를 생각했고 진행했는지 알려주세요! --> 변경된 기능은 모두 테스트 반영 ## 📚 참고 자료 및 기타 <!-- 참고한 자료, 또는 논의할 사항이 있다면 알려주세요! --> 취소 데이터 등이 들어가있지 않아, 일부 컬럼에서의 Cardinality가 훨씬 낮게 나오는 상황이긴 함. 예약을 예로 들면, 현재는 확정 예약인 데이터만 추가하여 확정 예약이 100%지만, 실제 도메인의 특성상 예약 데이터는 8~90%는 확정 예약일 것으로 생각하여 큰 차이가 없다고 판단하였음. Reviewed-on: #47 Co-authored-by: pricelees <priceelees@gmail.com> Co-committed-by: pricelees <priceelees@gmail.com>
83 lines
2.9 KiB
Kotlin
83 lines
2.9 KiB
Kotlin
package roomescape.supports
|
|
|
|
import io.kotest.core.config.AbstractProjectConfig
|
|
import io.kotest.core.spec.Spec
|
|
import io.kotest.core.spec.style.FunSpec
|
|
import io.kotest.extensions.spring.SpringExtension
|
|
import io.kotest.extensions.spring.SpringTestExtension
|
|
import io.restassured.RestAssured
|
|
import org.springframework.beans.factory.annotation.Autowired
|
|
import org.springframework.boot.test.context.SpringBootTest
|
|
import org.springframework.boot.test.context.TestConfiguration
|
|
import org.springframework.boot.test.web.server.LocalServerPort
|
|
import org.springframework.context.annotation.Bean
|
|
import org.springframework.context.annotation.Import
|
|
import org.springframework.test.context.ActiveProfiles
|
|
import roomescape.admin.infrastructure.persistence.AdminRepository
|
|
import roomescape.payment.business.PaymentWriter
|
|
import roomescape.payment.infrastructure.persistence.PaymentRepository
|
|
import roomescape.reservation.infrastructure.persistence.ReservationRepository
|
|
import roomescape.schedule.infrastructure.persistence.ScheduleRepository
|
|
import roomescape.store.infrastructure.persistence.StoreRepository
|
|
import roomescape.theme.infrastructure.persistence.ThemeRepository
|
|
import roomescape.user.infrastructure.persistence.UserRepository
|
|
|
|
object KotestConfig : AbstractProjectConfig() {
|
|
override fun extensions(): List<SpringTestExtension> = listOf(SpringExtension)
|
|
}
|
|
|
|
@Import(TestConfig::class)
|
|
@ActiveProfiles("test")
|
|
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
|
|
abstract class FunSpecSpringbootTest(
|
|
enableCleanerExtension: Boolean = true,
|
|
) : FunSpec({
|
|
if (enableCleanerExtension) {
|
|
extension(DatabaseCleanerExtension())
|
|
}
|
|
}) {
|
|
@Autowired
|
|
private lateinit var userRepository: UserRepository
|
|
|
|
@Autowired
|
|
private lateinit var adminRepository: AdminRepository
|
|
|
|
@Autowired
|
|
private lateinit var storeRepository: StoreRepository
|
|
|
|
@Autowired
|
|
lateinit var dummyInitializer: DummyInitializer
|
|
|
|
@LocalServerPort
|
|
var port: Int = 0
|
|
|
|
lateinit var testAuthUtil: TestAuthUtil
|
|
|
|
override suspend fun beforeSpec(spec: Spec) {
|
|
RestAssured.port = port
|
|
testAuthUtil = TestAuthUtil(userRepository, adminRepository, storeRepository)
|
|
}
|
|
}
|
|
|
|
@TestConfiguration
|
|
class TestConfig {
|
|
@Bean
|
|
fun dummyInitializer(
|
|
storeRepository: StoreRepository,
|
|
themeRepository: ThemeRepository,
|
|
scheduleRepository: ScheduleRepository,
|
|
reservationRepository: ReservationRepository,
|
|
paymentWriter: PaymentWriter,
|
|
paymentRepository: PaymentRepository
|
|
): DummyInitializer {
|
|
return DummyInitializer(
|
|
themeRepository = themeRepository,
|
|
scheduleRepository = scheduleRepository,
|
|
reservationRepository = reservationRepository,
|
|
paymentWriter = paymentWriter,
|
|
paymentRepository = paymentRepository,
|
|
storeRepository = storeRepository
|
|
)
|
|
}
|
|
}
|