瀏覽代碼

add test for fun loadCurrencies

MrOzOn 4 年之前
父節點
當前提交
5473c69c97

+ 4 - 5
app/src/main/java/com/mrozon/currencyconverter/domain/CalculateCurrencyUseCase.kt

@@ -7,7 +7,6 @@ import com.mrozon.currencyconverter.domain.model.CurrentCurrencies
 import kotlinx.coroutines.flow.Flow
 import kotlinx.coroutines.flow.collect
 import kotlinx.coroutines.flow.flow
-import kotlinx.coroutines.flow.map
 import javax.inject.Inject
 
 class CalculateCurrencyUseCase @Inject constructor(
@@ -15,12 +14,12 @@ class CalculateCurrencyUseCase @Inject constructor(
     private val dto: CurrencyMapper
 ): ICalculateCurrencyUseCase {
     override fun loadCurrencies(): Flow<CurrentCurrencies> = flow{
-        val currencies = mutableListOf<Currency>()
-        val rub = Currency("RUB", "Российский рубль", 1.0, true)
-        currencies.add(rub)
         currencyDao.getValutes().collect { listValuteDb ->
+            val currencies = mutableListOf<Currency>()
+            val rub = Currency("RUB", "Российский рубль", 1.0, true)
+            currencies.add(rub)
             currencies.addAll(dto.map(listValuteDb))
+            emit(CurrentCurrencies(currencies, 1.0))
         }
-        emit(CurrentCurrencies(currencies, 1.0))
     }
 }

+ 3 - 3
app/src/test/java/com/mrozon/currencyconverter/data/db/CurrencyDaoTest.kt

@@ -44,7 +44,7 @@ class CurrencyDaoTest {
 
     @Test
     fun get_all_valutes_from_db() = runBlocking {
-        val valutes = dao.getPlants().first()
+        val valutes = dao.getValutes().first()
         assertEquals(valutes.size,3)
     }
 
@@ -52,7 +52,7 @@ class CurrencyDaoTest {
     fun add_one_new_item() = runBlocking {
         val valute = ValuteDb("R01775", "CHF", "Швейцарский франк", 78.7071)
         dao.insertAll(listOf(valute))
-        val valutes = dao.getPlants().first()
+        val valutes = dao.getValutes().first()
         assertEquals(valutes.size,4)
     }
 
@@ -60,7 +60,7 @@ class CurrencyDaoTest {
     fun add_one_existing_item() = runBlocking {
         val valute = ValuteDb("R01100", "CHF", "Швейцарский франк", 78.7071)
         dao.insertAll(listOf(valute))
-        val valutes = dao.getPlants().first()
+        val valutes = dao.getValutes().first()
         assertEquals(valutes.size,3)
     }
 

+ 103 - 0
app/src/test/java/com/mrozon/currencyconverter/domain/CalculateCurrencyUseCaseTest.kt

@@ -0,0 +1,103 @@
+package com.mrozon.currencyconverter.domain
+
+import com.mrozon.currencyconverter.CoroutineTestRule
+import com.mrozon.currencyconverter.data.db.CurrencyDao
+import com.mrozon.currencyconverter.data.db.ValuteDb
+import com.mrozon.currencyconverter.data.network.Valute
+import com.mrozon.currencyconverter.data.repository.UpdateValutesRepository
+import com.mrozon.currencyconverter.domain.dto.CurrencyMapper
+import com.mrozon.currencyconverter.domain.model.Currency
+import com.mrozon.currencyconverter.domain.model.CurrentCurrencies
+import kotlinx.coroutines.ExperimentalCoroutinesApi
+import kotlinx.coroutines.flow.first
+import kotlinx.coroutines.flow.flowOf
+import org.junit.After
+import org.junit.Before
+import org.junit.Test
+
+import org.junit.Assert.*
+import org.junit.Rule
+import org.mockito.Mock
+import org.mockito.Mockito
+import org.mockito.junit.MockitoJUnit
+import org.mockito.junit.MockitoRule
+
+@ExperimentalCoroutinesApi
+class CalculateCurrencyUseCaseTest {
+
+    @get:Rule
+    val mockitoRule: MockitoRule = MockitoJUnit.rule()
+
+    @get:Rule
+    var coroutinesTestRule = CoroutineTestRule()
+
+    @Mock
+    lateinit var dao: CurrencyDao
+
+    lateinit var useCase: CalculateCurrencyUseCase
+
+    @Before
+    fun setUp() {
+        useCase = CalculateCurrencyUseCase(dao, CurrencyMapper())
+    }
+
+    @Test
+    fun loadCurrencies_success() = coroutinesTestRule.runBlockingTest {
+        val valute1 = ValuteDb(
+            charCode = "HKD",
+            value = 93.0223,
+            id = "R01200",
+            name = "Гонконгских долларов"
+        )
+        val valute2 = ValuteDb(
+            charCode = "HKS",
+            value = 93.0223,
+            id = "R01201",
+            name = "Гонконгских долларов"
+        )
+        val valute3 = ValuteDb(
+            charCode = "HKY",
+            value = 93.0223,
+            id = "R01203",
+            name = "Гонконгских долларов"
+        )
+        Mockito.`when`(dao.getValutes()).thenReturn(
+            flowOf(listOf(valute1, valute2, valute3))
+        )
+        val expected = CurrentCurrencies(
+            valutes= listOf(
+                Currency(charCode="RUB", name="Российский рубль", value=1.0, selected=true),
+                Currency(charCode="HKD", name="Гонконгских долларов", value=93.0223, selected=false),
+                Currency(charCode="HKS", name="Гонконгских долларов", value=93.0223, selected=false),
+                Currency(charCode="HKY", name="Гонконгских долларов", value=93.0223, selected=false)
+            ),
+            value=1.0)
+
+        val actual = useCase.loadCurrencies()
+
+        assertEquals(
+            expected,
+            actual.first()
+        )
+    }
+
+    @Test
+    fun loadCurrencies_load_empty_list() = coroutinesTestRule.runBlockingTest {
+        Mockito.`when`(dao.getValutes()).thenReturn(
+            flowOf(listOf())
+        )
+        val expected = CurrentCurrencies(
+            valutes= listOf(
+                Currency(charCode="RUB", name="Российский рубль", value=1.0, selected=true),
+            ),
+            value=1.0)
+
+        val actual = useCase.loadCurrencies()
+
+        assertEquals(
+            expected,
+            actual.first()
+        )
+    }
+
+}