package com.hitherejoe.androidtvboilerplate; import android.support.test.InstrumentationRegistry; import android.support.test.espresso.contrib.RecyclerViewActions; import android.support.test.rule.ActivityTestRule; import android.support.test.runner.AndroidJUnit4; import com.hitherejoe.androidtvboilerplate.data.model.Cat; import com.hitherejoe.androidtvboilerplate.test.common.TestDataFactory; import com.hitherejoe.androidtvboilerplate.test.common.rules.TestComponentRule; import com.hitherejoe.androidtvboilerplate.ui.content.ContentActivity; import org.junit.Rule; import org.junit.Test; import org.junit.rules.RuleChain; import org.junit.rules.TestRule; import org.junit.runner.RunWith; import java.util.List; import rx.Single; import static android.support.test.espresso.Espresso.onView; import static android.support.test.espresso.action.ViewActions.click; import static android.support.test.espresso.assertion.ViewAssertions.matches; import static android.support.test.espresso.matcher.ViewMatchers.isDisplayed; import static android.support.test.espresso.matcher.ViewMatchers.withId; import static com.hitherejoe.androidtvboilerplate.util.CustomMatchers.withItemText; import static org.mockito.Matchers.anyListOf; import static org.mockito.Mockito.when; @RunWith(AndroidJUnit4.class) public class ContentActivityTest { public final TestComponentRule component = new TestComponentRule(InstrumentationRegistry.getTargetContext()); public final ActivityTestRule<ContentActivity> main = new ActivityTestRule<>(ContentActivity.class, false, false); @Rule public final TestRule chain = RuleChain.outerRule(component).around(main); @Test public void postsDisplayAndAreBrowseable() { List<Cat> mockcats = TestDataFactory.makeCats(5); stubDataManagerGetCats(Single.just(mockcats)); main.launchActivity(null); onView(withId(R.id.browse_headers)) .perform(RecyclerViewActions.actionOnItemAtPosition(0, click())); for (int i = 0; i < mockcats.size(); i++) { checkItemAtPosition(mockcats.get(i), i); } } private void checkItemAtPosition(Cat cat, int position) { if (position > 0) { onView(withItemText(cat.name, R.id.browse_container_dock)).perform(click()); } onView(withItemText(cat.name, R.id.browse_container_dock)) .check(matches(isDisplayed())); onView(withItemText(cat.description, R.id.browse_container_dock)) .check(matches(isDisplayed())); } private void stubDataManagerGetCats(Single<List<Cat>> single) { when(component.getMockDataManager().getCats(anyListOf(Cat.class))) .thenReturn(single); } }