Skip to content

Commit c231d5e

Browse files
committed
update unit-test
1 parent bdbfd35 commit c231d5e

File tree

8 files changed

+66
-48
lines changed

8 files changed

+66
-48
lines changed

data/src/main/kotlin/com/aliasadi/data/repository/movie/MovieRepositoryImpl.kt

+3-1
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,9 @@ class MovieRepositoryImpl(
5656
enablePlaceholders = false
5757
),
5858
pagingSourceFactory = { SearchMoviePagingSource(query, remote) }
59-
).flow
59+
).flow.map { pagingData ->
60+
pagingData.map { it.toDomain() }
61+
}
6062

6163
override suspend fun getMovie(movieId: Int): Result<MovieEntity> {
6264
return when (val localResult = local.getMovie(movieId)) {

data/src/main/kotlin/com/aliasadi/data/repository/movie/SearchMoviePagingSource.kt

+5-4
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package com.aliasadi.data.repository.movie
22

33
import androidx.paging.PagingSource
44
import androidx.paging.PagingState
5+
import com.aliasadi.data.entities.MovieData
56
import com.aliasadi.data.entities.toDomain
67
import com.aliasadi.domain.entities.MovieEntity
78
import com.aliasadi.domain.util.Result.Error
@@ -15,14 +16,14 @@ private const val STARTING_PAGE_INDEX = 1
1516
class SearchMoviePagingSource(
1617
private val query: String,
1718
private val remote: MovieDataSource.Remote
18-
) : PagingSource<Int, MovieEntity>() {
19+
) : PagingSource<Int, MovieData>() {
1920

20-
override suspend fun load(params: LoadParams<Int>): LoadResult<Int, MovieEntity> {
21+
override suspend fun load(params: LoadParams<Int>): LoadResult<Int, MovieData> {
2122
val page = params.key ?: STARTING_PAGE_INDEX
2223

2324
return when (val result = remote.search(query, page, params.loadSize)) {
2425
is Success -> LoadResult.Page(
25-
data = result.data.map { it.toDomain() }.distinctBy { movie -> movie.id },
26+
data = result.data.distinctBy { movie -> movie.id },
2627
prevKey = if (page == STARTING_PAGE_INDEX) null else page - 1,
2728
nextKey = if (result.data.isEmpty()) null else page + 1
2829
)
@@ -31,7 +32,7 @@ class SearchMoviePagingSource(
3132
}
3233
}
3334

34-
override fun getRefreshKey(state: PagingState<Int, MovieEntity>): Int? {
35+
override fun getRefreshKey(state: PagingState<Int, MovieData>): Int? {
3536
return state.anchorPosition?.let { anchorPosition ->
3637
state.closestPageToPosition(anchorPosition)?.prevKey
3738
}

data/src/prod/kotlin/com/aliasadi/data/repository/movie/MovieRemoteDataSource.kt

-2
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,7 @@ package com.aliasadi.data.repository.movie
22

33
import com.aliasadi.data.api.MovieApi
44
import com.aliasadi.data.entities.MovieData
5-
import com.aliasadi.data.entities.toDomain
65
import com.aliasadi.data.util.safeApiCall
7-
import com.aliasadi.domain.entities.MovieEntity
86
import com.aliasadi.domain.util.Result
97

108
/**

data/src/test/kotlin/com/aliasadi/data/repository/movie/MovieLocalDataSourceTest.kt

+3-3
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,12 @@ import androidx.paging.PagingSource
44
import com.aliasadi.core.test.base.BaseTest
55
import com.aliasadi.data.db.movies.MovieDao
66
import com.aliasadi.data.db.movies.MovieRemoteKeyDao
7+
import com.aliasadi.data.entities.MovieData
78
import com.aliasadi.data.entities.MovieDbData
89
import com.aliasadi.data.entities.MovieRemoteKeyDbData
10+
import com.aliasadi.data.entities.toDbData
911
import com.aliasadi.data.entities.toDomain
1012
import com.aliasadi.data.exception.DataNotAvailableException
11-
import com.aliasadi.data.mapper.toDbData
12-
import com.aliasadi.domain.entities.MovieEntity
1313
import com.aliasadi.domain.util.Result
1414
import junit.framework.TestCase.assertEquals
1515
import junit.framework.TestCase.assertTrue
@@ -87,7 +87,7 @@ class MovieLocalDataSourceTest : BaseTest() {
8787

8888
@Test
8989
fun `test saveMovies calls saveMovies on movieDao`() = runUnconfinedTest {
90-
val movieEntities = listOf(MovieEntity(1, "Title", "Description", "Image", "Category", "BackgroundUrl"))
90+
val movieEntities = listOf(MovieData(1, "Title", "Description", "Image", "Category", "BackgroundUrl"))
9191
val movieDbData = movieEntities.map { it.toDbData() }
9292

9393
sut.saveMovies(movieEntities)

data/src/test/kotlin/com/aliasadi/data/repository/movie/MovieRemoteDataSourceTest.kt

+8-7
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import com.aliasadi.data.api.MovieApi
55
import com.aliasadi.data.entities.MovieData
66
import com.aliasadi.data.entities.toDomain
77
import com.aliasadi.domain.util.Result
8+
import com.aliasadi.domain.util.asSuccessOrNull
89
import org.junit.Assert.assertEquals
910
import org.junit.Assert.assertTrue
1011
import org.junit.Before
@@ -26,14 +27,14 @@ class MovieRemoteDataSourceTest : BaseTest() {
2627

2728
@Test
2829
fun `test getMovies returns success when API call is successful`() = runUnconfinedTest {
29-
val movieData = MovieData(1, "Title", "Description", "Image", "Category", "BackgroundUrl")
30-
whenever(movieApi.getMovies(any(), any())).thenReturn(listOf(movieData))
30+
val movieDataList = listOf(MovieData(1, "Title", "Description", "Image", "Category", "BackgroundUrl"))
31+
whenever(movieApi.getMovies(any(), any())).thenReturn(movieDataList)
3132

3233
val result = sut.getMovies(1, 10)
3334

3435
assertTrue(result is Result.Success)
35-
assertEquals(1, (result as Result.Success).data.size)
36-
assertEquals(movieData.toDomain(), result.data[0])
36+
assertEquals(1, result.asSuccessOrNull()?.size)
37+
assertEquals(movieDataList, result.asSuccessOrNull())
3738
}
3839

3940
@Test
@@ -54,7 +55,7 @@ class MovieRemoteDataSourceTest : BaseTest() {
5455

5556
assertTrue(result is Result.Success)
5657
assertEquals(1, (result as Result.Success).data.size)
57-
assertEquals(movieData.toDomain(), result.data[0])
58+
assertEquals(movieData, result.data[0])
5859
}
5960

6061
@Test
@@ -74,7 +75,7 @@ class MovieRemoteDataSourceTest : BaseTest() {
7475
val result = sut.getMovie(1)
7576

7677
assertTrue(result is Result.Success)
77-
assertEquals(movieData.toDomain(), (result as Result.Success).data)
78+
assertEquals(movieData, (result as Result.Success).data)
7879
}
7980

8081
@Test
@@ -95,7 +96,7 @@ class MovieRemoteDataSourceTest : BaseTest() {
9596

9697
assertTrue(result is Result.Success)
9798
assertEquals(1, (result as Result.Success).data.size)
98-
assertEquals(movieData.toDomain(), result.data[0])
99+
assertEquals(movieData, result.data[0])
99100
}
100101

101102
@Test

data/src/test/kotlin/com/aliasadi/data/repository/movie/MovieRemoteMediatorTest.kt

+7-11
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,10 @@ import androidx.paging.PagingConfig
77
import androidx.paging.PagingState
88
import androidx.paging.RemoteMediator
99
import com.aliasadi.core.test.base.BaseTest
10+
import com.aliasadi.data.entities.MovieData
1011
import com.aliasadi.data.entities.MovieDbData
1112
import com.aliasadi.data.entities.MovieRemoteKeyDbData
12-
import com.aliasadi.data.entities.toDomain
1313
import com.aliasadi.data.exception.DataNotAvailableException
14-
import com.aliasadi.data.mapper.toDbData
15-
import com.aliasadi.domain.entities.MovieEntity
1614
import com.aliasadi.domain.util.Result
1715
import org.junit.After
1816
import org.junit.Assert.assertEquals
@@ -51,9 +49,8 @@ class MovieRemoteMediatorTest : BaseTest() {
5149

5250
@Test
5351
fun `load refresh success when remote returns data`() = runUnconfinedTest {
54-
val movieEntity = MovieEntity(1, "Title", "Description", "Image", "Category", "BackgroundUrl")
55-
val movieDbData = movieEntity.toDbData()
56-
whenever(remote.getMovies(any(), any())).thenReturn(Result.Success(listOf(movieEntity)))
52+
val movieData = MovieData(1, "Title", "Description", "Image", "Category", "BackgroundUrl")
53+
whenever(remote.getMovies(any(), any())).thenReturn(Result.Success(listOf(movieData)))
5754
whenever(local.clearMovies()).thenReturn(Unit)
5855
whenever(local.clearRemoteKeys()).thenReturn(Unit)
5956
whenever(local.saveMovies(any())).thenReturn(Unit)
@@ -72,7 +69,7 @@ class MovieRemoteMediatorTest : BaseTest() {
7269
assertEquals(false, (result as RemoteMediator.MediatorResult.Success).endOfPaginationReached)
7370
verify(local).clearMovies()
7471
verify(local).clearRemoteKeys()
75-
verify(local).saveMovies(listOf(movieDbData.toDomain()))
72+
verify(local).saveMovies(listOf(movieData))
7673
verify(local).saveRemoteKey(any())
7774
}
7875

@@ -111,10 +108,9 @@ class MovieRemoteMediatorTest : BaseTest() {
111108

112109
@Test
113110
fun `load append success when remote returns data`() = runUnconfinedTest {
114-
val movieEntity = MovieEntity(1, "Title", "Description", "Image", "Category", "BackgroundUrl")
115-
val movieDbData = movieEntity.toDbData()
111+
val movieData = MovieData(1, "Title", "Description", "Image", "Category", "BackgroundUrl")
116112
whenever(local.getLastRemoteKey()).thenReturn(MovieRemoteKeyDbData(1, null, 5))
117-
whenever(remote.getMovies(any(), any())).thenReturn(Result.Success(listOf(movieEntity)))
113+
whenever(remote.getMovies(any(), any())).thenReturn(Result.Success(listOf(movieData)))
118114
whenever(local.saveMovies(any())).thenReturn(Unit)
119115
whenever(local.saveRemoteKey(any())).thenReturn(Unit)
120116

@@ -129,7 +125,7 @@ class MovieRemoteMediatorTest : BaseTest() {
129125

130126
assertTrue(result is RemoteMediator.MediatorResult.Success)
131127
assertEquals(false, (result as RemoteMediator.MediatorResult.Success).endOfPaginationReached)
132-
verify(local).saveMovies(listOf(movieDbData.toDomain()))
128+
verify(local).saveMovies(listOf(movieData))
133129
verify(local).saveRemoteKey(any())
134130
}
135131

data/src/test/kotlin/com/aliasadi/data/repository/movie/MovieRepositoryImplTest.kt

+20-8
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
11
package com.aliasadi.data.repository.movie
22

33
import com.aliasadi.core.test.base.BaseTest
4+
import com.aliasadi.data.entities.MovieData
5+
import com.aliasadi.data.entities.toDomain
46
import com.aliasadi.data.repository.movie.favorite.FavoriteMoviesDataSource
57
import com.aliasadi.domain.entities.MovieEntity
68
import com.aliasadi.domain.util.Result
9+
import com.aliasadi.domain.util.asSuccessOrNull
710
import org.junit.Assert.assertEquals
811
import org.junit.Assert.assertTrue
912
import org.junit.Before
@@ -40,14 +43,22 @@ class MovieRepositoryImplTest : BaseTest() {
4043

4144
@Test
4245
fun `test getMovie returns movie from remote if not available locally`() = runUnconfinedTest {
43-
val movieEntity = MovieEntity(1, "Title", "Description", "Image", "Category", "BackgroundUrl")
46+
val movieData = MovieData(
47+
id = 1,
48+
description = "Title",
49+
image = "Description",
50+
backgroundUrl = "Image",
51+
title = "Category",
52+
category = "BackgroundUrl"
53+
)
4454
whenever(local.getMovie(any())).thenReturn(Result.Error(Exception()))
45-
whenever(remote.getMovie(any())).thenReturn(Result.Success(movieEntity))
55+
whenever(remote.getMovie(any())).thenReturn(Result.Success(movieData))
4656

4757
val result = sut.getMovie(1)
4858

4959
assertTrue(result is Result.Success)
50-
assertEquals(movieEntity, (result as Result.Success).data)
60+
61+
assertEquals(movieData.toDomain(), result.asSuccessOrNull())
5162
}
5263

5364
@Test
@@ -72,15 +83,15 @@ class MovieRepositoryImplTest : BaseTest() {
7283

7384
@Test
7485
fun `test addMovieToFavorite adds movie to favorites, error`() = runUnconfinedTest {
75-
val movieEntity = MovieEntity(1, "Title", "Description", "Image", "Category", "BackgroundUrl")
86+
val movieData = MovieData(1, "Title", "Description", "Image", "Category", "BackgroundUrl")
7687

7788
val exception = Exception()
7889
whenever(local.getMovie(any())).thenReturn(Result.Error(exception))
79-
whenever(remote.getMovie(any())).thenReturn(Result.Success(movieEntity))
90+
whenever(remote.getMovie(any())).thenReturn(Result.Success(movieData))
8091
sut.addMovieToFavorite(1)
8192

8293
verify(remote).getMovie(1)
83-
verify(local).saveMovies(listOf(movieEntity))
94+
verify(local).saveMovies(listOf(movieData))
8495
verify(localFavorite).addMovieToFavorite(1)
8596
}
8697

@@ -94,13 +105,14 @@ class MovieRepositoryImplTest : BaseTest() {
94105
@Test
95106
fun `test sync updates local with remote movies`() = runUnconfinedTest {
96107
val movieEntity = MovieEntity(1, "Title", "Description", "Image", "Category", "BackgroundUrl")
108+
val movieData = MovieData(1, "Title", "Description", "Image", "Category", "BackgroundUrl")
97109
whenever(local.getMovies()).thenReturn(Result.Success(listOf(movieEntity)))
98-
whenever(remote.getMovies(any<List<Int>>())).thenReturn(Result.Success(listOf(movieEntity)))
110+
whenever(remote.getMovies(any<List<Int>>())).thenReturn(Result.Success(listOf(movieData)))
99111

100112
val result = sut.sync()
101113

102114
assertTrue(result)
103-
verify(local).saveMovies(listOf(movieEntity))
115+
verify(local).saveMovies(listOf(movieData))
104116
}
105117

106118
@Test

data/src/test/kotlin/com/aliasadi/data/repository/movie/SearchMoviePagingSourceTest.kt

+20-12
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import androidx.paging.PagingConfig
44
import androidx.paging.PagingSource
55
import androidx.paging.PagingState
66
import com.aliasadi.core.test.base.BaseTest
7-
import com.aliasadi.domain.entities.MovieEntity
7+
import com.aliasadi.data.entities.MovieData
88
import com.aliasadi.domain.util.Result
99
import org.junit.Assert.assertEquals
1010
import org.junit.Assert.assertNull
@@ -27,10 +27,18 @@ class SearchMoviePagingSourceTest : BaseTest() {
2727

2828
@Test
2929
fun `test load returns page on success with distinct movies`() = runUnconfinedTest {
30-
val movieEntity1 = MovieEntity(1, "Title1", "Description1", "Image1", "Category1", "BackgroundUrl1")
31-
val movieEntity2 = MovieEntity(2, "Title2", "Description2", "Image2", "Category2", "BackgroundUrl2")
32-
val duplicateMovieEntity = MovieEntity(1, "Title1", "Description1", "Image1", "Category1", "BackgroundUrl1")
33-
whenever(remote.search(any(), any(), any())).thenReturn(Result.Success(listOf(movieEntity1, movieEntity2, duplicateMovieEntity)))
30+
val movieEntity1 = MovieData(1, "Title1", "Description1", "Image1", "Category1", "BackgroundUrl1")
31+
val movieEntity2 = MovieData(2, "Title2", "Description2", "Image2", "Category2", "BackgroundUrl2")
32+
val duplicateMovieEntity = MovieData(1, "Title1", "Description1", "Image1", "Category1", "BackgroundUrl1")
33+
whenever(remote.search(any(), any(), any())).thenReturn(
34+
Result.Success(
35+
listOf(
36+
movieEntity1,
37+
movieEntity2,
38+
duplicateMovieEntity
39+
)
40+
)
41+
)
3442

3543
val params = PagingSource.LoadParams.Refresh<Int>(key = null, loadSize = 10, placeholdersEnabled = false)
3644
val result = sut.load(params)
@@ -44,15 +52,15 @@ class SearchMoviePagingSourceTest : BaseTest() {
4452

4553
@Test
4654
fun `test load returns page on success with prevKey and nextKey`() = runUnconfinedTest {
47-
val movieEntity = MovieEntity(1, "Title", "Description", "Image", "Category", "BackgroundUrl")
48-
whenever(remote.search(any(), any(), any())).thenReturn(Result.Success(listOf(movieEntity)))
55+
val movieData = MovieData(1, "Title", "Description", "Image", "Category", "BackgroundUrl")
56+
whenever(remote.search(any(), any(), any())).thenReturn(Result.Success(listOf(movieData)))
4957

50-
val params = PagingSource.LoadParams.Append<Int>(key = 2, loadSize = 10, placeholdersEnabled = false)
58+
val params = PagingSource.LoadParams.Append(key = 2, loadSize = 10, placeholdersEnabled = false)
5159
val result = sut.load(params)
5260

5361
assertTrue(result is PagingSource.LoadResult.Page)
5462
result as PagingSource.LoadResult.Page
55-
assertEquals(listOf(movieEntity), result.data)
63+
assertEquals(listOf(movieData), result.data)
5664
assertEquals(1, result.prevKey)
5765
assertEquals(3, result.nextKey)
5866
}
@@ -90,8 +98,8 @@ class SearchMoviePagingSourceTest : BaseTest() {
9098
pages = listOf(
9199
PagingSource.LoadResult.Page(
92100
data = listOf(
93-
MovieEntity(1, "Title1", "Description1", "Image1", "Category1", "BackgroundUrl1"),
94-
MovieEntity(2, "Title2", "Description2", "Image2", "Category2", "BackgroundUrl2")
101+
MovieData(1, "Title1", "Description1", "Image1", "Category1", "BackgroundUrl1"),
102+
MovieData(2, "Title2", "Description2", "Image2", "Category2", "BackgroundUrl2")
95103
),
96104
prevKey = 1,
97105
nextKey = 3
@@ -108,7 +116,7 @@ class SearchMoviePagingSourceTest : BaseTest() {
108116

109117
@Test
110118
fun `test getRefreshKey returns null when no anchor`() {
111-
val state = PagingState<Int, MovieEntity>(
119+
val state = PagingState<Int, MovieData>(
112120
pages = listOf(),
113121
anchorPosition = null,
114122
config = PagingConfig(pageSize = 10),

0 commit comments

Comments
 (0)