package cash.z.ecc.android import cash.z.ecc.android.feedback.Feedback import cash.z.ecc.android.sdk.db.entity.PendingTransaction import cash.z.ecc.android.sdk.db.entity.* import cash.z.ecc.android.ui.send.SendViewModel import com.nhaarman.mockitokotlin2.* 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) } }