Updated on 2026-08-14
This commit is contained in:
parent
eff63d40ab
commit
b1b39cd121
6 changed files with 36 additions and 37 deletions
|
|
@ -1,19 +1,18 @@
|
|||
package com.tangem.common.test.utils
|
||||
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.ExperimentalCoroutinesApi
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
import kotlinx.coroutines.flow.toList
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.test.TestCoroutineScheduler
|
||||
import kotlinx.coroutines.test.TestScope
|
||||
import kotlinx.coroutines.test.UnconfinedTestDispatcher
|
||||
|
||||
@OptIn(ExperimentalCoroutinesApi::class)
|
||||
fun <T> CoroutineScope.getEmittedValues(testScheduler: TestCoroutineScheduler, actual: Flow<T>): List<T> {
|
||||
fun <T> TestScope.getEmittedValues(flow: Flow<T>): List<T> {
|
||||
val values = mutableListOf<T>()
|
||||
|
||||
launch(UnconfinedTestDispatcher(testScheduler)) {
|
||||
actual.toList(values)
|
||||
backgroundScope.launch(UnconfinedTestDispatcher(testScheduler)) {
|
||||
flow.toList(values)
|
||||
}
|
||||
|
||||
return values
|
||||
|
|
|
|||
|
|
@ -65,7 +65,7 @@ internal class DefaultMultiNetworkStatusProducerTest {
|
|||
// check after producer.produce()
|
||||
verify { networksStatusesStore.get(params.userWalletId) }
|
||||
|
||||
val values = backgroundScope.getEmittedValues(testScheduler = testScheduler, actual = actual)
|
||||
val values = getEmittedValues(flow = actual)
|
||||
|
||||
// Check after flow was observed by subscriber (getEmittedValues).
|
||||
// Otherwise, userWalletsStore.getSyncOrNull is not called.
|
||||
|
|
@ -95,7 +95,7 @@ internal class DefaultMultiNetworkStatusProducerTest {
|
|||
|
||||
networksStatusesFlow.emit(statuses.map(NetworkStatus::toSimple).toSet())
|
||||
|
||||
val values1 = backgroundScope.getEmittedValues(testScheduler = testScheduler, actual = actual)
|
||||
val values1 = getEmittedValues(flow = actual)
|
||||
|
||||
// Check after flow was observed by subscriber (getEmittedValues).
|
||||
// Otherwise, userWalletsStore.getSyncOrNull is not called.
|
||||
|
|
@ -112,7 +112,7 @@ internal class DefaultMultiNetworkStatusProducerTest {
|
|||
|
||||
networksStatusesFlow.emit(updatedStatuses.map(NetworkStatus::toSimple).toSet())
|
||||
|
||||
val values2 = backgroundScope.getEmittedValues(testScheduler = testScheduler, actual = actual)
|
||||
val values2 = getEmittedValues(flow = actual)
|
||||
|
||||
// Check after flow was observed by subscriber (getEmittedValues).
|
||||
// Otherwise, userWalletsStore.getSyncOrNull is not called.
|
||||
|
|
@ -143,7 +143,7 @@ internal class DefaultMultiNetworkStatusProducerTest {
|
|||
|
||||
networksStatusesFlow.emit(statuses.map(NetworkStatus::toSimple).toSet())
|
||||
|
||||
val values1 = backgroundScope.getEmittedValues(testScheduler = testScheduler, actual = actual)
|
||||
val values1 = getEmittedValues(flow = actual)
|
||||
|
||||
// Check after flow was observed by subscriber (getEmittedValues).
|
||||
// Otherwise, userWalletsStore.getSyncOrNull is not called.
|
||||
|
|
@ -155,7 +155,7 @@ internal class DefaultMultiNetworkStatusProducerTest {
|
|||
// second emit
|
||||
networksStatusesFlow.emit(statuses.map(NetworkStatus::toSimple).toSet())
|
||||
|
||||
val values2 = backgroundScope.getEmittedValues(testScheduler = testScheduler, actual = actual)
|
||||
val values2 = getEmittedValues(flow = actual)
|
||||
|
||||
// Check after flow was observed by subscriber (getEmittedValues).
|
||||
// Otherwise, userWalletsStore.getSyncOrNull is not called.
|
||||
|
|
@ -191,7 +191,7 @@ internal class DefaultMultiNetworkStatusProducerTest {
|
|||
// check after producer.produce()
|
||||
verify { networksStatusesStore.get(params.userWalletId) }
|
||||
|
||||
val values1 = backgroundScope.getEmittedValues(testScheduler = testScheduler, actual = actual)
|
||||
val values1 = getEmittedValues(flow = actual)
|
||||
|
||||
// Check after flow was observed by subscriber (getEmittedValues).
|
||||
// Otherwise, userWalletsStore.getSyncOrNull is not called.
|
||||
|
|
@ -202,7 +202,7 @@ internal class DefaultMultiNetworkStatusProducerTest {
|
|||
|
||||
innerFlow.emit(value = true)
|
||||
|
||||
val values2 = backgroundScope.getEmittedValues(testScheduler = testScheduler, actual = actual)
|
||||
val values2 = getEmittedValues(flow = actual)
|
||||
|
||||
// Check after flow was observed by subscriber (getEmittedValues).
|
||||
// Otherwise, userWalletsStore.getSyncOrNull is not called.
|
||||
|
|
@ -222,7 +222,7 @@ internal class DefaultMultiNetworkStatusProducerTest {
|
|||
// check after producer.produce()
|
||||
verify { networksStatusesStore.get(params.userWalletId) }
|
||||
|
||||
val values = backgroundScope.getEmittedValues(testScheduler = testScheduler, actual = actual)
|
||||
val values = getEmittedValues(flow = actual)
|
||||
|
||||
verify(inverse = true) { userWalletsStore.getSyncOrNull(params.userWalletId) }
|
||||
|
||||
|
|
@ -248,7 +248,7 @@ internal class DefaultMultiNetworkStatusProducerTest {
|
|||
// check after producer.produce()
|
||||
verify { networksStatusesStore.get(params.userWalletId) }
|
||||
|
||||
val values = backgroundScope.getEmittedValues(testScheduler = testScheduler, actual = actual)
|
||||
val values = getEmittedValues(flow = actual)
|
||||
|
||||
// Check after flow was observed by subscriber (getEmittedValues).
|
||||
// Otherwise, userWalletsStore.getSyncOrNull is not called.
|
||||
|
|
|
|||
|
|
@ -53,7 +53,7 @@ internal class DefaultSingleNetworkStatusProducerTest {
|
|||
|
||||
verify { multiNetworkStatusSupplier(multiParams) }
|
||||
|
||||
val values = backgroundScope.getEmittedValues(testScheduler = testScheduler, actual = actual)
|
||||
val values = getEmittedValues(flow = actual)
|
||||
|
||||
Truth.assertThat(values.size).isEqualTo(1)
|
||||
Truth.assertThat(values).isEqualTo(listOf(status))
|
||||
|
|
@ -74,7 +74,7 @@ internal class DefaultSingleNetworkStatusProducerTest {
|
|||
val status = MockNetworkStatusFactory.createMissedDerivation(params.network)
|
||||
expected.emit(value = setOf(status))
|
||||
|
||||
val values1 = backgroundScope.getEmittedValues(testScheduler = testScheduler, actual = actual)
|
||||
val values1 = getEmittedValues(flow = actual)
|
||||
|
||||
Truth.assertThat(values1.size).isEqualTo(1)
|
||||
Truth.assertThat(values1).isEqualTo(listOf(status))
|
||||
|
|
@ -83,7 +83,7 @@ internal class DefaultSingleNetworkStatusProducerTest {
|
|||
val updatedStatus = status.copy(value = NetworkStatus.Unreachable(null))
|
||||
expected.emit(value = setOf(updatedStatus))
|
||||
|
||||
val values2 = backgroundScope.getEmittedValues(testScheduler = testScheduler, actual = actual)
|
||||
val values2 = getEmittedValues(flow = actual)
|
||||
|
||||
Truth.assertThat(values2.size).isEqualTo(2)
|
||||
Truth.assertThat(values2).isEqualTo(listOf(status, updatedStatus))
|
||||
|
|
@ -104,7 +104,7 @@ internal class DefaultSingleNetworkStatusProducerTest {
|
|||
val status = MockNetworkStatusFactory.createMissedDerivation(params.network)
|
||||
expected.emit(value = setOf(status))
|
||||
|
||||
val values1 = backgroundScope.getEmittedValues(testScheduler = testScheduler, actual = actual)
|
||||
val values1 = getEmittedValues(flow = actual)
|
||||
|
||||
Truth.assertThat(values1.size).isEqualTo(1)
|
||||
Truth.assertThat(values1).isEqualTo(listOf(status))
|
||||
|
|
@ -112,7 +112,7 @@ internal class DefaultSingleNetworkStatusProducerTest {
|
|||
// second emit
|
||||
expected.emit(value = setOf(status))
|
||||
|
||||
val values2 = backgroundScope.getEmittedValues(testScheduler = testScheduler, actual = actual)
|
||||
val values2 = getEmittedValues(flow = actual)
|
||||
|
||||
Truth.assertThat(values2.size).isEqualTo(1)
|
||||
Truth.assertThat(values2).isEqualTo(listOf(status))
|
||||
|
|
@ -140,7 +140,7 @@ internal class DefaultSingleNetworkStatusProducerTest {
|
|||
|
||||
verify { multiNetworkStatusSupplier(multiParams) }
|
||||
|
||||
val values1 = backgroundScope.getEmittedValues(testScheduler = testScheduler, actual = actual)
|
||||
val values1 = getEmittedValues(flow = actual)
|
||||
|
||||
Truth.assertThat(values1.size).isEqualTo(1)
|
||||
val fallbackStatus = MockNetworkStatusFactory.createUnreachable(params.network)
|
||||
|
|
@ -148,7 +148,7 @@ internal class DefaultSingleNetworkStatusProducerTest {
|
|||
|
||||
innerFlow.emit(value = true)
|
||||
|
||||
val values2 = backgroundScope.getEmittedValues(testScheduler = testScheduler, actual = actual)
|
||||
val values2 = getEmittedValues(flow = actual)
|
||||
Truth.assertThat(values2.size).isEqualTo(1)
|
||||
Truth.assertThat(values2).isEqualTo(listOf(status))
|
||||
}
|
||||
|
|
@ -166,7 +166,7 @@ internal class DefaultSingleNetworkStatusProducerTest {
|
|||
|
||||
verify { multiNetworkStatusSupplier(multiParams) }
|
||||
|
||||
val values = backgroundScope.getEmittedValues(testScheduler = testScheduler, actual = actual)
|
||||
val values = getEmittedValues(flow = actual)
|
||||
|
||||
Truth.assertThat(values.size).isEqualTo(0)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -30,7 +30,7 @@ internal class NetworksStatusesStoreGetMethodTest {
|
|||
fun `test get if runtime store is empty`() = runTest {
|
||||
val actual = store.get(userWalletId = userWalletId)
|
||||
|
||||
val values = backgroundScope.getEmittedValues(testScheduler, actual)
|
||||
val values = getEmittedValues(flow = actual)
|
||||
|
||||
Truth.assertThat(values).isEqualTo(emptyList<Set<SimpleNetworkStatus>>())
|
||||
}
|
||||
|
|
@ -41,7 +41,7 @@ internal class NetworksStatusesStoreGetMethodTest {
|
|||
|
||||
val actual = store.get(userWalletId = userWalletId)
|
||||
|
||||
val values = backgroundScope.getEmittedValues(testScheduler, actual)
|
||||
val values = getEmittedValues(flow = actual)
|
||||
|
||||
Truth.assertThat(values).isEqualTo(emptyList<Set<SimpleNetworkStatus>>())
|
||||
}
|
||||
|
|
@ -54,7 +54,7 @@ internal class NetworksStatusesStoreGetMethodTest {
|
|||
|
||||
val actual = store.get(userWalletId = userWalletId)
|
||||
|
||||
val values = backgroundScope.getEmittedValues(testScheduler, actual)
|
||||
val values = getEmittedValues(flow = actual)
|
||||
|
||||
Truth.assertThat(values.size).isEqualTo(1)
|
||||
Truth.assertThat(values).isEqualTo(listOf(emptySet<SimpleNetworkStatus>()))
|
||||
|
|
@ -70,7 +70,7 @@ internal class NetworksStatusesStoreGetMethodTest {
|
|||
|
||||
val actual = store.get(userWalletId = userWalletId)
|
||||
|
||||
val values = backgroundScope.getEmittedValues(testScheduler, actual)
|
||||
val values = getEmittedValues(flow = actual)
|
||||
|
||||
Truth.assertThat(values.size).isEqualTo(1)
|
||||
Truth.assertThat(values).isEqualTo(listOf(setOf(status.toSimple())))
|
||||
|
|
|
|||
|
|
@ -49,7 +49,7 @@ internal class DefaultSingleQuoteProducerTest {
|
|||
|
||||
verify { quotesStore.get() }
|
||||
|
||||
val values = backgroundScope.getEmittedValues(testScheduler = testScheduler, actual = actual)
|
||||
val values = getEmittedValues(flow = actual)
|
||||
|
||||
Truth.assertThat(values.size).isEqualTo(1)
|
||||
Truth.assertThat(values).isEqualTo(listOf(status))
|
||||
|
|
@ -69,7 +69,7 @@ internal class DefaultSingleQuoteProducerTest {
|
|||
val status = Quote.Empty(rawCurrencyId = params.rawCurrencyId)
|
||||
storeQuote.emit(value = setOf(status))
|
||||
|
||||
val values1 = backgroundScope.getEmittedValues(testScheduler = testScheduler, actual = actual)
|
||||
val values1 = getEmittedValues(flow = actual)
|
||||
|
||||
Truth.assertThat(values1.size).isEqualTo(1)
|
||||
Truth.assertThat(values1).isEqualTo(listOf(status))
|
||||
|
|
@ -83,7 +83,7 @@ internal class DefaultSingleQuoteProducerTest {
|
|||
)
|
||||
storeQuote.emit(value = setOf(updatedStatus))
|
||||
|
||||
val values2 = backgroundScope.getEmittedValues(testScheduler = testScheduler, actual = actual)
|
||||
val values2 = getEmittedValues(flow = actual)
|
||||
|
||||
Truth.assertThat(values2.size).isEqualTo(2)
|
||||
Truth.assertThat(values2).isEqualTo(listOf(status, updatedStatus))
|
||||
|
|
@ -103,7 +103,7 @@ internal class DefaultSingleQuoteProducerTest {
|
|||
val status = Quote.Empty(rawCurrencyId = params.rawCurrencyId)
|
||||
storeQuote.emit(value = setOf(status))
|
||||
|
||||
val values1 = backgroundScope.getEmittedValues(testScheduler = testScheduler, actual = actual)
|
||||
val values1 = getEmittedValues(flow = actual)
|
||||
|
||||
Truth.assertThat(values1.size).isEqualTo(1)
|
||||
Truth.assertThat(values1).isEqualTo(listOf(status))
|
||||
|
|
@ -111,7 +111,7 @@ internal class DefaultSingleQuoteProducerTest {
|
|||
// second emit
|
||||
storeQuote.emit(value = setOf(status))
|
||||
|
||||
val values2 = backgroundScope.getEmittedValues(testScheduler = testScheduler, actual = actual)
|
||||
val values2 = getEmittedValues(flow = actual)
|
||||
|
||||
Truth.assertThat(values2.size).isEqualTo(1)
|
||||
Truth.assertThat(values2).isEqualTo(listOf(status))
|
||||
|
|
@ -143,7 +143,7 @@ internal class DefaultSingleQuoteProducerTest {
|
|||
|
||||
verify { quotesStore.get() }
|
||||
|
||||
val values1 = backgroundScope.getEmittedValues(testScheduler = testScheduler, actual = actual)
|
||||
val values1 = getEmittedValues(flow = actual)
|
||||
|
||||
Truth.assertThat(values1.size).isEqualTo(1)
|
||||
val fallbackStatus = Quote.Empty(rawCurrencyId = params.rawCurrencyId)
|
||||
|
|
@ -151,7 +151,7 @@ internal class DefaultSingleQuoteProducerTest {
|
|||
|
||||
innerFlow.emit(value = true)
|
||||
|
||||
val values2 = backgroundScope.getEmittedValues(testScheduler = testScheduler, actual = actual)
|
||||
val values2 = getEmittedValues(flow = actual)
|
||||
Truth.assertThat(values2.size).isEqualTo(1)
|
||||
Truth.assertThat(values2).isEqualTo(listOf(status))
|
||||
}
|
||||
|
|
@ -170,7 +170,7 @@ internal class DefaultSingleQuoteProducerTest {
|
|||
|
||||
verify { quotesStore.get() }
|
||||
|
||||
val values = backgroundScope.getEmittedValues(testScheduler = testScheduler, actual = actual)
|
||||
val values = getEmittedValues(flow = actual)
|
||||
|
||||
Truth.assertThat(values.size).isEqualTo(0)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -30,7 +30,7 @@ internal class QuotesStoreGetMethodTest {
|
|||
fun `test get if runtime store is empty`() = runTest {
|
||||
val actual = store.get()
|
||||
|
||||
val values = backgroundScope.getEmittedValues(testScheduler, actual)
|
||||
val values = getEmittedValues(flow = actual)
|
||||
|
||||
Truth.assertThat(values).isEqualTo(emptyList<Set<Quote>>())
|
||||
}
|
||||
|
|
@ -41,7 +41,7 @@ internal class QuotesStoreGetMethodTest {
|
|||
|
||||
val actual = store.get()
|
||||
|
||||
val values = backgroundScope.getEmittedValues(testScheduler, actual)
|
||||
val values = getEmittedValues(flow = actual)
|
||||
|
||||
Truth.assertThat(values).isEqualTo(listOf(emptySet<Quote>()))
|
||||
}
|
||||
|
|
@ -55,7 +55,7 @@ internal class QuotesStoreGetMethodTest {
|
|||
|
||||
val actual = store.get()
|
||||
|
||||
val values = backgroundScope.getEmittedValues(testScheduler, actual)
|
||||
val values = getEmittedValues(flow = actual)
|
||||
|
||||
Truth.assertThat(values.size).isEqualTo(1)
|
||||
Truth.assertThat(values).isEqualTo(listOf(setOf(btcQuote.toDomain(), ethQuote.toDomain())))
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue