From e33789ed1548661dfe35133764b3a6864c053474 Mon Sep 17 00:00:00 2001 From: Iliyan Germanov Date: Tue, 23 Nov 2021 16:17:01 +0200 Subject: [PATCH] WIP: Reorder accounts & categories tests (currently failing) --- ...{CategoryScreen.kt => CategoriesScreen.kt} | 8 ++++- .../wallet/compose/helpers/HomeMoreMenu.kt | 5 +++ .../wallet/compose/helpers/ReorderModal.kt | 10 +++--- .../wallet/compose/scenario/AccountsTest.kt | 15 ++++---- .../wallet/compose/scenario/CategoriesTest.kt | 35 +++++++++++++------ .../ivy/wallet/ui/budget/BudgetViewModel.kt | 25 ++++++++++--- .../wallet/ui/category/CategoriesViewModel.kt | 13 +++++++ .../viewmodel/OnboardingViewModel.kt | 12 +++++++ .../wallet/ui/theme/components/ReorderView.kt | 3 +- 9 files changed, 97 insertions(+), 29 deletions(-) rename app/src/androidTest/java/com/ivy/wallet/compose/helpers/{CategoryScreen.kt => CategoriesScreen.kt} (89%) diff --git a/app/src/androidTest/java/com/ivy/wallet/compose/helpers/CategoryScreen.kt b/app/src/androidTest/java/com/ivy/wallet/compose/helpers/CategoriesScreen.kt similarity index 89% rename from app/src/androidTest/java/com/ivy/wallet/compose/helpers/CategoryScreen.kt rename to app/src/androidTest/java/com/ivy/wallet/compose/helpers/CategoriesScreen.kt index 8d34c31ec..35481edc7 100644 --- a/app/src/androidTest/java/com/ivy/wallet/compose/helpers/CategoryScreen.kt +++ b/app/src/androidTest/java/com/ivy/wallet/compose/helpers/CategoriesScreen.kt @@ -6,7 +6,7 @@ import androidx.compose.ui.test.* import androidx.compose.ui.test.junit4.AndroidComposeTestRule import androidx.test.ext.junit.rules.ActivityScenarioRule -class CategoryScreen( +class CategoriesScreen( private val composeTestRule: AndroidComposeTestRule, A> ) { private val categoryModal = CategoryModal(composeTestRule) @@ -50,4 +50,10 @@ class CategoryScreen( .performScrollTo() .performClick() } + + + fun clickReorder() { + composeTestRule.onNodeWithTag("reorder_button") + .performClick() + } } \ No newline at end of file diff --git a/app/src/androidTest/java/com/ivy/wallet/compose/helpers/HomeMoreMenu.kt b/app/src/androidTest/java/com/ivy/wallet/compose/helpers/HomeMoreMenu.kt index 30e9d1d63..08f77a244 100644 --- a/app/src/androidTest/java/com/ivy/wallet/compose/helpers/HomeMoreMenu.kt +++ b/app/src/androidTest/java/com/ivy/wallet/compose/helpers/HomeMoreMenu.kt @@ -25,4 +25,9 @@ class HomeMoreMenu( composeTestRule.onNodeWithText("Budgets") .performClick() } + + fun clickCategories() { + composeTestRule.onNodeWithText("Categories") + .performClick() + } } \ No newline at end of file diff --git a/app/src/androidTest/java/com/ivy/wallet/compose/helpers/ReorderModal.kt b/app/src/androidTest/java/com/ivy/wallet/compose/helpers/ReorderModal.kt index 531103da2..1047ce1ac 100644 --- a/app/src/androidTest/java/com/ivy/wallet/compose/helpers/ReorderModal.kt +++ b/app/src/androidTest/java/com/ivy/wallet/compose/helpers/ReorderModal.kt @@ -1,11 +1,8 @@ package com.ivy.wallet.compose.helpers import androidx.activity.ComponentActivity -import androidx.compose.ui.test.hasContentDescription -import androidx.compose.ui.test.hasTestTag +import androidx.compose.ui.test.* import androidx.compose.ui.test.junit4.AndroidComposeTestRule -import androidx.compose.ui.test.performGesture -import androidx.compose.ui.test.swipeUp import androidx.test.ext.junit.rules.ActivityScenarioRule class ReorderModal( @@ -21,4 +18,9 @@ class ReorderModal( swipeUp() } } + + fun clickDone() { + composeTestRule.onNodeWithTag("reorder_done") + .performClick() + } } \ No newline at end of file diff --git a/app/src/androidTest/java/com/ivy/wallet/compose/scenario/AccountsTest.kt b/app/src/androidTest/java/com/ivy/wallet/compose/scenario/AccountsTest.kt index e2d9752d8..abc24d979 100644 --- a/app/src/androidTest/java/com/ivy/wallet/compose/scenario/AccountsTest.kt +++ b/app/src/androidTest/java/com/ivy/wallet/compose/scenario/AccountsTest.kt @@ -3,7 +3,6 @@ package com.ivy.wallet.compose.scenario import android.icu.util.Currency import com.ivy.wallet.compose.IvyComposeTest import com.ivy.wallet.compose.helpers.* -import com.ivy.wallet.compose.waitSeconds import com.ivy.wallet.ui.theme.Blue import com.ivy.wallet.ui.theme.Purple1 import com.ivy.wallet.ui.theme.Purple2 @@ -154,18 +153,16 @@ class AccountsTest : IvyComposeTest() { ) } - @Ignore("RecyclerView reorder not working with ComposeTestRule") + /** + * semiTest because no actual reordering is being gone + */ + @Ignore @Test - fun ReorderAccounts() { - //TODO: RecyclerView reorder not working + fun ReorderAccounts_semiTest() { onboarding.quickOnboarding() mainBottomBar.clickAccounts() accountsTab.clickReorder() - reorderModal.moveToTop( - itemPosition = 1 - ) - - composeTestRule.waitSeconds(3) + reorderModal.clickDone() } } \ No newline at end of file diff --git a/app/src/androidTest/java/com/ivy/wallet/compose/scenario/CategoriesTest.kt b/app/src/androidTest/java/com/ivy/wallet/compose/scenario/CategoriesTest.kt index 39dbb17d1..ddd704a72 100644 --- a/app/src/androidTest/java/com/ivy/wallet/compose/scenario/CategoriesTest.kt +++ b/app/src/androidTest/java/com/ivy/wallet/compose/scenario/CategoriesTest.kt @@ -8,6 +8,7 @@ import com.ivy.wallet.ui.theme.Blue import com.ivy.wallet.ui.theme.Blue2 import com.ivy.wallet.ui.theme.Ivy import dagger.hilt.android.testing.HiltAndroidTest +import org.junit.Ignore import org.junit.Test @HiltAndroidTest @@ -15,18 +16,21 @@ class CategoriesTest : IvyComposeTest() { private val onboardingFlow = OnboardingFlow(composeTestRule) private val homeMoreMenu = HomeMoreMenu(composeTestRule) private val categoryModal = CategoryModal(composeTestRule) - private val categoryScreen = CategoryScreen(composeTestRule) + private val categoryScreen = CategoriesScreen(composeTestRule) private val itemStatisticScreen = ItemStatisticScreen(composeTestRule) private val deleteConfirmationModal = DeleteConfirmationModal(composeTestRule) + private val reorderModal = ReorderModal(composeTestRule) + + @Test + fun contextLoads() { + } @Test fun CreateCategory() { onboardingFlow.onboardWith1AccountAnd1Category() - homeMoreMenu.clickOpenCloseArrow() + homeMoreMenu.clickCategories() - composeTestRule.onNodeWithText("Categories") - .performClick() composeTestRule.onNodeWithText("Add category") .performClick() @@ -46,8 +50,7 @@ class CategoriesTest : IvyComposeTest() { fun AddSeveralCategories() { onboardingFlow.onboardWith1AccountAnd1Category() homeMoreMenu.clickOpenCloseArrow() - composeTestRule.onNodeWithText("Categories") - .performClick() + homeMoreMenu.clickCategories() categoryScreen.addCategory( categoryName = "Entertainment" @@ -66,8 +69,7 @@ class CategoriesTest : IvyComposeTest() { fun EditCategory() { onboardingFlow.onboardWith1AccountAnd1Category() homeMoreMenu.clickOpenCloseArrow() - composeTestRule.onNodeWithText("Categories") - .performClick() + homeMoreMenu.clickCategories() categoryScreen.clickCategory( categoryName = "Food & Drinks" @@ -96,8 +98,7 @@ class CategoriesTest : IvyComposeTest() { fun DeleteCategory() { onboardingFlow.onboardWith1AccountAnd1Category() homeMoreMenu.clickOpenCloseArrow() - composeTestRule.onNodeWithText("Categories") - .performClick() + homeMoreMenu.clickCategories() categoryScreen.clickCategory( categoryName = "Food & Drinks" @@ -110,4 +111,18 @@ class CategoriesTest : IvyComposeTest() { categoryName = "Food & Drinks" ) } + + /** + * semiTest because no actual reordering is being gone + */ + @Ignore + @Test + fun ReorderCategories_semiTest() { + onboardingFlow.quickOnboarding() + homeMoreMenu.clickOpenCloseArrow() + homeMoreMenu.clickCategories() + + categoryScreen.clickReorder() + reorderModal.clickDone() + } } \ No newline at end of file diff --git a/app/src/main/java/com/ivy/wallet/ui/budget/BudgetViewModel.kt b/app/src/main/java/com/ivy/wallet/ui/budget/BudgetViewModel.kt index 0de0013fd..14784d8d9 100644 --- a/app/src/main/java/com/ivy/wallet/ui/budget/BudgetViewModel.kt +++ b/app/src/main/java/com/ivy/wallet/ui/budget/BudgetViewModel.kt @@ -3,10 +3,7 @@ package com.ivy.wallet.ui.budget import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope -import com.ivy.wallet.base.asLiveData -import com.ivy.wallet.base.getDefaultFIATCurrency -import com.ivy.wallet.base.ioThread -import com.ivy.wallet.base.isNotNullOrBlank +import com.ivy.wallet.base.* import com.ivy.wallet.logic.BudgetCreator import com.ivy.wallet.logic.WalletLogic import com.ivy.wallet.logic.currency.ExchangeRatesLogic @@ -67,6 +64,8 @@ class BudgetViewModel @Inject constructor( fun start() { viewModelScope.launch { + TestIdlingResource.increment() + _categories.value = ioThread { categoryDao.findAll() }!! @@ -118,6 +117,8 @@ class BudgetViewModel @Inject constructor( ) } }!! + + TestIdlingResource.decrement() } } @@ -160,31 +161,45 @@ class BudgetViewModel @Inject constructor( fun createBudget(data: CreateBudgetData) { viewModelScope.launch { + TestIdlingResource.increment() + budgetCreator.createBudget(data) { start() } + + TestIdlingResource.decrement() } } fun editBudget(budget: Budget) { viewModelScope.launch { + TestIdlingResource.increment() + budgetCreator.editBudget(budget) { start() } + + TestIdlingResource.decrement() } } fun deleteBudget(budget: Budget) { viewModelScope.launch { + TestIdlingResource.increment() + budgetCreator.deleteBudget(budget) { start() } + + TestIdlingResource.decrement() } } fun reorder(newOrder: List) { viewModelScope.launch { + TestIdlingResource.increment() + ioThread { newOrder.forEachIndexed { index, item -> budgetDao.save( @@ -200,6 +215,8 @@ class BudgetViewModel @Inject constructor( ioThread { budgetSync.sync() } + + TestIdlingResource.decrement() } } } \ No newline at end of file diff --git a/app/src/main/java/com/ivy/wallet/ui/category/CategoriesViewModel.kt b/app/src/main/java/com/ivy/wallet/ui/category/CategoriesViewModel.kt index 879bf537d..983baf2a6 100644 --- a/app/src/main/java/com/ivy/wallet/ui/category/CategoriesViewModel.kt +++ b/app/src/main/java/com/ivy/wallet/ui/category/CategoriesViewModel.kt @@ -3,6 +3,7 @@ package com.ivy.wallet.ui.category import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope +import com.ivy.wallet.base.TestIdlingResource import com.ivy.wallet.base.asLiveData import com.ivy.wallet.base.ioThread import com.ivy.wallet.logic.CategoryCreator @@ -35,6 +36,8 @@ class CategoriesViewModel @Inject constructor( fun start() { viewModelScope.launch { + TestIdlingResource.increment() + val range = TimePeriod.currentMonth( startDayOfMonth = ivyContext.startDayOfMonth ).toRange(ivyContext.startDayOfMonth) //this must be monthly @@ -62,11 +65,15 @@ class CategoriesViewModel @Inject constructor( ) } }!! + + TestIdlingResource.decrement() } } fun reorder(newOrder: List) { viewModelScope.launch { + TestIdlingResource.increment() + ioThread { newOrder.forEachIndexed { index, categoryData -> categoryDao.save( @@ -82,14 +89,20 @@ class CategoriesViewModel @Inject constructor( ioThread { categorySync.sync() } + + TestIdlingResource.decrement() } } fun createCategory(data: CreateCategoryData) { viewModelScope.launch { + TestIdlingResource.increment() + categoryCreator.createCategory(data) { start() } + + TestIdlingResource.decrement() } } } \ No newline at end of file diff --git a/app/src/main/java/com/ivy/wallet/ui/onboarding/viewmodel/OnboardingViewModel.kt b/app/src/main/java/com/ivy/wallet/ui/onboarding/viewmodel/OnboardingViewModel.kt index c43f32992..c16bc8633 100644 --- a/app/src/main/java/com/ivy/wallet/ui/onboarding/viewmodel/OnboardingViewModel.kt +++ b/app/src/main/java/com/ivy/wallet/ui/onboarding/viewmodel/OnboardingViewModel.kt @@ -122,6 +122,8 @@ class OnboardingViewModel @Inject constructor( _currency.value = defaultCurrency ioThread { + TestIdlingResource.increment() + if (settingsDao.findAll().isEmpty()) { settingsDao.save( Settings( @@ -132,6 +134,8 @@ class OnboardingViewModel @Inject constructor( ) ) } + + TestIdlingResource.decrement() } } @@ -167,6 +171,8 @@ class OnboardingViewModel @Inject constructor( } private suspend fun loginWithGoogleOnServer(idToken: String) { + TestIdlingResource.increment() + val authResponse = restClient.authService.googleSignIn( GoogleSignInRequest( googleIdToken = idToken, @@ -185,6 +191,8 @@ class OnboardingViewModel @Inject constructor( } _opGoogleSignIn.value = OpResult.success(Unit) + + TestIdlingResource.decrement() } fun loginOfflineAccount() { @@ -233,11 +241,15 @@ class OnboardingViewModel @Inject constructor( private suspend fun updateBaseCurrency(baseCurrency: IvyCurrency) { ioThread { + TestIdlingResource.increment() + settingsDao.save( settingsDao.findFirst().copy( currency = baseCurrency.code ) ) + + TestIdlingResource.decrement() } _currency.value = baseCurrency } diff --git a/app/src/main/java/com/ivy/wallet/ui/theme/components/ReorderView.kt b/app/src/main/java/com/ivy/wallet/ui/theme/components/ReorderView.kt index 23e76cbd6..341a8a32d 100644 --- a/app/src/main/java/com/ivy/wallet/ui/theme/components/ReorderView.kt +++ b/app/src/main/java/com/ivy/wallet/ui/theme/components/ReorderView.kt @@ -109,7 +109,8 @@ fun BoxScope.ReorderView( PrimaryAction = { IvyCircleButton( modifier = Modifier - .size(48.dp), + .size(48.dp) + .testTag("reorder_done"), backgroundGradient = GradientGreen, icon = R.drawable.ic_check, tint = White