1
1
package com.dicoding.moviecatalog.viewmodel.data
2
2
3
3
import androidx.arch.core.executor.testing.InstantTaskExecutorRule
4
+ import androidx.lifecycle.MutableLiveData
4
5
import androidx.paging.DataSource
5
6
import com.dicoding.moviecatalog.data.source.local.LocalDataSource
7
+ import com.dicoding.moviecatalog.data.source.local.entity.movie.MovieDetailEntity
6
8
import com.dicoding.moviecatalog.data.source.local.entity.movie.MovieListEntity
9
+ import com.dicoding.moviecatalog.data.source.local.entity.tvshow.TvShowDetailEntity
7
10
import com.dicoding.moviecatalog.data.source.local.entity.tvshow.TvShowListEntity
8
11
import com.dicoding.moviecatalog.data.source.remote.RemoteDataSource
9
12
import com.dicoding.moviecatalog.utils.AppExecutors
10
13
import com.dicoding.moviecatalog.utils.CatalogDatabase
11
14
import com.dicoding.moviecatalog.utils.SortUtils.NEWEST
15
+ import com.dicoding.moviecatalog.viewmodel.utils.LiveDataTestUtil
12
16
import com.dicoding.moviecatalog.viewmodel.utils.PagedListUtil
13
17
import com.dicoding.moviecatalog.vo.Resource
14
18
import com.nhaarman.mockitokotlin2.verify
19
+ import com.nhaarman.mockitokotlin2.verifyNoMoreInteractions
15
20
import org.junit.Assert.assertEquals
16
21
import org.junit.Assert.assertNotNull
17
22
import org.junit.Rule
@@ -34,6 +39,12 @@ class RepositoryTest {
34
39
CatalogDatabase .generateMovieLocal()
35
40
private val tvShowResponses =
36
41
CatalogDatabase .generateTvShowLocal()
42
+ private val movieSelected = CatalogDatabase .generateSelectedMovieLocal()
43
+ private val tvShowSelected = CatalogDatabase .generateSelectedTvShowLocal()
44
+ private val susMovie = CatalogDatabase .generateSusMovieLocal()
45
+ private val susTvShow = CatalogDatabase .generateSusTvShowLocal()
46
+ private val movieId = movieSelected.movieId
47
+ private val tvShowId = tvShowSelected.tvShowId
37
48
38
49
private val movieListId = " 8174952"
39
50
private val tvShowListId = " 8174957"
@@ -51,6 +62,65 @@ class RepositoryTest {
51
62
assertEquals(movieResponses.size.toLong(), movieEntities.data?.size?.toLong())
52
63
}
53
64
65
+ @Test
66
+ fun getDetailMovie () {
67
+ val dummyDetailMovie = MutableLiveData <MovieDetailEntity >()
68
+ dummyDetailMovie.value = CatalogDatabase .generateSelectedMovieLocal()
69
+ `when `(local.getSelectedMovies(movieId)).thenReturn(dummyDetailMovie)
70
+
71
+ val movieDetailEntity = LiveDataTestUtil .getValue(fakeRepository.getSelectedMovies(movieId))
72
+ verify(local).getSelectedMovies(movieId)
73
+ assertNotNull(movieDetailEntity)
74
+ assertEquals(movieSelected.movieId, movieDetailEntity.data?.movieId)
75
+ assertEquals(movieSelected.title, movieDetailEntity.data?.title)
76
+ assertEquals(movieSelected.overview, movieDetailEntity.data?.overview)
77
+ assertEquals(movieSelected.revenue, movieDetailEntity.data?.revenue)
78
+ assertEquals(movieSelected.releaseDate, movieDetailEntity.data?.releaseDate)
79
+ assertEquals(movieSelected.originalLanguage, movieDetailEntity.data?.originalLanguage)
80
+ assertEquals(movieSelected.posterPath, movieDetailEntity.data?.posterPath)
81
+ movieDetailEntity.data?.popularity?.let {
82
+ assertEquals(
83
+ movieSelected.popularity,
84
+ it,
85
+ 0.0001
86
+ )
87
+ }
88
+ movieDetailEntity.data?.voteAverage?.let {
89
+ assertEquals(
90
+ movieSelected.voteAverage,
91
+ it,
92
+ 0.0001
93
+ )
94
+ }
95
+ assertEquals(movieSelected.compName_1, movieDetailEntity.data?.compName_1)
96
+ assertEquals(movieSelected.compName_2, movieDetailEntity.data?.compName_2)
97
+ assertEquals(movieSelected.compOrigin_1, movieDetailEntity.data?.compOrigin_1)
98
+ assertEquals(movieSelected.compOrigin_2, movieDetailEntity.data?.compOrigin_2)
99
+ assertEquals(movieSelected.compLogo_1, movieDetailEntity.data?.compLogo_1)
100
+ assertEquals(movieSelected.compLogo_2, movieDetailEntity.data?.compLogo_2)
101
+ }
102
+
103
+ @Test
104
+ fun updateFavoriteMovie () {
105
+ fakeRepository.updateFavMovies(CatalogDatabase .generateSelectedMovieLocal(), true )
106
+ verify(local).updateFavMovies(CatalogDatabase .generateSelectedMovieLocal(), true )
107
+ verifyNoMoreInteractions(local)
108
+ }
109
+
110
+ @Test
111
+ fun getFavoriteMovie () {
112
+ val dataSourceFactory =
113
+ mock(DataSource .Factory ::class .java) as DataSource .Factory <Int , MovieDetailEntity >
114
+ `when `(local.getFavMovies(NEWEST )).thenReturn(dataSourceFactory)
115
+ fakeRepository.getFavoriteMovies(NEWEST )
116
+
117
+ val movieSusEntities =
118
+ Resource .success(PagedListUtil .mockPagedList(CatalogDatabase .generateSelectedFavMovie()))
119
+ verify(local).getFavMovies(NEWEST )
120
+ assertNotNull(movieSusEntities)
121
+ assertEquals(susMovie.size, movieSusEntities.data?.size)
122
+ }
123
+
54
124
@Test
55
125
fun getAllTvShow () {
56
126
val dataSourceFactory =
@@ -63,4 +133,57 @@ class RepositoryTest {
63
133
assertNotNull(tvShowEntities.data)
64
134
assertEquals(tvShowResponses.size.toLong(), tvShowEntities.data?.size?.toLong())
65
135
}
136
+
137
+ @Test
138
+ fun getDetailTvShow () {
139
+ val dummyDetailTvShow = MutableLiveData <TvShowDetailEntity >()
140
+ dummyDetailTvShow.value = CatalogDatabase .generateSelectedTvShowLocal()
141
+ `when `(local.getSelectedTvShow(tvShowId)).thenReturn(dummyDetailTvShow)
142
+
143
+ val tvShowDetailEntity =
144
+ LiveDataTestUtil .getValue(fakeRepository.getSelectedTvShow(tvShowId))
145
+ verify(local).getSelectedTvShow(tvShowId)
146
+ assertNotNull(tvShowDetailEntity)
147
+ assertEquals(tvShowSelected.tvShowId, tvShowDetailEntity.data?.tvShowId)
148
+ assertEquals(tvShowSelected.tvShowName, tvShowDetailEntity.data?.tvShowName)
149
+ assertEquals(tvShowSelected.tvShowOverview, tvShowDetailEntity.data?.tvShowOverview)
150
+ assertEquals(tvShowSelected.tvShowFirstAirDate, tvShowDetailEntity.data?.tvShowFirstAirDate)
151
+ assertEquals(tvShowSelected.tvShowEpisodes, tvShowDetailEntity.data?.tvShowEpisodes)
152
+ assertEquals(tvShowSelected.tvShowSeasons, tvShowDetailEntity.data?.tvShowSeasons)
153
+ assertEquals(tvShowSelected.tvShowLanguage, tvShowDetailEntity.data?.tvShowLanguage)
154
+ tvShowDetailEntity.data?.tvShowVote?.let {
155
+ assertEquals(
156
+ tvShowSelected.tvShowVote,
157
+ it,
158
+ 0.0001
159
+ )
160
+ }
161
+ assertEquals(tvShowSelected.compName_1, tvShowDetailEntity.data?.compName_1)
162
+ assertEquals(tvShowSelected.compName_2, tvShowDetailEntity.data?.compName_2)
163
+ assertEquals(tvShowSelected.compOrigin_1, tvShowDetailEntity.data?.compOrigin_1)
164
+ assertEquals(tvShowSelected.compOrigin_2, tvShowDetailEntity.data?.compOrigin_2)
165
+ assertEquals(tvShowSelected.compLogo_1, tvShowDetailEntity.data?.compLogo_1)
166
+ assertEquals(tvShowSelected.compLogo_2, tvShowDetailEntity.data?.compLogo_2)
167
+ }
168
+
169
+ @Test
170
+ fun updateFavoriteTvShow () {
171
+ fakeRepository.updateFavTvShow(CatalogDatabase .generateSelectedTvShowLocal(), true )
172
+ verify(local).updateFavTvShow(CatalogDatabase .generateSelectedTvShowLocal(), true )
173
+ verifyNoMoreInteractions(local)
174
+ }
175
+
176
+ @Test
177
+ fun getFavoriteTvShow () {
178
+ val dataSourceFactory =
179
+ mock(DataSource .Factory ::class .java) as DataSource .Factory <Int , TvShowDetailEntity >
180
+ `when `(local.getFavTvShow(NEWEST )).thenReturn(dataSourceFactory)
181
+ fakeRepository.getFavoriteTvShow(NEWEST )
182
+
183
+ val tvShowSusEntities =
184
+ Resource .success(PagedListUtil .mockPagedList(CatalogDatabase .generateSelectedFavTvShow()))
185
+ verify(local).getFavTvShow(NEWEST )
186
+ assertNotNull(tvShowSusEntities)
187
+ assertEquals(susTvShow.size, tvShowSusEntities.data?.size)
188
+ }
66
189
}
0 commit comments