Introducing the TransfersDao#getTransfersWithMissingValueIn(symbol: String) method, used to obtain only the transfers that lack a specific equivalent value entry, and related tests
This commit is contained in:
parent
a10c527956
commit
f197e44262
6 changed files with 134 additions and 7 deletions
|
@ -116,8 +116,9 @@ dependencies {
|
|||
// Core library
|
||||
androidTestImplementation 'androidx.test:core:1.1.0'
|
||||
|
||||
// testImplementation "androidx.arch.core:core-testing:$lifecycle_version"
|
||||
androidTestImplementation "androidx.arch.core:core-testing:$lifecycle_version"
|
||||
androidTestImplementation "androidx.room:room-testing:$room_version"
|
||||
androidTestImplementation 'androidx.test.ext:junit:1.1.0'
|
||||
androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1'
|
||||
androidTestImplementation 'com.jraska.livedata:testing-ktx:1.0.0'
|
||||
}
|
||||
|
|
|
@ -0,0 +1,42 @@
|
|||
package cy.agorise.bitsybitshareswallet
|
||||
|
||||
/*
|
||||
* Copyright (C) 2017 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import androidx.lifecycle.LiveData
|
||||
import androidx.lifecycle.Observer
|
||||
|
||||
import java.util.concurrent.CountDownLatch
|
||||
import java.util.concurrent.TimeUnit
|
||||
|
||||
object LiveDataTestUtil {
|
||||
fun <T> getValue(liveData: LiveData<T>): T {
|
||||
val data = arrayOfNulls<Any>(1)
|
||||
val latch = CountDownLatch(1)
|
||||
val observer = object : Observer<T> {
|
||||
override fun onChanged(o: T?) {
|
||||
data[0] = o
|
||||
latch.countDown()
|
||||
liveData.removeObserver(this)
|
||||
}
|
||||
}
|
||||
liveData.observeForever(observer)
|
||||
latch.await(2, TimeUnit.SECONDS)
|
||||
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
return data[0] as T
|
||||
}
|
||||
}
|
|
@ -1,20 +1,19 @@
|
|||
package cy.agorise.bitsybitshareswallet;
|
||||
|
||||
import android.content.Context
|
||||
import androidx.arch.core.executor.testing.InstantTaskExecutorRule
|
||||
import androidx.room.Room
|
||||
import androidx.test.core.app.ApplicationProvider
|
||||
import androidx.test.runner.AndroidJUnit4
|
||||
import androidx.test.ext.junit.runners.AndroidJUnit4
|
||||
import cy.agorise.bitsybitshareswallet.database.BitsyDatabase
|
||||
import cy.agorise.bitsybitshareswallet.database.entities.Merchant
|
||||
import org.junit.After
|
||||
import org.junit.Assert
|
||||
import org.junit.Before
|
||||
import org.junit.Test
|
||||
import org.junit.*
|
||||
import org.junit.runner.RunWith
|
||||
import java.io.IOException
|
||||
|
||||
@RunWith(AndroidJUnit4::class)
|
||||
public class MerchantQueryTest {
|
||||
class MerchantQueryTest {
|
||||
@get:Rule val testRule = InstantTaskExecutorRule()
|
||||
private lateinit var db: BitsyDatabase
|
||||
|
||||
@Before
|
||||
|
|
|
@ -0,0 +1,81 @@
|
|||
package cy.agorise.bitsybitshareswallet
|
||||
|
||||
import android.content.Context
|
||||
import android.util.Log
|
||||
import androidx.arch.core.executor.testing.InstantTaskExecutorRule
|
||||
import androidx.room.Room
|
||||
import androidx.test.core.app.ApplicationProvider
|
||||
import androidx.test.ext.junit.runners.AndroidJUnit4
|
||||
import com.jraska.livedata.test
|
||||
import cy.agorise.bitsybitshareswallet.database.BitsyDatabase
|
||||
import cy.agorise.bitsybitshareswallet.database.entities.EquivalentValue
|
||||
import cy.agorise.bitsybitshareswallet.database.entities.Transfer
|
||||
import org.junit.*
|
||||
import org.junit.runner.RunWith
|
||||
import java.io.IOException
|
||||
|
||||
@RunWith(AndroidJUnit4::class)
|
||||
class TransfersTests {
|
||||
val TAG = "TransfersTests"
|
||||
@get:Rule val testRule = InstantTaskExecutorRule()
|
||||
private lateinit var db: BitsyDatabase
|
||||
private val context = ApplicationProvider.getApplicationContext<Context>()
|
||||
|
||||
@Before
|
||||
fun createDb() {
|
||||
db = Room.inMemoryDatabaseBuilder(context, BitsyDatabase::class.java).build()
|
||||
|
||||
// We create 2 transfers for the 'transfers' table, but only one of them will have an equivalent value entry
|
||||
val t1 = Transfer("1.11.702181910", 34118155, 1485018549, 264174, "1.3.0", "1.2.32567","1.2.139293",15869682,"1.3.0","")
|
||||
val t2 = Transfer("1.11.684483739", 33890367, 1547171166, 11030, "1.3.0", "1.2.139293","1.2.1029856",98,"1.3.120","")
|
||||
db.transferDao().insert(t1)
|
||||
db.transferDao().insert(t2)
|
||||
|
||||
// Here's the equivalent value for the first transaction inserted (t1)
|
||||
val equivalentValue = EquivalentValue("1.11.702181910", 0, "usd")
|
||||
db.equivalentValueDao().insert(equivalentValue)
|
||||
}
|
||||
|
||||
@After
|
||||
@Throws(IOException::class)
|
||||
fun closeDb(){
|
||||
db.close()
|
||||
}
|
||||
|
||||
/**
|
||||
* This test makes use of the LiveData Testing library and its objective is to prove that
|
||||
* the TransferDao#getTransfersWithMissingValueIn(symbol: String) will return only the
|
||||
* second 'transfer' entry.
|
||||
* <p>
|
||||
* @see cy.agorise.bitsybitshareswallet.database.daos.TransferDao.getTransfersWithMissingValueIn
|
||||
* @see cy.agorise.bitsybitshareswallet.LiveDataTestUtil
|
||||
*/
|
||||
@Test
|
||||
fun testGetTransfersMissingEquivalentValues(){
|
||||
db.transferDao()
|
||||
.getTransfersWithMissingValueIn("usd")
|
||||
.test()
|
||||
.awaitValue()
|
||||
.assertHasValue()
|
||||
.assertValue { transfers -> transfers.size == 1 }
|
||||
.assertValue { transfers -> transfers[0].id == "1.11.684483739"}
|
||||
.assertValue { transfers -> transfers[0].blockNumber == 33890367L}
|
||||
}
|
||||
|
||||
/**
|
||||
* This test makes use of the simple LiveDataTestUtil class and its objective is to prove that
|
||||
* the TransferDao#getTransfersWithMissingValueIn(symbol: String) will return only the
|
||||
* second 'transfer' entry.
|
||||
* <p>
|
||||
* @see cy.agorise.bitsybitshareswallet.LiveDataTestUtil
|
||||
*/
|
||||
@Test
|
||||
fun testGetTransfersMissingEquivalentValues2(){
|
||||
val transfers: List<Transfer> = LiveDataTestUtil.getValue(db.transferDao().getTransfersWithMissingValueIn("usd"))
|
||||
Assert.assertNotNull(transfers)
|
||||
Assert.assertEquals(1, transfers.size)
|
||||
Assert.assertEquals("1.11.684483739", transfers[0].id)
|
||||
Assert.assertEquals(33890367, transfers[0].blockNumber)
|
||||
Log.d(TAG, "transfer ${transfers[0]}");
|
||||
}
|
||||
}
|
|
@ -5,6 +5,7 @@ import androidx.room.Dao
|
|||
import androidx.room.Insert
|
||||
import androidx.room.Query
|
||||
import cy.agorise.bitsybitshareswallet.database.entities.EquivalentValue
|
||||
import cy.agorise.bitsybitshareswallet.database.entities.Transfer
|
||||
|
||||
@Dao
|
||||
interface EquivalentValueDao {
|
||||
|
|
|
@ -29,6 +29,9 @@ interface TransferDao {
|
|||
@Query("SELECT block_number FROM transfers WHERE timestamp='0' LIMIT 1")
|
||||
fun getTransferBlockNumberWithMissingTime(): LiveData<Long>
|
||||
|
||||
@Query("SELECT * FROM transfers WHERE id NOT IN (SELECT transfer_id FROM equivalent_values WHERE symbol = :symbol)")
|
||||
fun getTransfersWithMissingValueIn(symbol: String): LiveData<List<Transfer>>
|
||||
|
||||
@Query("DELETE FROM transfers")
|
||||
fun deleteAll()
|
||||
}
|
Loading…
Reference in a new issue