Skip to content

Commit

Permalink
Update instrumentation testing code
Browse files Browse the repository at this point in the history
  • Loading branch information
zavierferodova committed Mar 5, 2021
1 parent fb0740a commit d762b19
Show file tree
Hide file tree
Showing 8 changed files with 166 additions and 34 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,14 @@ package com.zavierdev.cinemacatalogue.ui.detailcinema
import android.content.Intent
import androidx.test.espresso.Espresso.onView
import androidx.test.espresso.IdlingRegistry
import androidx.test.espresso.action.ViewActions.*
import androidx.test.espresso.assertion.ViewAssertions.matches
import androidx.test.espresso.matcher.ViewMatchers.isDisplayed
import androidx.test.espresso.matcher.ViewMatchers.withId
import androidx.test.rule.ActivityTestRule
import com.zavierdev.cinemacatalogue.R
import com.zavierdev.cinemacatalogue.constant.CinemaType
import com.zavierdev.cinemacatalogue.ui.detailcinema.movie.DetailMovieActivity
import com.zavierdev.cinemacatalogue.ui.detailcinema.tvshow.DetailTvShowActivity
import com.zavierdev.cinemacatalogue.utils.EspressoIdlingResource
import org.junit.After
import org.junit.Before
Expand All @@ -19,15 +20,21 @@ import org.junit.runners.JUnit4

@RunWith(JUnit4::class)
class DetailCinemaActivityTest {
private lateinit var activityRule: ActivityTestRule<DetailMovieActivity>
private lateinit var detailMovieActivityRule: ActivityTestRule<DetailMovieActivity>
private lateinit var detailTvShowActivityRule: ActivityTestRule<DetailTvShowActivity>

@Before
fun setup() {
activityRule = ActivityTestRule<DetailMovieActivity>(
detailMovieActivityRule = ActivityTestRule<DetailMovieActivity>(
DetailMovieActivity::class.java,
true, // initialTouchMode
false // launchActivity. False to customize the intent
);
detailTvShowActivityRule = ActivityTestRule<DetailTvShowActivity>(
DetailTvShowActivity::class.java,
true, // initialTouchMode
false // launchActivity. False to customize the intent
);
IdlingRegistry.getInstance().register(EspressoIdlingResource.espressoTestIdlingResource)
}

Expand All @@ -36,40 +43,31 @@ class DetailCinemaActivityTest {
IdlingRegistry.getInstance().unregister(EspressoIdlingResource.espressoTestIdlingResource)
}

private fun startActivityWithIntent(id: Int, type: String) {
private fun startActivityWithIntent(id: Int, type: CinemaType) {
val intent = Intent()
intent.putExtra(DetailMovieActivity.EXTRA_ID, id);
intent.putExtra(DetailMovieActivity.EXTRA_TYPE, type)
activityRule.launchActivity(intent)
when (type) {
CinemaType.MOVIE -> {
intent.putExtra(DetailMovieActivity.EXTRA_ID, id)
detailMovieActivityRule.launchActivity(intent)
}
CinemaType.TVSHOW -> {
intent.putExtra(DetailTvShowActivity.EXTRA_ID, id)
detailTvShowActivityRule.launchActivity(intent)
}
}
}

@Test
fun moviesRenderedDataCheck() {
startActivityWithIntent(728754, "movie")
startActivityWithIntent(728754, CinemaType.MOVIE)
onView(withId(R.id.img_poster)).check(matches(isDisplayed()))
onView(withId(R.id.tv_title)).check(matches(isDisplayed()))
onView(withId(R.id.tv_release_date)).check(matches(isDisplayed()))
onView(withId(R.id.tv_duration)).check(matches(isDisplayed()))
onView(withId(R.id.tv_status)).perform(scrollTo(), click())
onView(withId(R.id.tv_status)).check(matches(isDisplayed()))
onView(withId(R.id.detail_movie_activity_container)).perform(swipeUp())
onView(withId(R.id.rv_genres_item)).check(matches(isDisplayed()))
onView(withId(R.id.rv_credits_item)).check(matches(isDisplayed()))
onView(withId(R.id.tv_overview)).check(matches(isDisplayed()))
}

@Test
fun tvShowsRenderedDataCheck() {
startActivityWithIntent(99048, "tvshow")
startActivityWithIntent(99048, CinemaType.TVSHOW)
onView(withId(R.id.img_poster)).check(matches(isDisplayed()))
onView(withId(R.id.tv_title)).check(matches(isDisplayed()))
onView(withId(R.id.tv_release_date)).check(matches(isDisplayed()))
onView(withId(R.id.tv_duration)).check(matches(isDisplayed()))
onView(withId(R.id.tv_status)).perform(scrollTo(), click())
onView(withId(R.id.tv_status)).check(matches(isDisplayed()))
onView(withId(R.id.detail_movie_activity_container)).perform(swipeUp())
onView(withId(R.id.rv_genres_item)).check(matches(isDisplayed()))
onView(withId(R.id.rv_credits_item)).check(matches(isDisplayed()))
onView(withId(R.id.tv_overview)).check(matches(isDisplayed()))
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
package com.zavierdev.cinemacatalogue.ui.detailcinema.movie

import android.content.Intent
import androidx.test.espresso.Espresso
import androidx.test.espresso.IdlingRegistry
import androidx.test.espresso.assertion.ViewAssertions
import androidx.test.espresso.matcher.ViewMatchers
import androidx.test.rule.ActivityTestRule
import com.zavierdev.cinemacatalogue.R
import com.zavierdev.cinemacatalogue.constant.CinemaType
import com.zavierdev.cinemacatalogue.ui.detailcinema.tvshow.DetailTvShowActivity
import com.zavierdev.cinemacatalogue.utils.EspressoIdlingResource
import org.junit.After
import org.junit.Assert.*
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4

@RunWith(JUnit4::class)
class DetailMovieActivityTest {
private lateinit var detailMovieActivityRule: ActivityTestRule<DetailMovieActivity>

@Before
fun setup() {
detailMovieActivityRule = ActivityTestRule<DetailMovieActivity>(
DetailMovieActivity::class.java,
true, // initialTouchMode
false // launchActivity. False to customize the intent
);
IdlingRegistry.getInstance().register(EspressoIdlingResource.espressoTestIdlingResource)
}

@After
fun tearDown() {
IdlingRegistry.getInstance().unregister(EspressoIdlingResource.espressoTestIdlingResource)
}

private fun startActivityWithIntent(id: Int) {
val intent = Intent()
intent.putExtra(DetailMovieActivity.EXTRA_ID, id)
detailMovieActivityRule.launchActivity(intent)
}

@Test
fun moviesRenderedDataCheck() {
startActivityWithIntent(728754)
Espresso.onView(ViewMatchers.withId(R.id.img_poster))
.check(ViewAssertions.matches(ViewMatchers.isDisplayed()))
Espresso.onView(ViewMatchers.withId(R.id.tv_title))
.check(ViewAssertions.matches(ViewMatchers.isDisplayed()))
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
package com.zavierdev.cinemacatalogue.ui.detailcinema.tvshow

import android.content.Intent
import androidx.test.espresso.Espresso
import androidx.test.espresso.IdlingRegistry
import androidx.test.espresso.assertion.ViewAssertions
import androidx.test.espresso.matcher.ViewMatchers
import androidx.test.rule.ActivityTestRule
import com.zavierdev.cinemacatalogue.R
import com.zavierdev.cinemacatalogue.utils.EspressoIdlingResource
import org.junit.After
import org.junit.Before
import org.junit.Test

class DetailTvShowActivityTest {
private lateinit var detailTvShowActivityRule: ActivityTestRule<DetailTvShowActivity>

@Before
fun setup() {
detailTvShowActivityRule = ActivityTestRule<DetailTvShowActivity>(
DetailTvShowActivity::class.java,
true, // initialTouchMode
false // launchActivity. False to customize the intent
);
IdlingRegistry.getInstance().register(EspressoIdlingResource.espressoTestIdlingResource)
}

@After
fun tearDown() {
IdlingRegistry.getInstance().unregister(EspressoIdlingResource.espressoTestIdlingResource)
}

private fun startActivityWithIntent(id: Int) {
val intent = Intent()
intent.putExtra(DetailTvShowActivity.EXTRA_ID, id)
detailTvShowActivityRule.launchActivity(intent);
}

@Test
fun tvShowsRenderedDataCheck() {
startActivityWithIntent(99048)
Espresso.onView(ViewMatchers.withId(R.id.img_poster))
.check(ViewAssertions.matches(ViewMatchers.isDisplayed()))
Espresso.onView(ViewMatchers.withId(R.id.tv_title))
.check(ViewAssertions.matches(ViewMatchers.isDisplayed()))
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ class FavoriteCinemaFragmentTest {
)

// Action click favorite button and back button
Thread.sleep(2000)
onView(withId(R.id.btn_favorite)).perform(click())
onView(withId(R.id.btn_back)).perform(click())

Expand All @@ -67,6 +68,7 @@ class FavoriteCinemaFragmentTest {
click()
)
)
Thread.sleep(2000)
onView(withId(R.id.btn_favorite)).perform(click())

// Press back button and check favorite_not_found_movie layout is displayed
Expand All @@ -91,6 +93,7 @@ class FavoriteCinemaFragmentTest {
)

// Action click favorite button and back button
Thread.sleep(2000)
onView(withId(R.id.btn_favorite)).perform(click())
onView(withId(R.id.btn_back)).perform(click())

Expand All @@ -106,6 +109,7 @@ class FavoriteCinemaFragmentTest {
click()
)
)
Thread.sleep(2000)
onView(withId(R.id.btn_favorite)).perform(click())

// Press back button and check favorite_not_found_tv_show layout is displayed
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import com.zavierdev.cinemacatalogue.data.source.remote.api.APIConfig
import com.zavierdev.cinemacatalogue.data.source.remote.response.movie.*
import com.zavierdev.cinemacatalogue.utils.EspressoIdlingResource
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.async
import retrofit2.Call
Expand All @@ -24,6 +25,7 @@ class MovieRemoteData() {
val resultDiscoverMovies = MutableLiveData<ApiResponse<List<MovieResultsItem>>>();
val client = APIConfig.getApiService().getDiscoverMovies(APIConfig.API_KEY, APIConfig.LANG)

EspressoIdlingResource.increment()
client.enqueue(object : Callback<MovieDiscoverResponse> {
override fun onResponse(
call: Call<MovieDiscoverResponse>,
Expand All @@ -35,11 +37,13 @@ class MovieRemoteData() {
resultDiscoverMovies.value =
ApiResponse.error("Failed to get discovered movie data", listOf())
}
EspressoIdlingResource.decrement()
}

override fun onFailure(call: Call<MovieDiscoverResponse>, t: Throwable) {
resultDiscoverMovies.value =
ApiResponse.error("Failed to get discovered movie data", listOf())
EspressoIdlingResource.decrement()
}
})

Expand All @@ -50,6 +54,7 @@ class MovieRemoteData() {
val resultDetailMovie = MutableLiveData<ApiResponse<MovieDetailResponse>>()
val client = APIConfig.getApiService().getDetailMovie(id, APIConfig.API_KEY)

EspressoIdlingResource.increment()
client.enqueue(object : Callback<MovieDetailResponse> {
override fun onResponse(
call: Call<MovieDetailResponse>,
Expand All @@ -61,11 +66,13 @@ class MovieRemoteData() {
resultDetailMovie.value =
ApiResponse.error("Failed to get detail movie data", response.body()!!)
}
EspressoIdlingResource.decrement()
}

override fun onFailure(call: Call<MovieDetailResponse>, t: Throwable) {
resultDetailMovie.value =
ApiResponse.error("Failed to get detail movie data", MovieDetailResponse())
EspressoIdlingResource.decrement()
}
})

Expand All @@ -76,6 +83,7 @@ class MovieRemoteData() {
val resultCreditsMovie = MutableLiveData<ApiResponse<MovieCreditsResponse>>()
val client = APIConfig.getApiService().getCreditsMovie(id, APIConfig.API_KEY)

EspressoIdlingResource.increment()
client.enqueue(object : Callback<MovieCreditsResponse> {
override fun onResponse(
call: Call<MovieCreditsResponse>,
Expand All @@ -87,11 +95,13 @@ class MovieRemoteData() {
resultCreditsMovie.value =
ApiResponse.error("Failed to get credits movie data", response.body()!!)
}
EspressoIdlingResource.decrement()
}

override fun onFailure(call: Call<MovieCreditsResponse>, t: Throwable) {
resultCreditsMovie.value =
ApiResponse.error("Failed to get credits movie data", MovieCreditsResponse())
EspressoIdlingResource.decrement()
}
})

Expand All @@ -103,6 +113,7 @@ class MovieRemoteData() {
val client =
APIConfig.getApiService().getSimilarMovie(id, APIConfig.API_KEY, APIConfig.LANG)

EspressoIdlingResource.increment()
client.enqueue(object : Callback<MovieSimilarResponse> {
override fun onResponse(
call: Call<MovieSimilarResponse>,
Expand All @@ -113,11 +124,13 @@ class MovieRemoteData() {
} else {
resultSimilarMovies.value = ApiResponse.success(response.body()!!)
}
EspressoIdlingResource.decrement()
}

override fun onFailure(call: Call<MovieSimilarResponse>, t: Throwable) {
resultSimilarMovies.value =
ApiResponse.error("Failed to get similar movie data", MovieSimilarResponse())
EspressoIdlingResource.decrement()
}
})

Expand Down
Loading

0 comments on commit d762b19

Please sign in to comment.