Pārlūkot izejas kodu

add test for DAO

MrOzOn 4 gadi atpakaļ
vecāks
revīzija
5a14cf4c49

+ 1 - 0
app/build.gradle

@@ -59,6 +59,7 @@ dependencies {
     testImplementation 'junit:junit:4.13.2'
     testImplementation "org.jetbrains.kotlinx:kotlinx-coroutines-test:$coroutines_version"
     testImplementation "androidx.arch.core:core-testing:2.1.0"
+    androidTestImplementation "androidx.arch.core:core-testing:2.1.0"
     androidTestImplementation 'androidx.test.ext:junit:1.1.2'
     androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
     //testing network

+ 60 - 0
app/src/androidTest/java/com/mrozon/currencyconverter/data/db/CurrencyDaoTest.kt

@@ -0,0 +1,60 @@
+package com.mrozon.currencyconverter.data.db
+
+import androidx.arch.core.executor.testing.InstantTaskExecutorRule
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import org.junit.runner.RunWith
+import androidx.room.Room
+import androidx.test.platform.app.InstrumentationRegistry
+import kotlinx.coroutines.flow.first
+import kotlinx.coroutines.runBlocking
+import org.junit.*
+import org.junit.Assert.assertEquals
+
+@RunWith(AndroidJUnit4::class)
+class CurrencyDaoTest {
+    private lateinit var database: CurrencyDatabase
+    private lateinit var dao: CurrencyDao
+
+    @get:Rule
+    var instantTaskExecutorRule = InstantTaskExecutorRule()
+
+    private val valute1 = ValuteDb("R01090B", "BYN", "Белорусский рубль", 28.7415f)
+    private val valute2 = ValuteDb("R01100", "BGN", "Болгарский лев", 44.0295f)
+    private val valute3 = ValuteDb("R01565", "PLN", "Польский злотый", 18.9354f)
+
+    @Before
+    fun createDb() = runBlocking {
+        val context = InstrumentationRegistry.getInstrumentation().targetContext
+        database = Room.inMemoryDatabaseBuilder(context, CurrencyDatabase::class.java).build()
+        dao = database.currencyDao()
+        dao.insertAll(listOf(valute1, valute2, valute3))
+    }
+
+    @After
+    fun closeDb() {
+        database.close()
+    }
+
+    @Test
+    fun get_all_valutes_from_db() = runBlocking {
+        val valutes = dao.getPlants().first()
+        assertEquals(valutes.size,3)
+    }
+
+    @Test
+    fun add_one_new_item() = runBlocking {
+        val valute = ValuteDb("R01775", "CHF", "Швейцарский франк", 78.7071f)
+        dao.insertAll(listOf(valute))
+        val valutes = dao.getPlants().first()
+        assertEquals(valutes.size,4)
+    }
+
+    @Test
+    fun add_one_existing_item() = runBlocking {
+        val valute = ValuteDb("R01100", "CHF", "Швейцарский франк", 78.7071f)
+        dao.insertAll(listOf(valute))
+        val valutes = dao.getPlants().first()
+        assertEquals(valutes.size,3)
+    }
+
+}

+ 12 - 1
app/src/main/java/com/mrozon/currencyconverter/data/db/CurrencyDao.kt

@@ -1,6 +1,17 @@
 package com.mrozon.currencyconverter.data.db
 
 import androidx.room.Dao
+import androidx.room.Insert
+import androidx.room.OnConflictStrategy
+import androidx.room.Query
+import kotlinx.coroutines.flow.Flow
 
 @Dao
-interface CurrencyDao
+interface CurrencyDao {
+
+    @Insert(onConflict = OnConflictStrategy.REPLACE)
+    suspend fun insertAll(plants: List<ValuteDb>)
+
+    @Query("SELECT * FROM valutes")
+    fun getPlants(): Flow<List<ValuteDb>>
+}

+ 1 - 1
app/src/main/java/com/mrozon/currencyconverter/data/db/CurrencyDatabase.kt

@@ -7,7 +7,7 @@ import androidx.room.RoomDatabase
 
 @Database(entities = [ValuteDb::class], version = 1, exportSchema = false)
 abstract class CurrencyDatabase : RoomDatabase() {
-    abstract fun plantDao(): CurrencyDao
+    abstract fun currencyDao(): CurrencyDao
 
     companion object {
         private const val DATABASE_NAME = "currencies.db"

+ 1 - 1
app/src/main/java/com/mrozon/currencyconverter/di/DatabaseModule.kt

@@ -22,7 +22,7 @@ class DatabaseModule {
 
     @Provides
     fun provideCurrencyDao(currencyDatabase: CurrencyDatabase): CurrencyDao {
-        return currencyDatabase.plantDao()
+        return currencyDatabase.currencyDao()
     }
 
 }

+ 1 - 1
app/src/test/java/com/mrozon/currencyconverter/data/network/CurrencyServiceTest.kt

@@ -35,7 +35,7 @@ class CurrencyServiceTest {
     }
 
     @Test
-    fun `get currencies from real network request`()  = coroutinesTestRule.runBlockingTest {
+    fun get_currencies_from_real_network_request()  = coroutinesTestRule.runBlockingTest {
         val response = service.getCurrencies()
         Assert.assertEquals(response.valute?.size ?: 0, 34)
     }

+ 1 - 1
app/src/test/java/com/mrozon/currencyconverter/data/network/MapValutesDeserializerTest.kt

@@ -6,7 +6,7 @@ import org.junit.Test
 
 class MapValutesDeserializerTest {
     @Test
-    fun `check correct json to POJO`() {
+    fun check_correct_json_to_POJO() {
         val json = """
             {
                 "Date": "2021-06-19T11:30:00+03:00",