128 lines
5.6 KiB
Kotlin
128 lines
5.6 KiB
Kotlin
package solutions.bitbadger.documents.common
|
|
|
|
import solutions.bitbadger.documents.*
|
|
import kotlin.test.*
|
|
|
|
/**
|
|
* Integration tests for the `Document` object / `insert`, `save`, `update` connection extension functions
|
|
*/
|
|
object Document {
|
|
|
|
fun insertDefault(db: ThrowawayDatabase) {
|
|
assertEquals(0L, db.conn.countAll(TEST_TABLE), "There should be no documents in the table")
|
|
val doc = JsonDocument("turkey", "", 0, SubDocument("gobble", "gobble"))
|
|
db.conn.insert(TEST_TABLE, doc)
|
|
val after = db.conn.findAll<JsonDocument>(TEST_TABLE)
|
|
assertEquals(1, after.size, "There should be one document in the table")
|
|
assertEquals(doc, after[0], "The document should be what was inserted")
|
|
}
|
|
|
|
fun insertDupe(db: ThrowawayDatabase) {
|
|
db.conn.insert(TEST_TABLE, JsonDocument("a", "", 0, null))
|
|
try {
|
|
db.conn.insert(TEST_TABLE, JsonDocument("a", "b", 22, null))
|
|
fail("Inserting a document with a duplicate key should have thrown an exception")
|
|
} catch (_: Exception) {
|
|
// yay
|
|
}
|
|
}
|
|
|
|
fun insertNumAutoId(db: ThrowawayDatabase) {
|
|
try {
|
|
Configuration.autoIdStrategy = AutoId.NUMBER
|
|
Configuration.idField = "key"
|
|
assertEquals(0L, db.conn.countAll(TEST_TABLE), "There should be no documents in the table")
|
|
|
|
db.conn.insert(TEST_TABLE, NumIdDocument(0, "one"))
|
|
db.conn.insert(TEST_TABLE, NumIdDocument(0, "two"))
|
|
db.conn.insert(TEST_TABLE, NumIdDocument(77, "three"))
|
|
db.conn.insert(TEST_TABLE, NumIdDocument(0, "four"))
|
|
|
|
val after = db.conn.findAll<NumIdDocument>(TEST_TABLE, listOf(Field.named("key")))
|
|
assertEquals(4, after.size, "There should have been 4 documents returned")
|
|
assertEquals(
|
|
"1|2|77|78", after.joinToString("|") { it.key.toString() },
|
|
"The IDs were not generated correctly"
|
|
)
|
|
} finally {
|
|
Configuration.autoIdStrategy = AutoId.DISABLED
|
|
Configuration.idField = "id"
|
|
}
|
|
}
|
|
|
|
fun insertUUIDAutoId(db: ThrowawayDatabase) {
|
|
try {
|
|
Configuration.autoIdStrategy = AutoId.UUID
|
|
assertEquals(0L, db.conn.countAll(TEST_TABLE), "There should be no documents in the table")
|
|
|
|
db.conn.insert(TEST_TABLE, JsonDocument(""))
|
|
|
|
val after = db.conn.findAll<JsonDocument>(TEST_TABLE)
|
|
assertEquals(1, after.size, "There should have been 1 document returned")
|
|
assertEquals(32, after[0].id.length, "The ID was not generated correctly")
|
|
} finally {
|
|
Configuration.autoIdStrategy = AutoId.DISABLED
|
|
}
|
|
}
|
|
|
|
fun insertStringAutoId(db: ThrowawayDatabase) {
|
|
try {
|
|
Configuration.autoIdStrategy = AutoId.RANDOM_STRING
|
|
assertEquals(0L, db.conn.countAll(TEST_TABLE), "There should be no documents in the table")
|
|
|
|
db.conn.insert(TEST_TABLE, JsonDocument(""))
|
|
|
|
Configuration.idStringLength = 21
|
|
db.conn.insert(TEST_TABLE, JsonDocument(""))
|
|
|
|
val after = db.conn.findAll<JsonDocument>(TEST_TABLE)
|
|
assertEquals(2, after.size, "There should have been 2 documents returned")
|
|
assertEquals(16, after[0].id.length, "The first document's ID was not generated correctly")
|
|
assertEquals(21, after[1].id.length, "The second document's ID was not generated correctly")
|
|
} finally {
|
|
Configuration.autoIdStrategy = AutoId.DISABLED
|
|
Configuration.idStringLength = 16
|
|
}
|
|
}
|
|
|
|
fun saveMatch(db: ThrowawayDatabase) {
|
|
JsonDocument.load(db)
|
|
db.conn.save(TEST_TABLE, JsonDocument("two", numValue = 44))
|
|
val doc = db.conn.findById<String, JsonDocument>(TEST_TABLE, "two")
|
|
assertNotNull(doc, "There should have been a document returned")
|
|
assertEquals("two", doc.id, "An incorrect document was returned")
|
|
assertEquals("", doc.value, "The \"value\" field was not updated")
|
|
assertEquals(44, doc.numValue, "The \"numValue\" field was not updated")
|
|
assertNull(doc.sub, "The \"sub\" field was not updated")
|
|
}
|
|
|
|
fun saveNoMatch(db: ThrowawayDatabase) {
|
|
JsonDocument.load(db)
|
|
db.conn.save(TEST_TABLE, JsonDocument("test", sub = SubDocument("a", "b")))
|
|
assertNotNull(
|
|
db.conn.findById<String, JsonDocument>(TEST_TABLE, "test"),
|
|
"The test document should have been saved"
|
|
)
|
|
}
|
|
|
|
fun updateMatch(db: ThrowawayDatabase) {
|
|
JsonDocument.load(db)
|
|
db.conn.update(TEST_TABLE, "one", JsonDocument("one", "howdy", 8, SubDocument("y", "z")))
|
|
val doc = db.conn.findById<String, JsonDocument>(TEST_TABLE, "one")
|
|
assertNotNull(doc, "There should have been a document returned")
|
|
assertEquals("one", doc.id, "An incorrect document was returned")
|
|
assertEquals("howdy", doc.value, "The \"value\" field was not updated")
|
|
assertEquals(8, doc.numValue, "The \"numValue\" field was not updated")
|
|
assertNotNull(doc.sub, "The sub-document should not be null")
|
|
assertEquals("y", doc.sub.foo, "The sub-document \"foo\" field was not updated")
|
|
assertEquals("z", doc.sub.bar, "The sub-document \"bar\" field was not updated")
|
|
}
|
|
|
|
fun updateNoMatch(db: ThrowawayDatabase) {
|
|
JsonDocument.load(db)
|
|
assertFalse { db.conn.existsById(TEST_TABLE, "two-hundred") }
|
|
db.conn.update(TEST_TABLE, "two-hundred", JsonDocument("two-hundred", numValue = 200))
|
|
assertFalse { db.conn.existsById(TEST_TABLE, "two-hundred") }
|
|
}
|
|
}
|