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