1+ package nl.nickkoepr.bored.favoritesScreen
2+
3+ /* *
4+ * Tests created for testing the FavoriteScreen composables.
5+ */
6+ import android.content.Context
7+ import androidx.compose.ui.test.assertIsDisplayed
8+ import androidx.compose.ui.test.junit4.createComposeRule
9+ import androidx.compose.ui.test.onNodeWithTag
10+ import androidx.compose.ui.test.onNodeWithText
11+ import androidx.compose.ui.test.performClick
12+ import androidx.test.core.app.ApplicationProvider
13+ import kotlinx.coroutines.ExperimentalCoroutinesApi
14+ import kotlinx.coroutines.test.runTest
15+ import nl.nickkoepr.bored.data.database.repository.DatabaseRepository
16+ import nl.nickkoepr.bored.dummy.DummyActivity
17+ import nl.nickkoepr.bored.dummy.repositories.DummyDatabaseRepository
18+ import nl.nickkoepr.bored.ui.screens.favorites.FavoritesScreen
19+ import nl.nickkoepr.bored.ui.screens.favorites.FavoritesViewModel
20+ import nl.nickkoepr.bored.utils.toPercent
21+ import org.junit.Before
22+ import org.junit.Rule
23+ import org.junit.Test
24+ import nl.nickkoepr.bored.R
25+
26+ class FavoriteScreenTest {
27+ @get:Rule
28+ val composeTestRule = createComposeRule()
29+ private lateinit var dummyDatabase: DatabaseRepository
30+
31+ @Before
32+ fun initScreen () {
33+ dummyDatabase = DummyDatabaseRepository ()
34+ composeTestRule.setContent {
35+ FavoritesScreen ({}, viewModel = FavoritesViewModel (dummyDatabase))
36+ }
37+ }
38+
39+ @OptIn(ExperimentalCoroutinesApi ::class )
40+ @Test
41+ fun favoriteScreen_favoriteCard_isCardDisplayedWithInformation () = runTest {
42+ val activity = DummyActivity .activity1
43+ val type = ApplicationProvider .getApplicationContext<Context >()
44+ .getString(activity.type.label)
45+ dummyDatabase.addFavorite(activity)
46+
47+ // The [icon] at the end of the activity is a placeholder for the favorite star icon.
48+ composeTestRule.onNodeWithText(" ${activity.activity} [icon]" ).assertIsDisplayed()
49+
50+ composeTestRule.onNodeWithText(activity.price.toPercent()).assertIsDisplayed()
51+ composeTestRule.onNodeWithText(type).assertIsDisplayed()
52+ composeTestRule.onNodeWithText(activity.accessibility.toPercent()).assertIsDisplayed()
53+ composeTestRule.onNodeWithText(activity.participants.toString()).assertIsDisplayed()
54+ }
55+
56+ @OptIn(ExperimentalCoroutinesApi ::class )
57+ @Test
58+ fun favoriteScreen_favoriteCard_expandedCardInformation () = runTest {
59+ val context = ApplicationProvider .getApplicationContext<Context >()
60+ val activity = DummyActivity .activity1
61+ dummyDatabase.addFavorite(activity)
62+
63+ composeTestRule.onNodeWithText(" ${activity.activity} [icon]" ).performClick()
64+ // Those four strings are displayed when the activity favorite card is expanded. Otherwise
65+ // only the stats and icons are displayed.
66+ composeTestRule.onNodeWithText(context.getString(R .string.accessibility)).assertIsDisplayed()
67+ composeTestRule.onNodeWithText(context.getString(R .string.participants)).assertIsDisplayed()
68+ composeTestRule.onNodeWithText(context.getString(R .string.price)).assertIsDisplayed()
69+ composeTestRule.onNodeWithText(context.getString(R .string.type)).assertIsDisplayed()
70+ }
71+
72+ @OptIn(ExperimentalCoroutinesApi ::class )
73+ @Test
74+ fun favoriteScreen_favoriteCard_removeCardWhenPressingOnStar () = runTest {
75+ val context = ApplicationProvider .getApplicationContext<Context >()
76+ val activity = DummyActivity .activity1
77+ dummyDatabase.addFavorite(activity)
78+
79+ composeTestRule.onNodeWithTag(" favoriteStarIconButton" ).performClick()
80+ // Check if the No favorites text is displayed on the screen.
81+ // When this text is displayed, then there are no more activities on screen.
82+ composeTestRule.onNodeWithText(context.getString(R .string.no_favorites)).assertIsDisplayed()
83+ }
84+ }
0 commit comments