Skip to content

Commit

Permalink
Implement basic "Donate" screen test
Browse files Browse the repository at this point in the history
  • Loading branch information
ILIYANGERMANOV committed Jun 11, 2022
1 parent a7f21ef commit d43dab5
Show file tree
Hide file tree
Showing 19 changed files with 109 additions and 74 deletions.
19 changes: 17 additions & 2 deletions app/src/androidTest/java/com/ivy/wallet/compose/IvyComposeTest.kt
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ import androidx.work.testing.WorkManagerTestInitHelper
import com.ivy.frp.test.TestIdlingResource
import com.ivy.frp.test.TestingContext
import com.ivy.frp.view.navigation.Navigation
import com.ivy.wallet.compose.helpers.*
import com.ivy.wallet.io.network.IvySession
import com.ivy.wallet.io.persistence.IvyRoomDatabase
import com.ivy.wallet.io.persistence.SharedPrefs
Expand All @@ -45,6 +46,20 @@ abstract class IvyComposeTest {
val composeTestRule = createAndroidComposeRule<RootActivity>()
// use createAndroidComposeRule<YourActivity>() if you need access to an activity

//----------------------------
protected val onboarding = OnboardingFlow(composeTestRule)
protected val amountInput = AmountInput(composeTestRule)
protected val accountModal = AccountModal(composeTestRule)
protected val mainBottomBar = MainBottomBar(composeTestRule)
protected val transactionFlow = TransactionFlow(composeTestRule)
protected val homeTab = HomeTab(composeTestRule)
protected val accountsTab = AccountsTab(composeTestRule)
protected val editTransactionScreen = TransactionScreen(composeTestRule)
protected val itemStatisticScreen = ItemStatisticScreen(composeTestRule)
protected val reorderModal = ReorderModal(composeTestRule)
protected val deleteConfirmationModal = DeleteConfirmationModal(composeTestRule)
//----------------------------

private var idlingResource: IdlingResource? = null

@Inject
Expand Down Expand Up @@ -125,10 +140,10 @@ abstract class IvyComposeTest {
attempt: Int = 0,
maxAttempts: Int = 3,
firstFailure: Throwable? = null,
test: () -> Unit
test: OnboardingFlow<RootActivity>.() -> Unit
) {
try {
test()
onboarding.test()
} catch (e: Throwable) {
if (attempt < maxAttempts) {
//reset state && retry test
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package com.ivy.wallet.compose.helpers

import androidx.activity.ComponentActivity
import androidx.compose.ui.test.*
import androidx.compose.ui.test.junit4.AndroidComposeTestRule
import androidx.test.ext.junit.rules.ActivityScenarioRule

class DonateScreen<A : ComponentActivity>(
private val composeTestRule: AndroidComposeTestRule<ActivityScenarioRule<A>, A>
) {

fun verifyAmount(text: String): DonateScreen<A> {
composeTestRule.onNodeWithTag("donation_amount")
.assertTextEquals(text)
return this
}

fun clickMinus(): DonateScreen<A> {
composeTestRule.onNodeWithContentDescription("btn_minus")
.performClick()
return this
}

fun clickPlus(): DonateScreen<A> {
composeTestRule.onNodeWithContentDescription("btn_plus")
.performClick()
return this
}

fun clickDonate(): DonateScreen<A> {
composeTestRule.onNodeWithTag("btn_donate")
.assertIsDisplayed()
.performClick()
return this
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -46,9 +46,10 @@ class HomeMoreMenu<A : ComponentActivity>(
).assertTextContains(amount)
}

fun clickSettings() {
fun clickSettings(): SettingsScreen<A> {
composeTestRule.onNodeWithText("Settings")
.performClick()
return SettingsScreen(composeTestRule)
}

fun clickLoans() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,12 @@ import com.ivy.wallet.compose.printTree
class HomeTab<A : ComponentActivity>(
private val composeTestRule: AndroidComposeTestRule<ActivityScenarioRule<A>, A>
) {
fun openMoreMenu(): HomeMoreMenu<A> {
composeTestRule.onNodeWithTag("home_more_menu_arrow")
.performClick()
return HomeMoreMenu(composeTestRule)
}


fun assertBalance(
amount: String,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,12 +44,13 @@ class OnboardingFlow<A : ComponentActivity>(
)
}

fun quickOnboarding() {
fun quickOnboarding(): HomeTab<A> {
chooseOfflineAccount()
clickStartFresh()
setCurrency()
skipAccounts()
skipCategories()
return HomeTab(composeTestRule)
}

fun onboardWith1AccountAnd1Category() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,4 +42,14 @@ class SettingsScreen<A : ComponentActivity>(
.performScrollTo()
.performClick()
}

fun clickDonate(): DonateScreen<A> {
composeTestRule.onNodeWithTag("settings_lazy_column")
.performScrollToIndex(4)

composeTestRule.onNodeWithText("Donate")
.performScrollTo()
.performClick()
return DonateScreen(composeTestRule)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,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.ui.theme.Blue
import com.ivy.wallet.ui.theme.Purple1
import com.ivy.wallet.ui.theme.Purple2
Expand All @@ -13,23 +12,6 @@ import org.junit.Test
@HiltAndroidTest
class AccountsTest : IvyComposeTest() {

private val onboarding = OnboardingFlow(composeTestRule)
private val amountInput = AmountInput(composeTestRule)
private val accountModal = AccountModal(composeTestRule)
private val mainBottomBar = MainBottomBar(composeTestRule)
private val transactionFlow = TransactionFlow(composeTestRule)
private val homeTab = HomeTab(composeTestRule)
private val accountsTab = AccountsTab(composeTestRule)
private val editTransactionScreen = TransactionScreen(composeTestRule)
private val itemStatisticScreen = ItemStatisticScreen(composeTestRule)
private val reorderModal = ReorderModal(composeTestRule)
private val deleteConfirmationModal = DeleteConfirmationModal(composeTestRule)


@Test
fun contextLoads() {
}

@Test
fun CreateAccount() = testWithRetry {
onboarding.quickOnboarding()
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
package com.ivy.wallet.compose.scenario

import com.ivy.wallet.compose.IvyComposeTest
import com.ivy.wallet.compose.helpers.*
import com.ivy.wallet.compose.helpers.BudgetModal
import com.ivy.wallet.compose.helpers.BudgetsScreen
import com.ivy.wallet.compose.helpers.HomeMoreMenu
import com.ivy.wallet.compose.helpers.OnboardingFlow
import dagger.hilt.android.testing.HiltAndroidTest
import org.junit.Test

Expand All @@ -12,7 +15,6 @@ class BudgetsTests : IvyComposeTest() {
private val homeMoreMenu = HomeMoreMenu(composeTestRule)
private val budgetsScreen = BudgetsScreen(composeTestRule)
private val budgetModal = BudgetModal(composeTestRule)
private val deleteConfirmationModal = DeleteConfirmationModal(composeTestRule)

@Test
fun CreateGlobalBudget() = testWithRetry {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,16 +1,12 @@
package com.ivy.wallet.compose.scenario

import com.ivy.wallet.compose.IvyComposeTest
import com.ivy.wallet.compose.helpers.*
import com.ivy.wallet.compose.helpers.TransactionScreen
import dagger.hilt.android.testing.HiltAndroidTest
import org.junit.Test

@HiltAndroidTest
class CalculatorTest : IvyComposeTest() {
private val onboarding = OnboardingFlow(composeTestRule)
private val homeTab = HomeTab(composeTestRule)
private val mainBottomBar = MainBottomBar(composeTestRule)
private val amountInput = AmountInput(composeTestRule)
private val transactionScreen = TransactionScreen(composeTestRule)


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,10 @@ package com.ivy.wallet.compose.scenario
import androidx.compose.ui.test.onNodeWithText
import androidx.compose.ui.test.performClick
import com.ivy.wallet.compose.IvyComposeTest
import com.ivy.wallet.compose.helpers.*
import com.ivy.wallet.compose.helpers.CategoriesScreen
import com.ivy.wallet.compose.helpers.CategoryModal
import com.ivy.wallet.compose.helpers.HomeMoreMenu
import com.ivy.wallet.compose.helpers.OnboardingFlow
import com.ivy.wallet.ui.theme.Blue
import com.ivy.wallet.ui.theme.Blue2
import com.ivy.wallet.ui.theme.Ivy
Expand All @@ -17,9 +20,6 @@ class CategoriesTest : IvyComposeTest() {
private val homeMoreMenu = HomeMoreMenu(composeTestRule)
private val categoryModal = CategoryModal(composeTestRule)
private val categoryScreen = CategoriesScreen(composeTestRule)
private val itemStatisticScreen = ItemStatisticScreen(composeTestRule)
private val deleteConfirmationModal = DeleteConfirmationModal(composeTestRule)
private val reorderModal = ReorderModal(composeTestRule)

@Test
fun contextLoads() = testWithRetry {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package com.ivy.wallet.compose.scenario

import com.ivy.wallet.compose.IvyComposeTest
import dagger.hilt.android.testing.HiltAndroidTest
import org.junit.Test

@HiltAndroidTest
class DonateTest : IvyComposeTest() {
@Test
fun openDonateFromSettings_donate() = testWithRetry {
quickOnboarding()
.openMoreMenu()
.clickSettings()
.clickDonate()
.verifyAmount("$5")
.clickDonate()
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,10 @@ import org.junit.Test
@HiltAndroidTest
class LoansTest : IvyComposeTest() {

private val onboarding = OnboardingFlow(composeTestRule)
private val homeMoreMenu = HomeMoreMenu(composeTestRule)
private val loansScreen = LoansScreen(composeTestRule)
private val loanModal = LoanModal(composeTestRule)
private val loanDetailsScreen = LoanDetailsScreen(composeTestRule)
private val deleteConfirmationModal = DeleteConfirmationModal(composeTestRule)
private val loanRecordModal = LoanRecordModal(composeTestRule)

@Test
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,24 +4,14 @@ import android.icu.util.Currency
import androidx.compose.ui.test.assertIsDisplayed
import androidx.compose.ui.test.hasText
import com.ivy.wallet.compose.IvyComposeTest
import com.ivy.wallet.compose.helpers.AccountsTab
import com.ivy.wallet.compose.helpers.CurrencyPicker
import com.ivy.wallet.compose.helpers.MainBottomBar
import com.ivy.wallet.compose.helpers.OnboardingFlow
import dagger.hilt.android.testing.HiltAndroidTest
import org.junit.Test

@HiltAndroidTest
class OnboardingTest : IvyComposeTest() {

private val onboarding = OnboardingFlow(composeTestRule)
private val currencyPicker = CurrencyPicker(composeTestRule)
private val mainBottomBar = MainBottomBar(composeTestRule)
private val accountsTab = AccountsTab(composeTestRule)

@Test
fun contextLoads() {
}

@Test
fun OnboardingShortestPath() = testWithRetry {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,28 +5,12 @@ import androidx.compose.ui.test.hasText
import androidx.compose.ui.test.onNodeWithTag
import androidx.compose.ui.test.performClick
import com.ivy.wallet.compose.IvyComposeTest
import com.ivy.wallet.compose.helpers.*
import dagger.hilt.android.testing.HiltAndroidTest
import org.junit.Test

@HiltAndroidTest
class OperationsCoreTest : IvyComposeTest() {

private val onboarding = OnboardingFlow(composeTestRule)
private val amountInput = AmountInput(composeTestRule)
private val accountModal = AccountModal(composeTestRule)
private val mainBottomBar = MainBottomBar(composeTestRule)
private val transactionFlow = TransactionFlow(composeTestRule)
private val homeTab = HomeTab(composeTestRule)
private val accountsTab = AccountsTab(composeTestRule)
private val editTransactionScreen = TransactionScreen(composeTestRule)
private val itemStatisticScreen = ItemStatisticScreen(composeTestRule)
private val deleteConfirmationModal = DeleteConfirmationModal(composeTestRule)

@Test
fun contextLoads() {
}

@Test
fun OnboardAndAdjustBalance() = testWithRetry {
onboarding.quickOnboarding()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ import org.junit.Test
@HiltAndroidTest
class OperationsSecondaryTest : IvyComposeTest() {
private val onboardingFlow = OnboardingFlow(composeTestRule)
private val homeTab = HomeTab(composeTestRule)
private val homeMoreMenu = HomeMoreMenu(composeTestRule)
private val savingsGoalModal = SavingsGoalModal(composeTestRule)
private val settingsScreen = SettingsScreen(composeTestRule)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,18 +1,12 @@
package com.ivy.wallet.compose.scenario

import com.ivy.wallet.compose.IvyComposeTest
import com.ivy.wallet.compose.helpers.HomeTab
import com.ivy.wallet.compose.helpers.OnboardingFlow
import com.ivy.wallet.compose.helpers.PieChartScreen
import com.ivy.wallet.compose.helpers.TransactionFlow
import dagger.hilt.android.testing.HiltAndroidTest
import org.junit.Test

@HiltAndroidTest
class PieChartTest : IvyComposeTest() {
private val onboarding = OnboardingFlow(composeTestRule)
private val homeTab = HomeTab(composeTestRule)
private val transactionFlow = TransactionFlow(composeTestRule)
private val pieChartScreen = PieChartScreen(composeTestRule)

@Test
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,10 @@ package com.ivy.wallet.compose.scenario
import androidx.compose.ui.test.onNodeWithTag
import androidx.compose.ui.test.performClick
import com.ivy.wallet.compose.IvyComposeTest
import com.ivy.wallet.compose.helpers.*
import com.ivy.wallet.compose.helpers.EditPlannedScreen
import com.ivy.wallet.compose.helpers.HomeMoreMenu
import com.ivy.wallet.compose.helpers.OnboardingFlow
import com.ivy.wallet.compose.helpers.PlannedPaymentsScreen
import com.ivy.wallet.domain.data.IntervalType
import com.ivy.wallet.domain.data.TransactionType
import com.ivy.wallet.utils.timeNowUTC
Expand All @@ -14,11 +17,7 @@ import org.junit.Test
class PlannedPaymentsTest : IvyComposeTest() {

private val onboardingFlow = OnboardingFlow(composeTestRule)
private val transactionFlow = TransactionFlow(composeTestRule)
private val editPlannedScreen = EditPlannedScreen(composeTestRule)
private val homeTab = HomeTab(composeTestRule)
private val mainBottomBar = MainBottomBar(composeTestRule)
private val deleteConfirmationModal = DeleteConfirmationModal(composeTestRule)
private val homeMoreMenu = HomeMoreMenu(composeTestRule)
private val plannedPaymentsScreen = PlannedPaymentsScreen(composeTestRule)

Expand Down
5 changes: 4 additions & 1 deletion app/src/main/java/com/ivy/wallet/ui/donate/DonateScreen.kt
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.platform.LocalView
import androidx.compose.ui.platform.testTag
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.tooling.preview.Preview
Expand Down Expand Up @@ -141,6 +142,7 @@ private fun DonateOptionPicker(
SpacerHor(width = 12.dp)

IvyText(
modifier = Modifier.testTag("donation_amount"),
text = "$${
when (option) {
DonateOption.DONATE_2 -> 2
Expand Down Expand Up @@ -265,7 +267,8 @@ private fun BoxWithConstraintsScope.DonateButton(
bottom = true, start = false, end = false
)
.padding(horizontal = 20.dp)
.padding(bottom = 16.dp),
.padding(bottom = 16.dp)
.testTag("btn_donate"),
iconStart = R.drawable.ic_donate_crown,
wrapContentMode = false,
iconTint = UI.colors.pure,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -167,6 +167,7 @@ private fun BoxWithConstraintsScope.UI(
.fillMaxSize()
.statusBarsPadding()
.navigationBarsPadding()
.testTag("settings_lazy_column")
) {
stickyHeader {
val nav = navigation()
Expand Down

0 comments on commit d43dab5

Please sign in to comment.