Use Compose to draw the list of recipes (#187)
* Add paging-compose dependency * Move progress indicator to separate module * Introduce color scheme preview * Move loading helper to UI module * Move helper composables to UI module * Rearrange shopping lists module * Add LazyPagingColumnPullRefresh Composable * Add BaseComposeFragment * Add pagingDataRecipeState * Add showFavoriteIcon to recipe state * Disable unused placeholders * Make "Try again" button optional * Fix example email * Wrap recipe info into a Scaffold * Add dialog to confirm deletion * Add RecipeItem Composable * Add RecipeListError Composable * Add RecipeList Composable * Replace recipes list Views with Compose * Update UI test * Remove application from ViewModel
This commit is contained in:
@@ -1,6 +1,8 @@
|
||||
package gq.kirmanak.mealient
|
||||
|
||||
import androidx.test.ext.junit.rules.activityScenarioRule
|
||||
import androidx.compose.ui.test.junit4.createAndroidComposeRule
|
||||
import com.kaspersky.components.composesupport.config.withComposeSupport
|
||||
import com.kaspersky.kaspresso.kaspresso.Kaspresso
|
||||
import com.kaspersky.kaspresso.testcases.api.testcase.TestCase
|
||||
import dagger.hilt.android.testing.HiltAndroidRule
|
||||
import gq.kirmanak.mealient.ui.activity.MainActivity
|
||||
@@ -9,13 +11,15 @@ import org.junit.After
|
||||
import org.junit.Before
|
||||
import org.junit.Rule
|
||||
|
||||
abstract class BaseTestCase : TestCase() {
|
||||
abstract class BaseTestCase : TestCase(
|
||||
kaspressoBuilder = Kaspresso.Builder.withComposeSupport(),
|
||||
) {
|
||||
|
||||
@get:Rule(order = 0)
|
||||
var hiltRule = HiltAndroidRule(this)
|
||||
|
||||
@get:Rule(order = 1)
|
||||
val mainActivityRule = activityScenarioRule<MainActivity>()
|
||||
val mainActivityRule = createAndroidComposeRule<MainActivity>()
|
||||
|
||||
lateinit var mockWebServer: MockWebServer
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@ import dagger.hilt.android.testing.HiltAndroidTest
|
||||
import gq.kirmanak.mealient.screen.BaseUrlScreen
|
||||
import gq.kirmanak.mealient.screen.DisclaimerScreen
|
||||
import gq.kirmanak.mealient.screen.RecipesListScreen
|
||||
import io.github.kakaocup.kakao.common.utilities.getResourceString
|
||||
import org.junit.Before
|
||||
import org.junit.Test
|
||||
|
||||
@@ -65,10 +66,10 @@ class FirstSetUpTest : BaseTestCase() {
|
||||
}
|
||||
|
||||
step("Check that empty list of recipes is shown") {
|
||||
RecipesListScreen {
|
||||
emptyListText {
|
||||
isVisible()
|
||||
hasText(R.string.fragment_recipes_list_no_recipes)
|
||||
RecipesListScreen(mainActivityRule).apply {
|
||||
errorText {
|
||||
assertIsDisplayed()
|
||||
assertTextEquals(getResourceString(R.string.fragment_recipes_load_failure_toast_no_reason))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,13 +1,20 @@
|
||||
package gq.kirmanak.mealient.screen
|
||||
|
||||
import com.kaspersky.kaspresso.screens.KScreen
|
||||
import gq.kirmanak.mealient.R
|
||||
import gq.kirmanak.mealient.ui.recipes.RecipesListFragment
|
||||
import io.github.kakaocup.kakao.text.KTextView
|
||||
import androidx.activity.ComponentActivity
|
||||
import androidx.compose.ui.test.junit4.AndroidComposeTestRule
|
||||
import androidx.compose.ui.test.onRoot
|
||||
import androidx.compose.ui.test.printToLog
|
||||
import io.github.kakaocup.compose.node.element.ComposeScreen
|
||||
import io.github.kakaocup.compose.node.element.KNode
|
||||
import org.junit.rules.TestRule
|
||||
|
||||
object RecipesListScreen : KScreen<RecipesListScreen>() {
|
||||
override val layoutId: Int = R.layout.fragment_recipes_list
|
||||
override val viewClass: Class<*> = RecipesListFragment::class.java
|
||||
class RecipesListScreen<R : TestRule, A : ComponentActivity>(
|
||||
semanticsProvider: AndroidComposeTestRule<R, A>,
|
||||
) : ComposeScreen<RecipesListScreen<R, A>>(semanticsProvider) {
|
||||
|
||||
val emptyListText = KTextView { withId(R.id.empty_list_text) }
|
||||
init {
|
||||
semanticsProvider.onRoot(useUnmergedTree = true).printToLog("RecipesListScreen")
|
||||
}
|
||||
|
||||
val errorText: KNode = child { hasTestTag("empty-list-error-text") }
|
||||
}
|
||||
Reference in New Issue
Block a user