/* * Copyright (c) 2016 Google Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except * in compliance with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under the License * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express * or implied. See the License for the specific language governing permissions and limitations under * the License. */ package com.google.samples.apps.iosched.feedback; import android.content.Intent; import android.net.Uri; import android.support.test.InstrumentationRegistry; import android.support.test.filters.FlakyTest; import android.support.test.filters.LargeTest; import android.support.test.filters.Suppress; import android.support.test.runner.AndroidJUnit4; import com.google.samples.apps.iosched.R; import com.google.samples.apps.iosched.mockdata.SessionsMockCursor; import com.google.samples.apps.iosched.provider.ScheduleContract; import com.google.samples.apps.iosched.testutils.BaseActivityTestRule; import com.google.samples.apps.iosched.testutils.NavigationUtils; import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; 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.scrollTo; 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 android.support.test.espresso.matcher.ViewMatchers.withText; import static org.hamcrest.CoreMatchers.allOf; import static org.junit.Assert.assertTrue; /** * Tests for {@link SessionFeedbackActivity}. */ @RunWith(AndroidJUnit4.class) @LargeTest public class SessionFeedbackActivityTest { public static final String SESSION_ID = "5b7836c8-82bf-e311-b297-00155d5066d7"; private Uri mSessionUri = ScheduleContract.Sessions.buildSessionUri(SESSION_ID); @Rule public BaseActivityTestRule<SessionFeedbackActivity> mActivityRule = new BaseActivityTestRule<SessionFeedbackActivity>(SessionFeedbackActivity.class, new StubSessionFeedbackModel(mSessionUri, InstrumentationRegistry.getTargetContext(), SessionsMockCursor.getCursorForSessionFeedback(), new FeedbackHelper(InstrumentationRegistry.getTargetContext())), true) { @Override protected Intent getActivityIntent() { // Create intent to load the session. return new Intent(Intent.ACTION_VIEW, mSessionUri); } }; @Test public void sessionTitle_ShowsCorrectTitle() { onView(withId(R.id.feedback_header_session_title)).check(matches( allOf(withText(SessionsMockCursor.FAKE_TITLE), isDisplayed()))); } @Test public void sessionRating_ShowsRating() { onView(withId(R.id.rating_bar_0)).check(matches(isDisplayed())); } @Test public void feedbackQuestions_ShowsAllQuestionsWhenScrolling() { onView(withText(R.string.session_feedback_relevance)).perform(scrollTo()); onView(withText(R.string.session_feedback_relevance)).check(matches(isDisplayed())); onView(withId(R.id.session_relevant_feedback_bar)).check(matches(isDisplayed())); onView(withText(R.string.session_feedback_content_label_text)).perform(scrollTo()); onView(withText(R.string.session_feedback_content_label_text)) .check(matches(isDisplayed())); onView(withId(R.id.content_feedback_bar)).check(matches(isDisplayed())); onView(withText(R.string.session_feedback_speaker_quality)).perform(scrollTo()); onView(withText(R.string.session_feedback_speaker_quality)).check(matches(isDisplayed())); onView(withId(R.id.speaker_feedback_bar)).check(matches(isDisplayed())); onView(withText(R.string.session_feedback_submitlink)).perform(scrollTo()); onView(withText(R.string.session_feedback_submitlink)).check(matches(isDisplayed())); } @Test @Suppress // Checking activity has been destroyed doesn't always work public void clickOnSubmit_ActivityCloses() { // Whether we have feedback data or not, the activity closes upon submitting onView(withText(R.string.session_feedback_submitlink)).perform(scrollTo()); onView(withText(R.string.session_feedback_submitlink)).check(matches(isDisplayed())); onView(withText(R.string.session_feedback_submitlink)).perform(click()); assertTrue(mActivityRule.getActivity().isDestroyed()); } @Test public void navigationIcon_DisplaysAsUp() { NavigationUtils.checkNavigationIconIsUp(); } }