diff --git a/app/build.gradle b/app/build.gradle index 635fb125b..0e28d8fb5 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -101,6 +101,10 @@ android { lint { abortOnError false } + sourceSets { + // Adds exported schema location as test app assets. + androidTest.assets.srcDirs += files("$projectDir/schemas".toString()) + } } // per protobuf-gradle-plugin docs, this is recommended for android @@ -171,7 +175,7 @@ dependencies { // optional - Kotlin Extensions and Coroutines support for Room implementation "androidx.room:room-ktx:$room_version" // optional - Test helpers - testImplementation "androidx.room:room-testing:$room_version" + androidTestImplementation "androidx.room:room-testing:$room_version" // Hilt implementation "com.google.dagger:hilt-android:$hilt_version" diff --git a/app/src/androidTest/java/com/geeksville/mesh/MeshtasticDatabaseTest.kt b/app/src/androidTest/java/com/geeksville/mesh/MeshtasticDatabaseTest.kt new file mode 100644 index 000000000..8990554f0 --- /dev/null +++ b/app/src/androidTest/java/com/geeksville/mesh/MeshtasticDatabaseTest.kt @@ -0,0 +1,44 @@ +package com.geeksville.mesh + +import androidx.room.Room +import androidx.room.testing.MigrationTestHelper +import androidx.test.ext.junit.runners.AndroidJUnit4 +import androidx.test.platform.app.InstrumentationRegistry +import com.geeksville.mesh.database.MeshtasticDatabase +import org.junit.Rule +import org.junit.Test +import org.junit.runner.RunWith +import java.io.IOException + +@RunWith(AndroidJUnit4::class) +class MeshtasticDatabaseTest { + + companion object { + private const val TEST_DB = "migration-test" + } + + @get:Rule + val helper: MigrationTestHelper = MigrationTestHelper( + InstrumentationRegistry.getInstrumentation(), + MeshtasticDatabase::class.java, + ) + + @Test + @Throws(IOException::class) + fun migrateAll() { + // Create earliest version of the database. + helper.createDatabase(TEST_DB, 3).apply { + close() + } + + // Open latest version of the database. Room validates the schema + // once all migrations execute. + Room.databaseBuilder( + InstrumentationRegistry.getInstrumentation().targetContext, + MeshtasticDatabase::class.java, + TEST_DB + ).build().apply { + openHelper.writableDatabase.close() + } + } +}