package com.hitherejoe.androidboilerplate;
import android.content.Context;
import android.content.Intent;
import android.support.test.InstrumentationRegistry;
import android.support.test.rule.ActivityTestRule;
import android.support.test.runner.AndroidJUnit4;
import com.hitherejoe.androidboilerplate.data.model.Character;
import com.hitherejoe.androidboilerplate.ui.activity.DetailActivity;
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 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.withText;
@RunWith(AndroidJUnit4.class)
public class DetailActivityTest {
public final TestComponentRule component =
new TestComponentRule(InstrumentationRegistry.getTargetContext());
public final ActivityTestRule<DetailActivity> main =
new ActivityTestRule<>(DetailActivity.class, false, false);
@Rule
public TestRule chain = RuleChain.outerRule(component).around(main);
@Test
public void characterCollectionsDisplayed() {
Character mockCharacter = MockModelFabric.makeMockCharacter();
Intent intent = DetailActivity.getStartIntent(
InstrumentationRegistry.getContext(), mockCharacter);
main.launchActivity(intent);
Context context = InstrumentationRegistry.getTargetContext();
String[] tabTitles =
context.getResources().getStringArray(R.array.detail_fragment_titles);
checkTextIsShownInTab(tabTitles[0], mockCharacter.films);
checkTextIsShownInTab(tabTitles[1], mockCharacter.vehicles);
checkTextIsShownInTab(tabTitles[2], mockCharacter.species);
checkTextIsShownInTab(tabTitles[3], mockCharacter.starships);
}
private void checkTextIsShownInTab(String tab, List<String> items) {
onView(withText(tab)).perform(click());
if (items.isEmpty()) {
onView(withText(R.string.text_no_data)).check(matches(isDisplayed()));
} else {
for (String item : items) {
onView(withText(item)).check(matches(isDisplayed()));
}
}
}
}