package treehou.se.habit.ui.server; import android.support.test.espresso.action.ViewActions; import android.support.test.espresso.contrib.RecyclerViewActions; import android.support.test.runner.AndroidJUnit4; import android.support.test.filters.SmallTest; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import java.util.Random; import treehou.se.habit.DaggerActivityTestRule; import treehou.se.habit.MainActivity; import treehou.se.habit.NavigationUtil; import treehou.se.habit.R; import treehou.se.habit.TestUtil; import static android.support.test.espresso.Espresso.closeSoftKeyboard; import static android.support.test.espresso.Espresso.onView; import static android.support.test.espresso.Espresso.pressBack; import static android.support.test.espresso.action.ViewActions.click; import static android.support.test.espresso.action.ViewActions.longClick; import static android.support.test.espresso.assertion.ViewAssertions.doesNotExist; 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.withText; import static org.hamcrest.Matchers.allOf; import static org.hamcrest.core.AnyOf.anyOf; @RunWith(AndroidJUnit4.class) @SmallTest public class ServersTest { @Rule public DaggerActivityTestRule<MainActivity> activityRule = TestUtil.TestRule(); @Before public void setup(){} private void createServer(String testServerName){ onView(anyOf(allOf(withId(R.id.fab_add), isDisplayed()), allOf(withText(R.string.new_server), isDisplayed()))).perform(click()); onView(withId(R.id.txt_server_name)).perform(ViewActions.typeText(testServerName)); closeSoftKeyboard(); pressBack(); } private void deleteServer(String testServerName){ onView(withId(R.id.list)).perform(RecyclerViewActions.scrollTo(hasDescendant(withText(testServerName)))); onView(withId(R.id.list)).perform(actionOnItem(hasDescendant(withText(testServerName)), longClick())); onView(withText(R.string.ok)).perform(click()); onView(withId(R.id.txt_server_name)).check(doesNotExist()); } @Test public void testCreateRemoveServer() { String testServerName = "Test Server " + new Random().nextInt(10000); NavigationUtil.navigateToServer(); createServer(testServerName); deleteServer(testServerName); } @Test public void testEditServer() { String testServerName = "Test Server " + new Random().nextInt(10000); NavigationUtil.navigateToServer(); createServer(testServerName); onView(withId(R.id.list)).perform(RecyclerViewActions.scrollTo(hasDescendant(withText(testServerName))), actionOnItem(hasDescendant(withText(testServerName)), click())); onView(withText("Edit")).perform(click()); onView(withId(R.id.txt_server_name)).perform(ViewActions.clearText()); onView(withId(R.id.txt_server_name)).perform(ViewActions.typeText(testServerName)); closeSoftKeyboard(); pressBack(); pressBack(); deleteServer(testServerName); } @Test public void testBackButton() { String testServerName = "Test Server " + new Random().nextInt(10000); NavigationUtil.navigateToServer(); createServer(testServerName); closeSoftKeyboard(); onView(withId(R.id.list)).perform(RecyclerViewActions.scrollTo(hasDescendant(withText(testServerName))), actionOnItem(hasDescendant(withText(testServerName)), click())); onView(withText("Edit")).perform(click()); onView(withId(R.id.btn_back)).perform(click()); pressBack(); deleteServer(testServerName); } @Test public void testCreateRemoveMultipleServer() { final int serversToCreate = 8; NavigationUtil.navigateToServer(); String serverBaseName = "Test Server "; for(int i=0; i<serversToCreate; i++){ createServer(serverBaseName+i); } for(int i=0; i<serversToCreate; i++){ deleteServer(serverBaseName+i); } } }