commit 708661483b61f2d420a6a51c68220c3f5e141d38
parent 4ebc2ee35e0014e7bf1702666e17c873729beb7d
Author: MS <ms@taler.net>
Date: Fri, 5 Jun 2020 17:54:07 +0200
Isolating Exposed issue.
Diffstat:
1 file changed, 97 insertions(+), 0 deletions(-)
diff --git a/nexus/src/test/kotlin/SelfContainedDBTest.kt b/nexus/src/test/kotlin/SelfContainedDBTest.kt
@@ -0,0 +1,96 @@
+import org.jetbrains.exposed.dao.Entity
+import org.jetbrains.exposed.dao.EntityClass
+import org.jetbrains.exposed.dao.IntEntity
+import org.jetbrains.exposed.dao.IntEntityClass
+import org.jetbrains.exposed.dao.id.EntityID
+import org.jetbrains.exposed.dao.id.IdTable
+import org.jetbrains.exposed.dao.id.IntIdTable
+import org.jetbrains.exposed.sql.Database
+import org.jetbrains.exposed.sql.SchemaUtils
+import org.jetbrains.exposed.sql.StdOutSqlLogger
+import org.jetbrains.exposed.sql.addLogger
+import org.jetbrains.exposed.sql.transactions.transaction
+import org.junit.Test
+import java.io.File
+
+/**
+ * Run a block after connecting to the test database.
+ * Cleans up the DB file afterwards.
+ */
+fun withTestDatabase(f: () -> Unit) {
+ val dbfile = "test-db.sqlite3"
+ File(dbfile).also {
+ if (it.exists()) {
+ it.delete()
+ }
+ }
+ Database.connect("jdbc:sqlite:$dbfile", "org.sqlite.JDBC")
+ try {
+ f()
+ }
+ finally {
+ File(dbfile).also {
+ if (it.exists()) {
+ it.delete()
+ }
+ }
+ }
+}
+
+object ContainedTableWithIntId : IntIdTable() {
+ val column = text("column")
+}
+class ContainedEntityWithIntId(id: EntityID<Int>) : IntEntity(id) {
+ companion object : IntEntityClass<ContainedEntityWithIntId>(ContainedTableWithIntId)
+ var column by ContainedTableWithIntId.column
+}
+
+object ContainedTableWithStringId : IdTable<String>() {
+ override val id = varchar("id", 10).entityId()
+ override val primaryKey = PrimaryKey(id, name = "id")
+ val column = text("column")
+
+}
+class ContainedEntityWithStringId(id: EntityID<String>) : Entity<String>(id) {
+ companion object : EntityClass<String, ContainedEntityWithStringId>(ContainedTableWithStringId)
+ var column by ContainedTableWithStringId.column
+}
+
+object ContainingTable : IdTable<String>() {
+ override val id = varchar("id", 10).entityId()
+ override val primaryKey = PrimaryKey(id, name = "id")
+ val referenceStringId = reference("referenceStringId", ContainedTableWithStringId)
+ val referenceIntId = reference("referenceIntId", ContainedTableWithIntId)
+}
+class ContainingEntity(id: EntityID<String>) : Entity<String>(id) {
+ companion object : EntityClass<String, ContainingEntity>(ContainingTable)
+ var referenceStringId by ContainedEntityWithStringId referencedOn ContainingTable.referenceStringId
+ var referenceIntId by ContainedEntityWithIntId referencedOn ContainingTable.referenceIntId
+}
+
+class DBTest {
+ @Test
+ fun facadeConfigTest() {
+ withTestDatabase {
+ transaction {
+ addLogger(StdOutSqlLogger)
+ SchemaUtils.create(
+ ContainingTable,
+ ContainedTableWithIntId,
+ ContainedTableWithStringId
+ )
+ val entityWithIntId = ContainedEntityWithIntId.new {
+ column = "value"
+ }
+ entityWithIntId.flush()
+ val entityWithStringId = ContainedEntityWithStringId.new("contained-id") {
+ column = "another value"
+ }
+ ContainingEntity.new("containing-id") {
+ referenceIntId = entityWithIntId
+ referenceStringId = entityWithStringId
+ }
+ }
+ }
+ }
+}
+\ No newline at end of file