package com.artemzin.qualitymatters.functional_tests.screens;
import android.support.annotation.NonNull;
import com.artemzin.qualitymatters.R;
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.contrib.RecyclerViewActions.actionOnItem;
import static android.support.test.espresso.matcher.ViewMatchers.hasDescendant;
import static android.support.test.espresso.matcher.ViewMatchers.isDisplayed;
import static android.support.test.espresso.matcher.ViewMatchers.withId;
import static android.support.test.espresso.matcher.ViewMatchers.withParent;
import static android.support.test.espresso.matcher.ViewMatchers.withText;
import static com.artemzin.qualitymatters.functional_tests.espresso.ViewActions.noOp;
import static com.artemzin.qualitymatters.functional_tests.espresso.ViewAssertions.recyclerViewShouldHaveItemsCount;
import static org.hamcrest.Matchers.allOf;
import static org.hamcrest.Matchers.not;
public class ItemsScreen {
@NonNull
public ItemsScreen shouldDisplayTitle(@NonNull String title) {
onView(allOf(withText(title), withParent(withId(R.id.toolbar)))).check(matches(isDisplayed()));
return this;
}
@NonNull
public ItemsScreen shouldDisplayItemWithTitle(@NonNull String title) {
onView(withId(R.id.items_content_ui))
.perform(actionOnItem(hasDescendant(
allOf(
withId(R.id.list_item_title_text_view),
withText(title))),
noOp()));
return this;
}
@NonNull
public ItemsScreen shouldDisplayItemWithShortDescription(@NonNull String shortDescription) {
onView(withId(R.id.items_content_ui))
.perform(actionOnItem(hasDescendant(
allOf(
withId(R.id.list_item_short_description_text_view),
withText(shortDescription))),
noOp()));
return this;
}
@NonNull
public ItemsScreen shouldDisplayErrorText() {
onView(withText(R.string.items_loading_error_text)).check(matches(isDisplayed()));
return this;
}
@NonNull
public ItemsScreen shouldDisplayTryAgainButton() {
onView(withId(R.id.items_loading_error_try_again_button)).check(matches(isDisplayed()));
return this;
}
@NonNull
public ItemsScreen clickOnTryAgainButton() {
onView(withId(R.id.items_loading_error_try_again_button)).perform(click());
return this;
}
@NonNull
public ItemsScreen shouldDisplayExpectedAmountOfItems(int itemsCount) {
onView(withId(R.id.items_content_ui)).check(recyclerViewShouldHaveItemsCount(itemsCount));
return this;
}
@NonNull
public ItemsScreen shouldNotDisplayItems() {
onView(withId(R.id.items_content_ui)).check(matches(not(isDisplayed())));
return this;
}
}