From 0fb33e321637d2e2361b55ce4fc240ff888c31a7 Mon Sep 17 00:00:00 2001 From: Sunik Kupfer Date: Mon, 18 Aug 2025 15:05:54 +0200 Subject: [PATCH] Add comments on foreign key constraint enforcement --- .../bitfire/davdroid/db/migration/DatabaseMigrationTest.kt | 5 +++++ .../at/bitfire/davdroid/db/migration/Migration18Test.kt | 4 +++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/app/src/androidTest/kotlin/at/bitfire/davdroid/db/migration/DatabaseMigrationTest.kt b/app/src/androidTest/kotlin/at/bitfire/davdroid/db/migration/DatabaseMigrationTest.kt index b0940512f..096010345 100644 --- a/app/src/androidTest/kotlin/at/bitfire/davdroid/db/migration/DatabaseMigrationTest.kt +++ b/app/src/androidTest/kotlin/at/bitfire/davdroid/db/migration/DatabaseMigrationTest.kt @@ -61,6 +61,11 @@ abstract class DatabaseMigrationTest( // Prepare the database with the initial version. val dbName = "test" helper.createDatabase(dbName, version = toVersion - 1).apply { + // Foreign key constraint enforcement is disabled by default in SQLite and needs to + // be enabled per connection. For production code room does that for us - in tests we + // need to enable it ourselves. We could enable foreign key constraint enforcement here, + // but it's more practical for the tests to not do so. + // execSQL("PRAGMA foreign_keys=ON;"); prepare(this) close() } diff --git a/app/src/androidTest/kotlin/at/bitfire/davdroid/db/migration/Migration18Test.kt b/app/src/androidTest/kotlin/at/bitfire/davdroid/db/migration/Migration18Test.kt index 852ac171c..522f91c14 100644 --- a/app/src/androidTest/kotlin/at/bitfire/davdroid/db/migration/Migration18Test.kt +++ b/app/src/androidTest/kotlin/at/bitfire/davdroid/db/migration/Migration18Test.kt @@ -91,7 +91,9 @@ class Migration18Test : DatabaseMigrationTest(toVersion = 18) { arrayOf(1, 1, "com.android.contacts", 1234) ) - // Two orphan syncstats rows (collectionId not in collection) + // Insert two orphan syncstats rows (collectionId not in collection) + // We can insert them here because SQLite foreign key constraint enforcement is not active. + // See `testMigration()` for details. db.execSQL( "INSERT INTO syncstats (id, collectionId, authority, lastSync) VALUES (?, ?, ?, ?)", arrayOf(2, 99, "com.android.calendar", 1660521600)