Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit a0b5172

Browse files
Add PostRepository.kt for coroutines, move test classes to different files
1 parent 0190b52 commit a0b5172

File tree

14 files changed

+137
-30
lines changed

14 files changed

+137
-30
lines changed

‎libraries/data/src/androidTest/java/com/smarttoolfactory/data/PostDaoCoroutinesFlowTest.kt‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import com.smarttoolfactory.data.db.PostDatabase
1010
import com.smarttoolfactory.data.model.PostEntity
1111
import com.smarttoolfactory.test_utils.RESPONSE_JSON_PATH
1212
import com.smarttoolfactory.test_utils.rule.TestCoroutineRule
13-
import com.smarttoolfactory.test_utils.util.convertFromJsonToObjectList
13+
import com.smarttoolfactory.test_utils.util.convertFromJsonToListOf
1414
import com.smarttoolfactory.test_utils.util.getResourceAsText
1515
import kotlinx.coroutines.test.runBlockingTest
1616
import org.junit.After
@@ -24,7 +24,7 @@ class PostDaoCoroutinesFlowTest {
2424

2525
companion object {
2626
val postEntityList =
27-
convertFromJsonToObjectList<PostEntity>(getResourceAsText(RESPONSE_JSON_PATH))!!
27+
convertFromJsonToListOf<PostEntity>(getResourceAsText(RESPONSE_JSON_PATH))!!
2828
}
2929

3030
@get:Rule

‎libraries/data/src/androidTest/java/com/smarttoolfactory/data/PostDaoRxJavaTest.kt‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import com.smarttoolfactory.data.db.PostDaoRxJava3
88
import com.smarttoolfactory.data.db.PostDatabase
99
import com.smarttoolfactory.data.model.PostEntity
1010
import com.smarttoolfactory.test_utils.RESPONSE_JSON_PATH
11-
import com.smarttoolfactory.test_utils.util.convertFromJsonToObjectList
11+
import com.smarttoolfactory.test_utils.util.convertFromJsonToListOf
1212
import com.smarttoolfactory.test_utils.util.getResourceAsText
1313
import org.junit.After
1414
import org.junit.Before
@@ -19,7 +19,7 @@ class PostDaoRxJavaTest {
1919

2020
companion object {
2121
val postEntityList =
22-
convertFromJsonToObjectList<PostEntity>(getResourceAsText(RESPONSE_JSON_PATH))!!
22+
convertFromJsonToListOf<PostEntity>(getResourceAsText(RESPONSE_JSON_PATH))!!
2323
}
2424

2525
@get:Rule
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package com.smarttoolfactory.data.repository
2+
3+
import com.smarttoolfactory.data.model.PostEntity
4+
5+
/**
6+
* This repository contains no data save, delete or fetch logic with Coroutines.
7+
*
8+
* All business logic for creating offline-first or offline-last approach is moved to UseCase
9+
*/
10+
interface PostRepository {
11+
12+
suspend fun getPostEntitiesFromLocal(): List<PostEntity>
13+
14+
suspend fun fetchEntitiesFromRemote(): List<PostEntity>
15+
16+
suspend fun savePostEntities(postEntities: List<PostEntity>)
17+
18+
suspend fun deletePostEntities()
19+
}
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package com.smarttoolfactory.data.repository
2+
3+
import com.smarttoolfactory.data.mapper.DTOtoEntityMapper
4+
import com.smarttoolfactory.data.model.PostEntity
5+
import com.smarttoolfactory.data.source.LocalPostDataSourceCoroutines
6+
import com.smarttoolfactory.data.source.RemotePostDataSourceCoroutines
7+
8+
/**
9+
* Repository for persistence layer. Local Data source acts as Single Source of Truth
10+
* even if data is retrieved from REST api it's stored to database and retrieved from database
11+
* when required.
12+
*
13+
* * Get [getPostEntitiesFromLocal] function returns data that is not expired, if data is older than
14+
* required it uses [LocalPostDataSourceCoroutines] to retrieve data.
15+
*
16+
* * Other than caching this class does not contain any business
17+
* logic to set order of retrieving, saving or deleting data operations.
18+
*
19+
* All business logic is delegated to a UseCase/Interactor class that injects
20+
* this [PostRepository] as dependency.
21+
*
22+
*/
23+
class PostRepositoryCoroutinesImpl(
24+
private val localPostDataSource: LocalPostDataSourceCoroutines,
25+
private val remotePostDataSource: RemotePostDataSourceCoroutines,
26+
private val mapper: DTOtoEntityMapper
27+
) : PostRepository {
28+
29+
override suspend fun getPostEntitiesFromLocal(): List<PostEntity> {
30+
TODO("Not yet implemented")
31+
}
32+
33+
override suspend fun fetchEntitiesFromRemote(): List<PostEntity> {
34+
TODO("Not yet implemented")
35+
}
36+
37+
override suspend fun savePostEntities(postEntities: List<PostEntity>) {
38+
TODO("Not yet implemented")
39+
}
40+
41+
override suspend fun deletePostEntities() {
42+
TODO("Not yet implemented")
43+
}
44+
}
45+
46+
class PostRepositoryRxJava3Impl

‎libraries/data/src/main/java/com/smarttoolfactory/data/source/PostDataSource.kt‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,11 @@ interface PostDataSource
1010
/*
1111
Coroutines
1212
*/
13-
interface RemotePostDataSource : PostDataSource {
13+
interface RemotePostDataSourceCoroutines : PostDataSource {
1414
suspend fun getPostDTOs(): List<PostDTO>
1515
}
1616

17-
interface LocalPostDataSource : PostDataSource {
17+
interface LocalPostDataSourceCoroutines : PostDataSource {
1818
suspend fun getPostEntities(): List<PostEntity>
1919
suspend fun saveEntities(posts: List<PostEntity>): List<Long>
2020
suspend fun deletePostEntities()

‎libraries/data/src/main/java/com/smarttoolfactory/data/source/PostDataSourceImpl.kt‎

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,16 +13,16 @@ import javax.inject.Inject
1313
/*
1414
*** Coroutines Implementations for PostDataSources ***
1515
*/
16-
class RemotePostDataSourceImpl @Inject constructor(private val postApi: PostApi) :
17-
RemotePostDataSource {
16+
class RemotePostDataSourceCoroutinesImpl @Inject constructor(private val postApi: PostApi) :
17+
RemotePostDataSourceCoroutines {
1818

1919
override suspend fun getPostDTOs(): List<PostDTO> {
2020
return postApi.getPosts()
2121
}
2222
}
2323

24-
class LocalPostDataSourceImpl @Inject constructor(private val postDao: PostDao) :
25-
LocalPostDataSource {
24+
class LocalPostDataSourceCoroutinesImpl @Inject constructor(private val postDao: PostDao) :
25+
LocalPostDataSourceCoroutines {
2626

2727
override suspend fun getPostEntities(): List<PostEntity> {
2828
return postDao.getPostList()

‎libraries/data/src/test/java/com/smarttoolfactory/data/api/AbstractPostApiTest.kt‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ package com.smarttoolfactory.data.api
22

33
import com.smarttoolfactory.data.model.PostDTO
44
import com.smarttoolfactory.test_utils.RESPONSE_JSON_PATH
5-
import com.smarttoolfactory.test_utils.util.convertFromJsonToObjectList
5+
import com.smarttoolfactory.test_utils.util.convertFromJsonToListOf
66
import com.smarttoolfactory.test_utils.util.getResourceAsText
77
import java.io.IOException
88
import okhttp3.mockwebserver.MockResponse
@@ -22,7 +22,7 @@ abstract class AbstractPostApiTest {
2222
}
2323

2424
val postList by lazy {
25-
convertFromJsonToObjectList<PostDTO>(getResourceAsText(RESPONSE_JSON_PATH))!!
25+
convertFromJsonToListOf<PostDTO>(getResourceAsText(RESPONSE_JSON_PATH))!!
2626
}
2727

2828
@BeforeEach

‎libraries/data/src/test/java/com/smarttoolfactory/data/mapper/DTOtoEntityMapperTest.kt‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,18 @@ import com.google.common.truth.Truth
44
import com.smarttoolfactory.data.model.PostDTO
55
import com.smarttoolfactory.data.model.PostEntity
66
import com.smarttoolfactory.test_utils.RESPONSE_JSON_PATH
7-
import com.smarttoolfactory.test_utils.util.convertFromJsonToObjectList
7+
import com.smarttoolfactory.test_utils.util.convertFromJsonToListOf
88
import com.smarttoolfactory.test_utils.util.getResourceAsText
99
import org.junit.jupiter.api.Test
1010

1111
class DTOtoEntityMapperTest {
1212

1313
private val postDTOList by lazy {
14-
convertFromJsonToObjectList<PostDTO>(getResourceAsText(RESPONSE_JSON_PATH))!!
14+
convertFromJsonToListOf<PostDTO>(getResourceAsText(RESPONSE_JSON_PATH))!!
1515
}
1616

1717
private val postEntityList by lazy {
18-
convertFromJsonToObjectList<PostEntity>(getResourceAsText(RESPONSE_JSON_PATH))!!
18+
convertFromJsonToListOf<PostEntity>(getResourceAsText(RESPONSE_JSON_PATH))!!
1919
}
2020

2121
@Test
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package com.smarttoolfactory.data.repository
2+
3+
import org.junit.jupiter.api.AfterEach
4+
import org.junit.jupiter.api.BeforeEach
5+
import org.junit.jupiter.api.TestInstance
6+
7+
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
8+
internal class PostRepositoryCoroutinesTest {
9+
10+
@BeforeEach
11+
fun setUp() {
12+
}
13+
14+
@AfterEach
15+
fun tearDown() {
16+
}
17+
}

‎libraries/data/src/test/java/com/smarttoolfactory/data/source/PostDataSourceCoroutinesTest.kt‎

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import com.smarttoolfactory.data.db.PostDao
66
import com.smarttoolfactory.data.model.PostDTO
77
import com.smarttoolfactory.data.model.PostEntity
88
import com.smarttoolfactory.test_utils.RESPONSE_JSON_PATH
9-
import com.smarttoolfactory.test_utils.util.convertFromJsonToObjectList
9+
import com.smarttoolfactory.test_utils.util.convertFromJsonToListOf
1010
import com.smarttoolfactory.test_utils.util.getResourceAsText
1111
import io.mockk.clearMocks
1212
import io.mockk.coEvery
@@ -25,10 +25,10 @@ class PostDataSourceCoroutinesTest {
2525

2626
companion object {
2727
val PostDTOList =
28-
convertFromJsonToObjectList<PostDTO>(getResourceAsText(RESPONSE_JSON_PATH))!!
28+
convertFromJsonToListOf<PostDTO>(getResourceAsText(RESPONSE_JSON_PATH))!!
2929

3030
val postEntityList =
31-
convertFromJsonToObjectList<PostEntity>(getResourceAsText(RESPONSE_JSON_PATH))!!
31+
convertFromJsonToListOf<PostEntity>(getResourceAsText(RESPONSE_JSON_PATH))!!
3232
}
3333

3434
@Nested
@@ -37,7 +37,7 @@ class PostDataSourceCoroutinesTest {
3737

3838
private val postApi = mockk<PostApi>()
3939

40-
private lateinit var remotePostDataSource: RemotePostDataSource
40+
private lateinit var remotePostDataSource: RemotePostDataSourceCoroutinesImpl
4141

4242
@Test
4343
fun `given network error occurred, should throw Exception`() = runBlockingTest {
@@ -74,7 +74,7 @@ class PostDataSourceCoroutinesTest {
7474

7575
@BeforeEach
7676
fun setUp() {
77-
remotePostDataSource = RemotePostDataSourceImpl(postApi)
77+
remotePostDataSource = RemotePostDataSourceCoroutinesImpl(postApi)
7878
}
7979

8080
@AfterEach
@@ -88,7 +88,7 @@ class PostDataSourceCoroutinesTest {
8888

8989
private val postDao = mockk<PostDao>()
9090

91-
private lateinit var localPostDataSource: LocalPostDataSourceImpl
91+
private lateinit var localPostDataSource: LocalPostDataSourceCoroutinesImpl
9292

9393
@Test
9494
fun `given DB is empty should return an empty list`() = runBlockingTest {
@@ -152,7 +152,7 @@ class PostDataSourceCoroutinesTest {
152152

153153
@BeforeEach
154154
fun setUp() {
155-
localPostDataSource = LocalPostDataSourceImpl(postDao)
155+
localPostDataSource = LocalPostDataSourceCoroutinesImpl(postDao)
156156
}
157157

158158
@AfterEach

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /