srctree

Robin Linden parent 227f090b 9f770ec9
Add a test for migrating from db version 1 to 2

inlinesplit
buildSrc/src/main/kotlin/Dependencies.kt added: 93, removed: 3, total 90
@@ -75,5 +75,6 @@ object Libraries {
const val runner = "androidx.test:runner:1.2.0"
const val espressoCore = "androidx.test.espresso:espresso-core:3.2.0"
const val androidJUnit = "androidx.test.ext:junit:1.1.1"
const val roomTesting = "androidx.room:room-testing:${Version.room}"
}
 
 
core/build.gradle.kts added: 93, removed: 3, total 90
@@ -12,6 +12,7 @@ android {
targetSdkVersion(AndroidSdk.targetVersion)
versionCode = 1
versionName = "0.1.0"
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
javaCompileOptions {
annotationProcessorOptions {
arguments = mapOf(
@@ -38,6 +39,7 @@ android {
isAbortOnError = true
isWarningsAsErrors = true
}
sourceSets["androidTest"].assets.srcDir(files("$projectDir/schemas"))
}
 
dependencies {
@@ -55,4 +57,8 @@ dependencies {
// Dagger
implementation(Libraries.dagger)
kapt(Libraries.daggerCompiler)
 
androidTestImplementation(Libraries.runner)
androidTestImplementation(Libraries.androidJUnit)
androidTestImplementation(Libraries.roomTesting)
}
 
filename was Deleted added: 93, removed: 3, total 90
@@ -0,0 +1,83 @@
package ltd.evilcorp.core
 
import androidx.room.testing.MigrationTestHelper
import androidx.sqlite.db.framework.FrameworkSQLiteOpenHelperFactory
import androidx.test.platform.app.InstrumentationRegistry
import ltd.evilcorp.core.db.Database
import ltd.evilcorp.core.db.MIGRATION_1_2
import ltd.evilcorp.core.vo.ConnectionStatus
import ltd.evilcorp.core.vo.UserStatus
import org.junit.Assert.assertEquals
import org.junit.Rule
import org.junit.Test
 
fun Boolean.toInt() = if (this) 1 else 0
 
private const val TEST_DB = "migration-test"
 
class DatabaseMigrationTest {
@Rule
@JvmField
val helper: MigrationTestHelper = MigrationTestHelper(
InstrumentationRegistry.getInstrumentation(),
Database::class.java.canonicalName,
FrameworkSQLiteOpenHelperFactory()
)
 
@Test
fun migrate_1_to_2() {
val publicKey = "76518406F6A9F2217E8DC487CC783C25CC16A15EB36FF32E335A235342C48A39"
val name = "robinli"
val statusMessage = "Hello I am robot beep beep boop"
val lastMessage = 100
val status = UserStatus.Busy
val connectionStatus = ConnectionStatus.TCP
val isTyping = true
val avatar = "file:///home/robin/fantastic_bird.png"
 
var db = helper.createDatabase(TEST_DB, 1).apply {
execSQL(
"INSERT INTO contacts VALUES (" +
"'$publicKey'," +
"'$name'," +
"'$statusMessage'," +
"$lastMessage," +
"${status.ordinal}," +
"${connectionStatus.ordinal}," +
"${isTyping.toInt()}," +
"'$avatar'" +
")"
)
}
 
var cursor = db.query("SELECT * FROM contacts")
cursor.moveToFirst()
assertEquals(cursor.columnCount, 8)
assertEquals(publicKey, cursor.getString(0))
assertEquals(name, cursor.getString(1))
assertEquals(statusMessage, cursor.getString(2))
assertEquals(lastMessage, cursor.getInt(3))
assertEquals(status.ordinal, cursor.getInt(4))
assertEquals(connectionStatus.ordinal, cursor.getInt(5))
assertEquals(isTyping.toInt(), cursor.getInt(6))
assertEquals(avatar, cursor.getString(7))
db.close()
 
db = helper.runMigrationsAndValidate(TEST_DB, 2, true, MIGRATION_1_2)
val hasUnreadMessages = false
 
cursor = db.query("SELECT * FROM contacts")
assertEquals(cursor.columnCount, 9)
cursor.moveToFirst()
assertEquals(publicKey, cursor.getString(0))
assertEquals(name, cursor.getString(1))
assertEquals(statusMessage, cursor.getString(2))
assertEquals(lastMessage, cursor.getInt(3))
assertEquals(status.ordinal, cursor.getInt(4))
assertEquals(connectionStatus.ordinal, cursor.getInt(5))
assertEquals(isTyping.toInt(), cursor.getInt(6))
assertEquals(avatar, cursor.getString(7))
assertEquals(hasUnreadMessages.toInt(), cursor.getInt(8))
db.close()
}
}