Skip to content

Commit 49c1c51

Browse files
committed
Add tests for ViewModels.
1 parent a7bf5fa commit 49c1c51

File tree

3 files changed

+92
-1
lines changed

3 files changed

+92
-1
lines changed
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
package com.fernandocejas.sample.features.movies
2+
3+
import com.fernandocejas.sample.AndroidTest
4+
import com.fernandocejas.sample.framework.functional.Either.Right
5+
import com.nhaarman.mockito_kotlin.given
6+
import kotlinx.coroutines.experimental.runBlocking
7+
import org.amshove.kluent.shouldEqualTo
8+
import org.junit.Before
9+
import org.junit.Test
10+
import org.mockito.Mock
11+
12+
class MovieDetailsViewModelTest : AndroidTest() {
13+
14+
private lateinit var movieDetailsViewModel: MovieDetailsViewModel
15+
private lateinit var getMovieDetails: GetMovieDetails
16+
private lateinit var playMovie: PlayMovie
17+
18+
@Mock private lateinit var moviesRepository: MoviesRepository
19+
20+
@Before
21+
fun setUp() {
22+
playMovie = PlayMovie(context())
23+
getMovieDetails = GetMovieDetails(moviesRepository)
24+
movieDetailsViewModel = MovieDetailsViewModel(getMovieDetails, playMovie)
25+
}
26+
27+
@Test
28+
fun `loading movie details should update live data`() {
29+
runBlocking {
30+
val movieDetails = MovieDetails(0, "IronMan", "poster", "summary",
31+
"cast", "director", 2018, "trailer")
32+
given { moviesRepository.movieDetails(0) }.willReturn(Right(movieDetails))
33+
34+
movieDetailsViewModel.loadMovieDetails(0)
35+
36+
val movie = movieDetailsViewModel.movieDetails.value
37+
38+
with(movie!!) {
39+
id shouldEqualTo 0
40+
title shouldEqualTo "IronMan"
41+
poster shouldEqualTo "poster"
42+
summary shouldEqualTo "summary"
43+
cast shouldEqualTo "cast"
44+
director shouldEqualTo "director"
45+
year shouldEqualTo 2018
46+
trailer shouldEqualTo "trailer"
47+
}
48+
}
49+
}
50+
}
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package com.fernandocejas.sample.features.movies
2+
3+
import com.fernandocejas.sample.AndroidTest
4+
import com.fernandocejas.sample.framework.functional.Either.Right
5+
import com.nhaarman.mockito_kotlin.given
6+
import kotlinx.coroutines.experimental.runBlocking
7+
import org.amshove.kluent.shouldEqualTo
8+
import org.junit.Before
9+
import org.junit.Test
10+
import org.mockito.Mock
11+
12+
class MoviesViewModelTest : AndroidTest() {
13+
14+
private lateinit var moviesViewModel: MoviesViewModel
15+
private lateinit var getMovies: GetMovies
16+
17+
@Mock private lateinit var moviesRepository: MoviesRepository
18+
19+
@Before
20+
fun setUp() {
21+
getMovies = GetMovies(moviesRepository)
22+
moviesViewModel = MoviesViewModel(getMovies)
23+
}
24+
25+
@Test fun `loading movies should update live data`() {
26+
runBlocking {
27+
val moviesList = listOf(Movie(0, "IronMan"), Movie(1, "Batman"))
28+
given { moviesRepository.movies() }.willReturn(Right(moviesList))
29+
30+
moviesViewModel.loadMovies()
31+
32+
val movies = moviesViewModel.movies.value
33+
34+
movies!!.size shouldEqualTo 2
35+
movies[0].id shouldEqualTo 0
36+
movies[0].poster shouldEqualTo "IronMan"
37+
movies[1].id shouldEqualTo 1
38+
movies[1].poster shouldEqualTo "Batman"
39+
}
40+
}
41+
}

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
org.gradle.jvmargs=-Dfile.encoding=UTF-8 -XX:MaxPermSize=512m -Xmx4608M
22
org.gradle.parallel=true
33
org.gradle.configureondemand=true
4-
kotlin.incremental=true
4+
kotlin.incremental=true

0 commit comments

Comments
 (0)