From 81df00565510cb4f007ace54dbb6ea9d9ebfadc5 Mon Sep 17 00:00:00 2001 From: Koitharu Date: Thu, 21 Jul 2022 12:46:24 +0300 Subject: [PATCH] Test restoring an old backup --- app/build.gradle | 2 +- .../androidTest/assets/categories/simple.json | 5 +-- app/src/androidTest/assets/kotatsu_test.bak | Bin 0 -> 6136 bytes .../settings/backup/AppBackupAgentTest.kt | 29 ++++++++++++++++-- 4 files changed, 31 insertions(+), 5 deletions(-) create mode 100755 app/src/androidTest/assets/kotatsu_test.bak diff --git a/app/build.gradle b/app/build.gradle index 5ebd089fc..34cb14f91 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -144,4 +144,4 @@ dependencies { androidTestImplementation 'androidx.room:room-testing:2.4.2' androidTestImplementation 'com.squareup.moshi:moshi-kotlin:1.13.0' -} \ No newline at end of file +} diff --git a/app/src/androidTest/assets/categories/simple.json b/app/src/androidTest/assets/categories/simple.json index 90f6ecf1a..58a2ab058 100644 --- a/app/src/androidTest/assets/categories/simple.json +++ b/app/src/androidTest/assets/categories/simple.json @@ -4,5 +4,6 @@ "sortKey": 1, "order": "NEWEST", "createdAt": 1335906000000, - "isTrackingEnabled": true -} \ No newline at end of file + "isTrackingEnabled": true, + "isVisibleInLibrary": true +} diff --git a/app/src/androidTest/assets/kotatsu_test.bak b/app/src/androidTest/assets/kotatsu_test.bak new file mode 100755 index 0000000000000000000000000000000000000000..a6eae4cdc6a931546d5020bad83b3694184790ea GIT binary patch literal 6136 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 Up^S$9_e|73ZQ;*|P5yWFUpiM!p8x;= literal 0 HcmV?d00001 diff --git a/app/src/androidTest/java/org/koitharu/kotatsu/settings/backup/AppBackupAgentTest.kt b/app/src/androidTest/java/org/koitharu/kotatsu/settings/backup/AppBackupAgentTest.kt index 1d0ca5498..57dd36fd0 100644 --- a/app/src/androidTest/java/org/koitharu/kotatsu/settings/backup/AppBackupAgentTest.kt +++ b/app/src/androidTest/java/org/koitharu/kotatsu/settings/backup/AppBackupAgentTest.kt @@ -1,6 +1,9 @@ package org.koitharu.kotatsu.settings.backup +import android.content.res.AssetManager import androidx.test.ext.junit.runners.AndroidJUnit4 +import androidx.test.platform.app.InstrumentationRegistry +import kotlinx.coroutines.flow.first import kotlinx.coroutines.test.runTest import org.junit.Before import org.junit.Test @@ -14,6 +17,7 @@ import org.koitharu.kotatsu.core.db.MangaDatabase import org.koitharu.kotatsu.core.db.entity.toMangaTags import org.koitharu.kotatsu.favourites.domain.FavouritesRepository import org.koitharu.kotatsu.history.domain.HistoryRepository +import java.io.File import kotlin.test.* @RunWith(AndroidJUnit4::class) @@ -30,7 +34,7 @@ class AppBackupAgentTest : KoinTest { } @Test - fun testBackupRestore() = runTest { + fun backupAndRestore() = runTest { val category = favouritesRepository.createCategory( title = SampleData.favouriteCategory.title, sortOrder = SampleData.favouriteCategory.order, @@ -64,4 +68,25 @@ class AppBackupAgentTest : KoinTest { val allTags = database.tagsDao.findTags(SampleData.tag.source.name).toMangaTags() assertContains(allTags, SampleData.tag) } -} \ No newline at end of file + + @Test + fun restoreOldBackup() { + val agent = AppBackupAgent() + val backup = File.createTempFile("backup_", ".tmp") + InstrumentationRegistry.getInstrumentation().context.assets + .open("kotatsu_test.bak", AssetManager.ACCESS_STREAMING) + .use { input -> + backup.outputStream().use { output -> + input.copyTo(output) + } + } + backup.inputStream().use { + agent.restoreBackupFile(it.fd, backup.length(), backupRepository) + } + runTest { + assertEquals(6, historyRepository.observeAll().first().size) + assertEquals(2, favouritesRepository.observeCategories().first().size) + assertEquals(15, favouritesRepository.getAllManga().size) + } + } +}