diff --git a/core/data/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstNewsRepository.kt b/core/data/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstNewsRepository.kt index 02c75c04a..5b3dc8769 100644 --- a/core/data/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstNewsRepository.kt +++ b/core/data/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstNewsRepository.kt @@ -22,7 +22,9 @@ import com.google.samples.apps.nowinandroid.core.data.model.asEntity import com.google.samples.apps.nowinandroid.core.data.model.topicCrossReferences import com.google.samples.apps.nowinandroid.core.data.model.topicEntityShells import com.google.samples.apps.nowinandroid.core.database.dao.NewsResourceDao +import com.google.samples.apps.nowinandroid.core.database.dao.NewsResourceDaoInterface import com.google.samples.apps.nowinandroid.core.database.dao.TopicDao +import com.google.samples.apps.nowinandroid.core.database.dao.TopicDaoInterface import com.google.samples.apps.nowinandroid.core.database.model.PopulatedNewsResource import com.google.samples.apps.nowinandroid.core.database.model.TopicEntity import com.google.samples.apps.nowinandroid.core.database.model.asExternalModel @@ -48,8 +50,8 @@ private const val SYNC_BATCH_SIZE = 40 @Inject internal class OfflineFirstNewsRepository( private val niaPreferencesDataSource: NiaPreferencesDataSource, - private val newsResourceDao: NewsResourceDao, - private val topicDao: TopicDao, + private val newsResourceDao: NewsResourceDaoInterface, + private val topicDao: TopicDaoInterface, private val network: NiaNetworkDataSource, private val notifier: Notifier, ) : NewsRepository { diff --git a/core/data/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstTopicsRepository.kt b/core/data/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstTopicsRepository.kt index 864be34e6..ada9d032f 100644 --- a/core/data/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstTopicsRepository.kt +++ b/core/data/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstTopicsRepository.kt @@ -20,6 +20,7 @@ import com.google.samples.apps.nowinandroid.core.data.Synchronizer import com.google.samples.apps.nowinandroid.core.data.changeListSync import com.google.samples.apps.nowinandroid.core.data.model.asEntity import com.google.samples.apps.nowinandroid.core.database.dao.TopicDao +import com.google.samples.apps.nowinandroid.core.database.dao.TopicDaoInterface import com.google.samples.apps.nowinandroid.core.database.model.TopicEntity import com.google.samples.apps.nowinandroid.core.database.model.asExternalModel import com.google.samples.apps.nowinandroid.core.datastore.ChangeListVersions @@ -36,7 +37,7 @@ import me.tatarka.inject.annotations.Inject */ @Inject internal class OfflineFirstTopicsRepository( - private val topicDao: TopicDao, + private val topicDao: TopicDaoInterface, private val network: NiaNetworkDataSource, ) : TopicsRepository { diff --git a/core/data/src/commonTest/kotlin/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstNewsRepositoryTest.kt b/core/data/src/commonTest/kotlin/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstNewsRepositoryTest.kt index 70af5f12b..9b0e03439 100644 --- a/core/data/src/commonTest/kotlin/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstNewsRepositoryTest.kt +++ b/core/data/src/commonTest/kotlin/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstNewsRepositoryTest.kt @@ -32,18 +32,17 @@ import com.google.samples.apps.nowinandroid.core.database.model.PopulatedNewsRes import com.google.samples.apps.nowinandroid.core.database.model.TopicEntity import com.google.samples.apps.nowinandroid.core.database.model.asExternalModel import com.google.samples.apps.nowinandroid.core.datastore.NiaPreferencesDataSource -import com.google.samples.apps.nowinandroid.core.datastore.test.testUserPreferencesDataStore import com.google.samples.apps.nowinandroid.core.model.data.NewsResource import com.google.samples.apps.nowinandroid.core.model.data.Topic import com.google.samples.apps.nowinandroid.core.network.model.NetworkChangeList import com.google.samples.apps.nowinandroid.core.network.model.NetworkNewsResource import com.google.samples.apps.nowinandroid.core.testing.notifications.TestNotifier +import com.russhwolf.settings.MapSettings +import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.flow.first import kotlinx.coroutines.test.TestScope import kotlinx.coroutines.test.UnconfinedTestDispatcher import kotlinx.coroutines.test.runTest -import org.junit.Rule -import org.junit.rules.TemporaryFolder import kotlin.test.BeforeTest import kotlin.test.Test import kotlin.test.assertEquals @@ -51,7 +50,10 @@ import kotlin.test.assertTrue class OfflineFirstNewsRepositoryTest { - private val testScope = TestScope(UnconfinedTestDispatcher()) + @OptIn(ExperimentalCoroutinesApi::class) + private val dispatcher = UnconfinedTestDispatcher() + + private val testScope = TestScope(dispatcher) private lateinit var subject: OfflineFirstNewsRepository @@ -67,13 +69,11 @@ class OfflineFirstNewsRepositoryTest { private lateinit var synchronizer: Synchronizer - @get:Rule - val tmpFolder: TemporaryFolder = TemporaryFolder.builder().assureDeletion().build() - @BeforeTest fun setup() { niaPreferencesDataSource = NiaPreferencesDataSource( - tmpFolder.testUserPreferencesDataStore(testScope), + settings = MapSettings(), + dispatcher = dispatcher, ) newsResourceDao = TestNewsResourceDao() topicDao = TestTopicDao() @@ -176,7 +176,7 @@ class OfflineFirstNewsRepositoryTest { // Delete half of the items on the network val deletedItems = newsResourcesFromNetwork .map(NewsResource::id) - .partition { it.chars().sum() % 2 == 0 } + .partition { it.length % 2 == 0 } .first .toSet() @@ -327,7 +327,7 @@ class OfflineFirstNewsRepositoryTest { val followedTopicIds = networkNewsResources .flatMap(NetworkNewsResource::topicEntityShells) .mapNotNull { topic -> - when (topic.id.chars().sum() % 2) { + when (topic.id.length % 2) { 0 -> topic.id else -> null } diff --git a/core/data/src/commonTest/kotlin/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstTopicsRepositoryTest.kt b/core/data/src/commonTest/kotlin/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstTopicsRepositoryTest.kt index fef25ea4b..30cb7f2ed 100644 --- a/core/data/src/commonTest/kotlin/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstTopicsRepositoryTest.kt +++ b/core/data/src/commonTest/kotlin/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstTopicsRepositoryTest.kt @@ -21,13 +21,14 @@ import com.google.samples.apps.nowinandroid.core.data.model.asEntity import com.google.samples.apps.nowinandroid.core.data.testdoubles.CollectionType import com.google.samples.apps.nowinandroid.core.data.testdoubles.TestNiaNetworkDataSource import com.google.samples.apps.nowinandroid.core.data.testdoubles.TestTopicDao -import com.google.samples.apps.nowinandroid.core.database.dao.TopicDao +import com.google.samples.apps.nowinandroid.core.database.dao.TopicDaoInterface import com.google.samples.apps.nowinandroid.core.database.model.TopicEntity import com.google.samples.apps.nowinandroid.core.database.model.asExternalModel import com.google.samples.apps.nowinandroid.core.datastore.NiaPreferencesDataSource -import com.google.samples.apps.nowinandroid.core.datastore.test.testUserPreferencesDataStore import com.google.samples.apps.nowinandroid.core.model.data.Topic import com.google.samples.apps.nowinandroid.core.network.model.NetworkTopic +import com.russhwolf.settings.MapSettings +import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.flow.first import kotlinx.coroutines.test.TestScope import kotlinx.coroutines.test.UnconfinedTestDispatcher @@ -38,11 +39,14 @@ import kotlin.test.assertEquals class OfflineFirstTopicsRepositoryTest { - private val testScope = TestScope(UnconfinedTestDispatcher()) + @OptIn(ExperimentalCoroutinesApi::class) + private val dispatcher = UnconfinedTestDispatcher() + + private val testScope = TestScope(dispatcher) private lateinit var subject: OfflineFirstTopicsRepository - private lateinit var topicDao: TopicDao + private lateinit var topicDao: TopicDaoInterface private lateinit var network: TestNiaNetworkDataSource @@ -55,7 +59,8 @@ class OfflineFirstTopicsRepositoryTest { topicDao = TestTopicDao() network = TestNiaNetworkDataSource() niaPreferences = NiaPreferencesDataSource( - tmpFolder.testUserPreferencesDataStore(testScope), + settings = MapSettings(), + dispatcher = dispatcher, ) synchronizer = TestSynchronizer(niaPreferences) @@ -140,7 +145,7 @@ class OfflineFirstTopicsRepositoryTest { // Delete half of the items on the network val deletedItems = networkTopics .map(Topic::id) - .partition { it.chars().sum() % 2 == 0 } + .partition { it.length % 2 == 0 } .first .toSet()