package org.gdg.frisbee.android.activity;

import android.support.test.InstrumentationRegistry;
import android.support.test.espresso.ViewInteraction;
import android.support.test.rule.ActivityTestRule;
import android.support.test.runner.AndroidJUnit4;
import android.support.v7.widget.Toolbar;

import org.gdg.frisbee.android.R;
import org.gdg.frisbee.android.api.model.Chapter;
import org.gdg.frisbee.android.chapter.MainActivity;
import org.gdg.frisbee.android.utils.PrefUtils;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;

import static android.support.test.espresso.Espresso.onData;
import static android.support.test.espresso.Espresso.onView;
import static android.support.test.espresso.action.ViewActions.click;
import static android.support.test.espresso.action.ViewActions.swipeLeft;
import static android.support.test.espresso.action.ViewActions.swipeRight;
import static android.support.test.espresso.assertion.ViewAssertions.matches;
import static android.support.test.espresso.matcher.ViewMatchers.isAssignableFrom;
import static android.support.test.espresso.matcher.ViewMatchers.isDescendantOfA;
import static android.support.test.espresso.matcher.ViewMatchers.isRoot;
import static android.support.test.espresso.matcher.ViewMatchers.withId;
import static android.support.test.espresso.matcher.ViewMatchers.withText;
import static org.gdg.frisbee.android.activity.util.OrientationChangeAction.orientationLandscape;
import static org.gdg.frisbee.android.activity.util.OrientationChangeAction.orientationPortrait;
import static org.hamcrest.Matchers.allOf;
import static org.hamcrest.Matchers.containsString;
import static org.hamcrest.Matchers.instanceOf;
import static org.hamcrest.Matchers.is;

@RunWith(AndroidJUnit4.class)
public class MainActivityTest {
    private static final Chapter CHAPTER_ISTANBUL = new Chapter("Istanbul", "100514812580249787371");
    private static final Chapter CHAPTER_BRUSSELS = new Chapter("Brussels", "105068877693379070381");

    @Rule
    public ActivityTestRule<MainActivity> activityRule = new ActivityTestRule<MainActivity>(MainActivity.class) {
        @Override
        protected void beforeActivityLaunched() {
            PrefUtils.setInitialSettings(InstrumentationRegistry.getTargetContext(), false);
            PrefUtils.setHomeChapter(InstrumentationRegistry.getTargetContext(), CHAPTER_BRUSSELS);
        }
    };

    @Test
    public void supportsChapterSwapping() {

        onViewChapterSwitcher().perform(click());
        onData(allOf(is(instanceOf(Chapter.class)), is(CHAPTER_ISTANBUL)))
            .perform(click());
        onViewChapterSwitcher()
            .check(matches(withText(CHAPTER_ISTANBUL.toString())));

        onView(withId(R.id.pager)).perform(swipeRight());
        onView(withId(R.id.tagline)).check(matches(withText(containsString(CHAPTER_ISTANBUL.toString()))));
        onView(withId(R.id.about)).check(matches(withText(containsString(CHAPTER_ISTANBUL.toString()))));
        onView(withId(R.id.pager)).perform(swipeLeft());
    }


    @Test
    public void keepsChapterOnOrientationChange() {
        onView(isRoot()).perform(orientationPortrait(activityRule.getActivity()));

        onViewChapterSwitcher().perform(click());
        onData(allOf(is(instanceOf(Chapter.class)), is(CHAPTER_ISTANBUL)))
            .perform(click());
        onViewChapterSwitcher().check(matches(withText(CHAPTER_ISTANBUL.toString())));

        onView(isRoot()).perform(orientationLandscape(activityRule.getActivity()));

        onViewChapterSwitcher().check(matches(withText(CHAPTER_ISTANBUL.toString())));
    }

    private static ViewInteraction onViewChapterSwitcher() {
        return onView(allOf(withId(android.R.id.text1), isDescendantOfA(isAssignableFrom(Toolbar.class))));
    }
}

@@ -1863,16 +1863,20 @@
 hapter(%22
+GDG 
 Istanbul
@@ -1969,16 +1969,20 @@
 hapter(%22
+GDG 
 Brussels
@@ -2706,32 +2706,31 @@
 ER_ISTANBUL.
-toString
+getName
 ())));%0A%0A    
@@ -3432,32 +3432,31 @@
 ER_ISTANBUL.
-toString
+getName
 ())));%0A%0A    
@@ -3604,32 +3604,31 @@
 ER_ISTANBUL.
-toString
+getName
 ())));%0A    %7D

Fix MainActivity tests by adding GDG prefix.