diff --git a/src/test/kotlin/roomescape/util/DatabaseCleaner.kt b/src/test/kotlin/roomescape/util/TestDatabaseUtil.kt similarity index 72% rename from src/test/kotlin/roomescape/util/DatabaseCleaner.kt rename to src/test/kotlin/roomescape/util/TestDatabaseUtil.kt index 4fdfe401..0e7aed8d 100644 --- a/src/test/kotlin/roomescape/util/DatabaseCleaner.kt +++ b/src/test/kotlin/roomescape/util/TestDatabaseUtil.kt @@ -2,6 +2,7 @@ package roomescape.util import io.kotest.core.listeners.AfterSpecListener import io.kotest.core.listeners.AfterTestListener +import io.kotest.core.listeners.BeforeSpecListener import io.kotest.core.spec.Spec import io.kotest.core.test.TestCase import io.kotest.core.test.TestResult @@ -11,7 +12,7 @@ import org.springframework.jdbc.core.JdbcTemplate import org.springframework.stereotype.Component @Component -class DatabaseCleaner( +class TestDatabaseUtil( val entityManager: EntityManager, val jdbcTemplate: JdbcTemplate, ) { @@ -21,6 +22,12 @@ class DatabaseCleaner( } } + fun initializeRegion() { + this::class.java.getResource("/schema/region-data.sql")?.readText()?.let { + jdbcTemplate.execute(it) + } + } + fun clear(mode: CleanerMode) { entityManager.clear() @@ -40,7 +47,13 @@ enum class CleanerMode { ALL } -class DatabaseCleanerExtension: AfterTestListener, AfterSpecListener { +class DatabaseCleanerExtension: BeforeSpecListener, AfterTestListener, AfterSpecListener { + + override suspend fun beforeSpec(spec: Spec) { + super.beforeSpec(spec) + getCleaner().initializeRegion() + } + override suspend fun afterTest(testCase: TestCase, result: TestResult) { super.afterTest(testCase, result) getCleaner().clear(CleanerMode.EXCEPT_REGION) @@ -51,9 +64,9 @@ class DatabaseCleanerExtension: AfterTestListener, AfterSpecListener { getCleaner().clear(CleanerMode.ALL) } - private suspend fun getCleaner(): DatabaseCleaner { + private suspend fun getCleaner(): TestDatabaseUtil { return testContextManager().testContext .applicationContext - .getBean(DatabaseCleaner::class.java) + .getBean(TestDatabaseUtil::class.java) } }