From bd70746278f8134858e0c196af74c245331a981b Mon Sep 17 00:00:00 2001 From: "Alinson S. Xavier" Date: Mon, 28 Dec 2020 18:51:17 -0600 Subject: [PATCH] Fix UUID generation --- .../isoron/uhabits/acceptance/BackupTest.kt | 47 +++++++++++++ .../isoron/uhabits/acceptance/HabitsTest.java | 2 +- .../uhabits/acceptance/steps/BackupSteps.kt | 69 +++++++++++++++++++ .../uhabits/acceptance/steps/CommonSteps.java | 4 +- .../regression/ListHabitsRegressionTest.kt | 2 +- .../org/isoron/uhabits/core/models/Habit.kt | 5 ++ .../isoron/uhabits/core/models/HabitTest.java | 10 +++ 7 files changed, 135 insertions(+), 4 deletions(-) create mode 100644 android/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/BackupTest.kt create mode 100644 android/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/steps/BackupSteps.kt diff --git a/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/BackupTest.kt b/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/BackupTest.kt new file mode 100644 index 000000000..61b97105e --- /dev/null +++ b/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/BackupTest.kt @@ -0,0 +1,47 @@ +/* + * Copyright (C) 2016-2020 Álinson Santos Xavier + * + * This file is part of Loop Habit Tracker. + * + * Loop Habit Tracker is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by the + * Free Software Foundation, either version 3 of the License, or (at your + * option) any later version. + * + * Loop Habit Tracker is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +package org.isoron.uhabits.acceptance + +import androidx.test.filters.* +import org.isoron.uhabits.* +import org.isoron.uhabits.acceptance.steps.* +import org.isoron.uhabits.acceptance.steps.CommonSteps.* +import org.junit.* + +@LargeTest +class BackupTest : BaseUserInterfaceTest() { + @Test + fun shouldExportAndImportBackup() { + launchApp() + clearDownloadFolder() + clearBackupFolder() + exportFullBackup() + copyBackupToDownloadFolder() + + longClickText("Wake up early") + ListHabitsSteps.clickMenu(ListHabitsSteps.MenuItem.DELETE) + clickYes() + verifyDoesNotDisplayText("Wake up early") + + importBackupFromDownloadFolder() + + verifyDisplaysText("Wake up early") + } +} \ No newline at end of file diff --git a/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/HabitsTest.java b/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/HabitsTest.java index d8950ef04..809451b84 100644 --- a/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/HabitsTest.java +++ b/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/HabitsTest.java @@ -89,7 +89,7 @@ public class HabitsTest extends BaseUserInterfaceTest verifyShowsScreen(LIST_HABITS); longClickText("Track time"); clickMenu(DELETE); - clickOK(); + clickYes(); verifyDoesNotDisplayText("Track time"); } diff --git a/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/steps/BackupSteps.kt b/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/steps/BackupSteps.kt new file mode 100644 index 000000000..21979cf21 --- /dev/null +++ b/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/steps/BackupSteps.kt @@ -0,0 +1,69 @@ +/* + * Copyright (C) 2016-2020 Álinson Santos Xavier + * + * This file is part of Loop Habit Tracker. + * + * Loop Habit Tracker is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by the + * Free Software Foundation, either version 3 of the License, or (at your + * option) any later version. + * + * Loop Habit Tracker is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +package org.isoron.uhabits.acceptance.steps + +import androidx.test.uiautomator.* +import org.isoron.uhabits.acceptance.steps.CommonSteps.* +import org.isoron.uhabits.acceptance.steps.ListHabitsSteps.* +import org.isoron.uhabits.acceptance.steps.ListHabitsSteps.MenuItem.* + +const val BACKUP_FOLDER = "/sdcard/Android/data/org.isoron.uhabits/files/Backups/" +const val DOWNLOAD_FOLDER = "/sdcard/Download/" + +fun exportFullBackup() { + clickMenu(SETTINGS) + clickText("Export full backup") + device.pressBack() +} + +fun clearDownloadFolder() { + device.executeShellCommand("rm -rf /sdcard/Download/") +} + +fun clearBackupFolder() { + device.executeShellCommand("rm -rf $BACKUP_FOLDER") +} + +fun copyBackupToDownloadFolder() { + device.executeShellCommand("mv $BACKUP_FOLDER $DOWNLOAD_FOLDER") + device.executeShellCommand("chown root $DOWNLOAD_FOLDER") +} + +fun importBackupFromDownloadFolder() { + clickMenu(SETTINGS) + clickText("Import data") + device.findObject(UiSelector().textContains("Loop")).click() +} + +fun clearAppData() { + openLauncher() + device.findObject(UiSelector().textContains("Habits")).longClick() + device.findObject(UiSelector().textContains("App info")).click() + device.findObject(UiSelector().textContains("Storage")).click() + device.findObject(UiSelector().textContains("Clear storage")).click() +} + +fun openLauncher() { + device.pressHome() + device.waitForIdle() + val h = device.displayHeight + val w = device.displayWidth + device.swipe(w / 2, h / 2, w / 2, 0, 8) +} diff --git a/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/steps/CommonSteps.java b/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/steps/CommonSteps.java index 1e4b1199e..a4fbb824b 100644 --- a/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/steps/CommonSteps.java +++ b/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/steps/CommonSteps.java @@ -43,9 +43,9 @@ import static org.junit.Assert.*; public class CommonSteps extends BaseUserInterfaceTest { - public static void clickOK() + public static void clickYes() { - clickText("OK"); + clickText("Yes"); } public static void pressBack() diff --git a/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/regression/ListHabitsRegressionTest.kt b/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/regression/ListHabitsRegressionTest.kt index 0700bf89f..f3f172b5b 100644 --- a/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/regression/ListHabitsRegressionTest.kt +++ b/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/regression/ListHabitsRegressionTest.kt @@ -41,7 +41,7 @@ class ListHabitsRegressionTest : BaseUserInterfaceTest() { verifyShowsScreen(LIST_HABITS) longClickText("Track time") clickMenu(DELETE) - clickOK() + clickYes() clickMenu(ADD) verifyShowsScreen(SELECT_HABIT_TYPE) diff --git a/android/uhabits-core/src/main/java/org/isoron/uhabits/core/models/Habit.kt b/android/uhabits-core/src/main/java/org/isoron/uhabits/core/models/Habit.kt index 0cda786cc..012f62ca6 100644 --- a/android/uhabits-core/src/main/java/org/isoron/uhabits/core/models/Habit.kt +++ b/android/uhabits-core/src/main/java/org/isoron/uhabits/core/models/Habit.kt @@ -19,6 +19,7 @@ package org.isoron.uhabits.core.models import org.isoron.uhabits.core.utils.* +import java.util.* data class Habit( var color: PaletteColor = PaletteColor(8), @@ -40,6 +41,10 @@ data class Habit( val scores: ScoreList, val streaks: StreakList, ) { + init { + if(uuid == null) this.uuid = UUID.randomUUID().toString().replace("-", ""); + } + var observable = ModelObservable() val isNumerical: Boolean diff --git a/android/uhabits-core/src/test/java/org/isoron/uhabits/core/models/HabitTest.java b/android/uhabits-core/src/test/java/org/isoron/uhabits/core/models/HabitTest.java index dca8795a5..66ad32c87 100644 --- a/android/uhabits-core/src/test/java/org/isoron/uhabits/core/models/HabitTest.java +++ b/android/uhabits-core/src/test/java/org/isoron/uhabits/core/models/HabitTest.java @@ -40,6 +40,16 @@ public class HabitTest extends BaseUnitTest super.setUp(); } + @Test + public void testUuidGeneration() + { + Habit habit1 = modelFactory.buildHabit(); + Habit habit2 = modelFactory.buildHabit(); + assertNotNull(habit1.getUuid()); + assertNotNull(habit2.getUuid()); + assertNotEquals(habit1.getUuid(), habit2.getUuid()); + } + @Test public void test_copyAttributes() {