package com.example.orders import android.view.View import androidx.recyclerview.widget.RecyclerView import androidx.test.espresso.Espresso.onView import androidx.test.espresso.action.ViewActions.click import androidx.test.espresso.assertion.ViewAssertions.matches import androidx.test.espresso.contrib.RecyclerViewActions import androidx.test.espresso.matcher.ViewMatchers.hasDescendant import androidx.test.espresso.matcher.ViewMatchers.isDescendantOfA import androidx.test.espresso.matcher.ViewMatchers.isDisplayed import androidx.test.espresso.matcher.ViewMatchers.withId import androidx.test.espresso.matcher.ViewMatchers.withText import androidx.test.ext.junit.rules.ActivityScenarioRule import androidx.test.ext.junit.runners.AndroidJUnit4 import org.hamcrest.Matcher import org.hamcrest.Matchers.allOf import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith @RunWith(AndroidJUnit4::class) class OrderListTest { @get:Rule val activityRule = ActivityScenarioRule(OrderListActivity::class.java) private fun orderRow(orderNumber: String): Matcher = hasDescendant(withText(orderNumber)) @Test fun opensOrderFromRecyclerView() { onView(withId(R.id.ordersRecyclerView)) .perform( RecyclerViewActions.scrollTo( orderRow("Order #1042") ) ) onView( allOf( withText("Order #1042"), isDescendantOfA(withId(R.id.ordersRecyclerView)) ) ).check(matches(isDisplayed())) onView(withId(R.id.ordersRecyclerView)) .perform( RecyclerViewActions.actionOnItem( orderRow("Order #1042"), click() ) ) onView(withId(R.id.orderTitle)) .check(matches(withText("Order #1042"))) } }