Test #470

Merged
klaus merged 7 commits from test into main 2026-11-11 07:29:03 +00:00
2 changed files with 87 additions and 2 deletions
Showing only changes of commit c3e5f19cb3 - Show all commits
@@ -17,9 +17,9 @@ class Subtitle(
val language: String,
@Column(nullable = false, length = 16)
val format: String,
@Column(nullable = false, length = 255)
@Column(name = "s3_bucket", nullable = false, length = 255)
val s3Bucket: String,
@Column(nullable = false, length = 255)
@Column(name = "s3_key", nullable = false, length = 255)
val s3Key: String
) {
@Id
@@ -0,0 +1,85 @@
package kr.co.vividnext.sodalive.v2.subtitle
import kr.co.vividnext.sodalive.v2.subtitle.adapter.persistence.Subtitle
import org.hibernate.boot.MetadataSources
import org.hibernate.boot.registry.StandardServiceRegistryBuilder
import org.hibernate.cfg.AvailableSettings
import org.junit.jupiter.api.Assertions.assertEquals
import org.junit.jupiter.api.Assertions.assertTrue
import org.junit.jupiter.api.DisplayName
import org.junit.jupiter.api.Test
import org.springframework.boot.autoconfigure.orm.jpa.HibernateProperties
import org.springframework.boot.autoconfigure.orm.jpa.HibernateSettings
import java.sql.DriverManager
import java.util.UUID
class SubtitleSchemaValidationTest {
@Test
@DisplayName("기존 DDL의 s3_bucket과 s3_key를 실제 Hibernate validate 및 저장 조회에 사용한다")
fun shouldValidateAndUseExistingS3Columns() {
val url = "jdbc:h2:mem:subtitle-schema-${UUID.randomUUID()};MODE=MySQL"
DriverManager.getConnection(url, "sa", "").use { connection ->
connection.createStatement().use {
it.execute(
"""
CREATE TABLE subtitle (
id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
job_id VARCHAR(36) NOT NULL,
language VARCHAR(35) NOT NULL,
format VARCHAR(16) NOT NULL,
s3_bucket VARCHAR(255) NOT NULL,
s3_key VARCHAR(255) NOT NULL,
UNIQUE (job_id, language)
)
""".trimIndent()
)
}
val bootProperties = HibernateProperties().determineHibernateProperties(emptyMap(), HibernateSettings())
val registry = StandardServiceRegistryBuilder()
.applySettings(bootProperties)
.applySetting(AvailableSettings.DRIVER, "org.h2.Driver")
.applySetting(AvailableSettings.URL, url)
.applySetting(AvailableSettings.USER, "sa")
.applySetting(AvailableSettings.PASS, "")
.applySetting(AvailableSettings.DIALECT, "org.hibernate.dialect.H2Dialect")
.applySetting(AvailableSettings.HBM2DDL_AUTO, "validate")
.build()
try {
MetadataSources(registry).addAnnotatedClass(Subtitle::class.java)
.buildMetadata().buildSessionFactory().use { factory ->
val id = factory.openSession().use { session ->
val transaction = session.beginTransaction()
val subtitle = Subtitle(
jobId = "550e8400-e29b-41d4-a716-446655440000",
language = "ko-KR",
format = "SRT",
s3Bucket = "subtitle-media",
s3Key = "subtitles/100/550e8400-e29b-41d4-a716-446655440000/ko.srt"
)
session.persist(subtitle)
transaction.commit()
requireNotNull(subtitle.id)
}
factory.openSession().use { session ->
val stored = session.find(Subtitle::class.java, id)
assertEquals("subtitle-media", stored.s3Bucket)
assertEquals("subtitles/100/550e8400-e29b-41d4-a716-446655440000/ko.srt", stored.s3Key)
}
connection.prepareStatement("SELECT s3_bucket, s3_key FROM subtitle WHERE id = ?").use {
it.setLong(1, id)
it.executeQuery().use { result ->
assertTrue(result.next())
assertEquals("subtitle-media", result.getString("s3_bucket"))
assertEquals(
"subtitles/100/550e8400-e29b-41d4-a716-446655440000/ko.srt",
result.getString("s3_key")
)
}
}
}
} finally {
StandardServiceRegistryBuilder.destroy(registry)
}
}
}
}