From 08a71b071cd0c136f94371bb7a2229f454f19c27 Mon Sep 17 00:00:00 2001 From: mihanentalpo Date: Sun, 24 Aug 2025 21:56:11 +0700 Subject: [PATCH] Automatic public backup: Tests for AutoBackup to public folder --- .../isoron/uhabits/acceptance/BackupTest.kt | 12 ++++++++++++ .../uhabits/acceptance/steps/BackupSteps.kt | 19 ++++++++++++++++++- 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/BackupTest.kt b/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/BackupTest.kt index f24496154..a61e6b5f2 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/BackupTest.kt +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/BackupTest.kt @@ -33,6 +33,8 @@ import org.isoron.uhabits.acceptance.steps.clearDownloadFolder import org.isoron.uhabits.acceptance.steps.copyBackupToDownloadFolder import org.isoron.uhabits.acceptance.steps.exportFullBackup import org.isoron.uhabits.acceptance.steps.importBackupFromDownloadFolder +import org.isoron.uhabits.acceptance.steps.selectPublicBackupFolder +import org.isoron.uhabits.acceptance.steps.verifyBackupInDownloadFolder import org.junit.Test @LargeTest @@ -51,4 +53,14 @@ class BackupTest : BaseUserInterfaceTest() { importBackupFromDownloadFolder() verifyDisplaysText("Wake up early") } + + @Test + fun shouldExportBackupToPublicFolder() { + launchApp() + clearDownloadFolder() + clearBackupFolder() + selectPublicBackupFolder() + exportFullBackup() + verifyBackupInDownloadFolder() + } } diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/steps/BackupSteps.kt b/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/steps/BackupSteps.kt index f98164347..fe96573cb 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/steps/BackupSteps.kt +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/steps/BackupSteps.kt @@ -20,7 +20,9 @@ package org.isoron.uhabits.acceptance.steps import android.os.Build.VERSION.SDK_INT -import android.os.SystemClock.sleep +import android.net.Uri +import androidx.preference.PreferenceManager +import androidx.test.platform.app.InstrumentationRegistry import androidx.test.uiautomator.By import androidx.test.uiautomator.UiSelector import org.isoron.uhabits.BaseUserInterfaceTest.Companion.device @@ -28,6 +30,8 @@ import org.isoron.uhabits.acceptance.steps.CommonSteps.clickText import org.isoron.uhabits.acceptance.steps.CommonSteps.pressBack import org.isoron.uhabits.acceptance.steps.ListHabitsSteps.MenuItem.SETTINGS import org.isoron.uhabits.acceptance.steps.ListHabitsSteps.clickMenu +import org.junit.Assert.assertTrue +import java.io.File const val BACKUP_FOLDER = "/sdcard/Android/data/org.isoron.uhabits/files/Backups/" const val DOWNLOAD_FOLDER = "/sdcard/Download/" @@ -41,6 +45,7 @@ fun exportFullBackup() { fun clearDownloadFolder() { device.executeShellCommand("rm -rf /sdcard/Download") + device.executeShellCommand("mkdir /sdcard/Download") } fun clearBackupFolder() { @@ -52,6 +57,13 @@ fun copyBackupToDownloadFolder() { device.executeShellCommand("chown root $DOWNLOAD_FOLDER") } +fun selectPublicBackupFolder() { + val context = InstrumentationRegistry.getInstrumentation().targetContext + val prefs = PreferenceManager.getDefaultSharedPreferences(context) + val uri = Uri.fromFile(File(DOWNLOAD_FOLDER)) + prefs.edit().putString("publicBackupFolder", uri.toString()).commit() +} + fun importBackupFromDownloadFolder() { clickMenu(SETTINGS) clickText("Import data") @@ -93,6 +105,11 @@ fun importBackupFromDownloadFolder() { } } +fun verifyBackupInDownloadFolder() { + val listing = device.executeShellCommand("ls $DOWNLOAD_FOLDER") + assertTrue(listing.contains("Loop Habits Backup")) +} + fun openLauncher() { device.pressHome() device.waitForIdle()