zircles-android/app/src/test/java/cash/z/ecc/android/SendViewModelTest.kt

111 lines
3.5 KiB
Kotlin

package cash.z.ecc.android
import cash.z.ecc.android.feedback.Feedback
import cash.z.ecc.android.ui.send.SendViewModel
import cash.z.ecc.android.sdk.entity.*
import com.nhaarman.mockitokotlin2.verify
import com.nhaarman.mockitokotlin2.verifyZeroInteractions
import com.nhaarman.mockitokotlin2.whenever
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.newSingleThreadContext
import kotlinx.coroutines.test.setMain
import org.junit.Assert.assertEquals
import org.junit.Before
import org.junit.Test
import org.mockito.Mock
import org.mockito.MockitoAnnotations
import org.mockito.Spy
class SendViewModelTest {
@Mock lateinit var creatingTx: PendingTransaction
@Mock lateinit var createdTx: PendingTransaction
@Mock lateinit var submittedTx: PendingTransaction
@Mock lateinit var minedTx: PendingTransaction
@Mock
lateinit var feedback: Feedback
@Spy
lateinit var sendViewModel: SendViewModel
@Before
fun setUp() {
MockitoAnnotations.initMocks(this)
Dispatchers.setMain(newSingleThreadContext("Main thread"))
whenever(creatingTx.id).thenReturn(7)
whenever(creatingTx.submitAttempts).thenReturn(0)
whenever(createdTx.id).thenReturn(7)
whenever(createdTx.raw).thenReturn(byteArrayOf(0x1))
whenever(submittedTx.id).thenReturn(7)
whenever(submittedTx.raw).thenReturn(byteArrayOf(0x1))
whenever(submittedTx.submitAttempts).thenReturn(1)
whenever(minedTx.id).thenReturn(7)
whenever(minedTx.raw).thenReturn(byteArrayOf(0x1))
whenever(minedTx.submitAttempts).thenReturn(1)
whenever(minedTx.minedHeight).thenReturn(500_001)
sendViewModel.feedback = feedback
}
@Test
fun testUpdateMetrics_creating() {
// doNothing().whenever(sendViewModel).report(any())
assertEquals(true, creatingTx.isCreating())
sendViewModel.updateMetrics(creatingTx)
verify(sendViewModel).report("7.metric.tx.initialized")
assertEquals(1, sendViewModel.metrics.size)
verifyZeroInteractions(feedback)
}
@Test
fun testUpdateMetrics_created() {
assertEquals(false, createdTx.isCreating())
assertEquals(true, createdTx.isCreated())
sendViewModel.updateMetrics(creatingTx)
sendViewModel.updateMetrics(createdTx)
Thread.sleep(100)
println(sendViewModel.metrics)
verify(sendViewModel).report("7.metric.tx.created")
assertEquals(1, sendViewModel.metrics.size)
}
@Test
fun testUpdateMetrics_submitted() {
assertEquals(false, submittedTx.isCreating())
assertEquals(false, submittedTx.isCreated())
assertEquals(true, submittedTx.isSubmitSuccess())
sendViewModel.updateMetrics(creatingTx)
sendViewModel.updateMetrics(createdTx)
sendViewModel.updateMetrics(submittedTx)
assertEquals(5, sendViewModel.metrics.size)
Thread.sleep(100)
assertEquals(1, sendViewModel.metrics.size)
verify(feedback).report(sendViewModel.metrics.values.first())
}
@Test
fun testUpdateMetrics_mined() {
assertEquals(true, minedTx.isMined())
assertEquals(true, minedTx.isSubmitSuccess())
sendViewModel.updateMetrics(creatingTx)
sendViewModel.updateMetrics(createdTx)
sendViewModel.updateMetrics(submittedTx)
sendViewModel.updateMetrics(minedTx)
assertEquals(7, sendViewModel.metrics.size)
Thread.sleep(100)
assertEquals(0, sendViewModel.metrics.size)
}
}