From 16d73b3d4cc4f080dec9bd54a52949f64801db43 Mon Sep 17 00:00:00 2001 From: sangyoon Date: Wed, 3 Apr 2024 17:30:28 +0900 Subject: [PATCH] Add test code in GetFollowableTopicsUseCaseTest.kt([#1327]) --- .../GetRecentSearchQueriesUseCaseTest.kt | 83 ++++++++++++++++++- 1 file changed, 82 insertions(+), 1 deletion(-) diff --git a/core/domain/src/test/kotlin/com/google/samples/apps/nowinandroid/core/domain/GetRecentSearchQueriesUseCaseTest.kt b/core/domain/src/test/kotlin/com/google/samples/apps/nowinandroid/core/domain/GetRecentSearchQueriesUseCaseTest.kt index b45c9f83c..7c9e601a2 100644 --- a/core/domain/src/test/kotlin/com/google/samples/apps/nowinandroid/core/domain/GetRecentSearchQueriesUseCaseTest.kt +++ b/core/domain/src/test/kotlin/com/google/samples/apps/nowinandroid/core/domain/GetRecentSearchQueriesUseCaseTest.kt @@ -18,7 +18,12 @@ package com.google.samples.apps.nowinandroid.core.domain import com.google.samples.apps.nowinandroid.core.testing.repository.TestRecentSearchRepository import com.google.samples.apps.nowinandroid.core.testing.util.MainDispatcherRule +import kotlinx.coroutines.delay +import kotlinx.coroutines.flow.first +import kotlinx.coroutines.test.runTest import org.junit.Rule +import org.junit.Test +import kotlin.test.assertEquals class GetRecentSearchQueriesUseCaseTest { @@ -27,5 +32,81 @@ class GetRecentSearchQueriesUseCaseTest { private val recentSearchRepository = TestRecentSearchRepository() + private val useCase = GetRecentSearchQueriesUseCase( + recentSearchRepository + ) -} \ No newline at end of file + @Test + fun whenNoParams_recentSearchQueriesAreReturnedUpTo10() = runTest { + // Obtain a stream of recent search queries with no param. + val recentSearchQueries = useCase() + + // insert 5 search queries. + for (index in 0 until 5) { + recentSearchRepository.insertOrReplaceRecentSearch(testRecentSearchQueries[index]) + // delay for saving value + delay(10L) + } + + // Check that 5 recent search queries are ordered by latest. + assertEquals( + testRecentSearchQueries.take(5).reversed(), + recentSearchQueries.first().map { it.query }, + ) + + // insert 9 more search queries. + for (index in 5 until testRecentSearchQueries.size) { + recentSearchRepository.insertOrReplaceRecentSearch(testRecentSearchQueries[index]) + // delay for saving value + delay(10L) + } + + // Check that recent search queries are ordered by latest up to 10. + assertEquals( + testRecentSearchQueries.reversed().take(10), + recentSearchQueries.first().map { it.query }, + ) + } + + @Test + fun whenParamIsSetTo5_recentSearchQueriesAreReturnedUpTo5() = runTest { + // Obtain a stream of recent search queries with param set 5. + val recentSearchQueries = useCase(5) + + // insert 2 search queries. + for (index in 0 until 2) { + recentSearchRepository.insertOrReplaceRecentSearch(testRecentSearchQueries[index]) + // delay for saving value + delay(10L) + } + + // Check that 5 recent search queries are ordered by latest. + assertEquals( + testRecentSearchQueries.take(2).reversed(), + recentSearchQueries.first().map { it.query }, + ) + + // insert 12 more search queries. + for (index in 2 until testRecentSearchQueries.size) { + recentSearchRepository.insertOrReplaceRecentSearch(testRecentSearchQueries[index]) + // delay for saving value + delay(10L) + } + + // Check that recent search queries are ordered by latest up to 5. + assertEquals( + testRecentSearchQueries.reversed().take(5), + recentSearchQueries.first().map { it.query }, + ) + } +} + +private val testRecentSearchQueries = listOf( + "Compose", "Wear OS", + "Jetpack", "Headlines", + "Architecture", "UI", + "Testing", "Android Studio", + "Performance", "New API", + "Games", "Android TV", + "Camera", "Media" +) \ No newline at end of file