From 89eeefbf0c39f6c962b42ee874acb7bd359dce1e Mon Sep 17 00:00:00 2001 From: pricelees Date: Sat, 27 Sep 2025 20:17:58 +0900 Subject: [PATCH] =?UTF-8?q?refactor:=20=EB=B6=84=EB=A6=AC=ED=95=9C=20commo?= =?UTF-8?q?n.persistence=20=EB=AA=A8=EB=93=88=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=20=EC=BD=94=EB=93=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/persistence/BaseEntityTest.kt | 53 +++++++++++++++++++ .../common/persistence/TestApplication.kt | 6 +++ .../persistence/TestAuditingBaseEntity.kt | 12 +++++ .../persistence/TestPersistableBaseEntity.kt | 12 +++++ .../src/test/resources/application.yaml | 18 +++++++ 5 files changed, 101 insertions(+) create mode 100644 common/persistence/src/test/kotlin/com/sangdol/common/persistence/BaseEntityTest.kt create mode 100644 common/persistence/src/test/kotlin/com/sangdol/common/persistence/TestApplication.kt create mode 100644 common/persistence/src/test/kotlin/com/sangdol/common/persistence/TestAuditingBaseEntity.kt create mode 100644 common/persistence/src/test/kotlin/com/sangdol/common/persistence/TestPersistableBaseEntity.kt create mode 100644 common/persistence/src/test/resources/application.yaml diff --git a/common/persistence/src/test/kotlin/com/sangdol/common/persistence/BaseEntityTest.kt b/common/persistence/src/test/kotlin/com/sangdol/common/persistence/BaseEntityTest.kt new file mode 100644 index 00000000..f0acd755 --- /dev/null +++ b/common/persistence/src/test/kotlin/com/sangdol/common/persistence/BaseEntityTest.kt @@ -0,0 +1,53 @@ +package com.sangdol.common.persistence + +import com.sangdol.common.utils.MdcPrincipalIdUtil +import io.kotest.assertions.assertSoftly +import io.kotest.core.spec.style.FunSpec +import io.kotest.matchers.date.shouldBeBefore +import io.kotest.matchers.equality.shouldBeEqualUsingFields +import io.kotest.matchers.nulls.shouldNotBeNull +import io.kotest.matchers.shouldBe +import org.springframework.boot.test.context.SpringBootTest +import java.time.LocalDateTime + +@SpringBootTest +class BaseEntityTest( + private val testPersistableBaseEntityRepository: TestPersistableBaseEntityRepository, + private val testAuditingBaseEntityRepository: TestAuditingBaseEntityRepository, + private val idGenerator: IDGenerator +) : FunSpec({ + context("TestPersistableBaseEntityRepository") { + test("PK를 지정하여 INSERT 쿼리를 한번만 전송한다.") { + val entity = TestPersistableBaseEntity(idGenerator.create(), "hello").also { + testPersistableBaseEntityRepository.saveAndFlush(it) + } + + testPersistableBaseEntityRepository.findById(entity.id).also { + it.shouldNotBeNull() + it.get() shouldBeEqualUsingFields entity + } + } + } + + context("TestAuditingBaseEntityRepository") { + test("Entity 저장 후 Audit 정보를 확인한다.") { + val id = idGenerator.create() + .also { + MdcPrincipalIdUtil.set(it.toString()) + }.also { + testAuditingBaseEntityRepository.saveAndFlush(TestAuditingBaseEntity(it, "hello")) + } + + testAuditingBaseEntityRepository.findById(id).also { + it.shouldNotBeNull() + + assertSoftly(it.get()) { + this.createdAt shouldBeBefore LocalDateTime.now() + this.updatedAt shouldBeBefore LocalDateTime.now() + this.createdBy shouldBe id + this.updatedBy shouldBe id + } + } + } + } +}) diff --git a/common/persistence/src/test/kotlin/com/sangdol/common/persistence/TestApplication.kt b/common/persistence/src/test/kotlin/com/sangdol/common/persistence/TestApplication.kt new file mode 100644 index 00000000..b2b4176c --- /dev/null +++ b/common/persistence/src/test/kotlin/com/sangdol/common/persistence/TestApplication.kt @@ -0,0 +1,6 @@ +package com.sangdol.common.persistence + +import org.springframework.boot.autoconfigure.SpringBootApplication + +@SpringBootApplication +class TestApplication \ No newline at end of file diff --git a/common/persistence/src/test/kotlin/com/sangdol/common/persistence/TestAuditingBaseEntity.kt b/common/persistence/src/test/kotlin/com/sangdol/common/persistence/TestAuditingBaseEntity.kt new file mode 100644 index 00000000..f58ecf77 --- /dev/null +++ b/common/persistence/src/test/kotlin/com/sangdol/common/persistence/TestAuditingBaseEntity.kt @@ -0,0 +1,12 @@ +package com.sangdol.common.persistence + +import jakarta.persistence.Entity +import org.springframework.data.jpa.repository.JpaRepository + +@Entity +class TestAuditingBaseEntity( + id: Long, + val name: String +): AuditingBaseEntity(id) + +interface TestAuditingBaseEntityRepository: JpaRepository \ No newline at end of file diff --git a/common/persistence/src/test/kotlin/com/sangdol/common/persistence/TestPersistableBaseEntity.kt b/common/persistence/src/test/kotlin/com/sangdol/common/persistence/TestPersistableBaseEntity.kt new file mode 100644 index 00000000..ac97c1c2 --- /dev/null +++ b/common/persistence/src/test/kotlin/com/sangdol/common/persistence/TestPersistableBaseEntity.kt @@ -0,0 +1,12 @@ +package com.sangdol.common.persistence + +import jakarta.persistence.Entity +import org.springframework.data.jpa.repository.JpaRepository + +@Entity +class TestPersistableBaseEntity( + id: Long, + val name: String +): PersistableBaseEntity(id) + +interface TestPersistableBaseEntityRepository: JpaRepository \ No newline at end of file diff --git a/common/persistence/src/test/resources/application.yaml b/common/persistence/src/test/resources/application.yaml new file mode 100644 index 00000000..3a39be3c --- /dev/null +++ b/common/persistence/src/test/resources/application.yaml @@ -0,0 +1,18 @@ +spring: + jpa: + properties: + hibernate: + format_sql: true + hibernate: + ddl-auto: create-drop + show-sql: true + h2: + console: + enabled: true + path: /h2-console + datasource: + hikari: + jdbc-url: jdbc:h2:mem:database + driver-class-name: org.h2.Driver + username: sa + password: \ No newline at end of file