Yet Another OTP generator
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

OtpListViewModelTest.kt 2.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. package com.chameth.yaotp.viewmodel
  2. import androidx.arch.core.executor.testing.InstantTaskExecutorRule
  3. import com.chameth.yaotp.accounts.Account
  4. import com.nhaarman.mockitokotlin2.*
  5. import org.junit.Assert.assertEquals
  6. import org.junit.Rule
  7. import org.junit.Test
  8. class OtpListViewModelTest {
  9. @get:Rule
  10. val instantTaskExecutorRule = InstantTaskExecutorRule()
  11. private val viewModel = OtpListViewModel()
  12. private val observer = mock<OtpListViewModel.AccountObserver>()
  13. @Test
  14. fun testAddAccount_incrementsNumberOfAccounts() {
  15. assertEquals(0, viewModel.numberOfAccounts)
  16. viewModel.addAccount(mock())
  17. assertEquals(1, viewModel.numberOfAccounts)
  18. viewModel.addAccount(mock())
  19. assertEquals(2, viewModel.numberOfAccounts)
  20. }
  21. @Test
  22. fun testRemoveAccount_decrementsNumberOfAccounts() {
  23. val account1 = mock<Account>()
  24. val account2 = mock<Account>()
  25. viewModel.addAccount(account1)
  26. viewModel.addAccount(account2)
  27. viewModel.removeAccount(account1)
  28. assertEquals(1, viewModel.numberOfAccounts)
  29. viewModel.removeAccount(account2)
  30. assertEquals(0, viewModel.numberOfAccounts)
  31. }
  32. @Test
  33. fun testRemoveAccount_withNonExistantAccount_doesNothing() {
  34. val account1 = mock<Account>()
  35. val account2 = mock<Account>()
  36. viewModel.addAccount(account1)
  37. viewModel.addObserver(observer)
  38. viewModel.removeAccount(account2)
  39. verifyNoMoreInteractions(observer)
  40. }
  41. @Test
  42. fun testAddAccount_notifiesRegisteredObservers() {
  43. viewModel.addAccount(mock())
  44. viewModel.addObserver(observer)
  45. viewModel.addAccount(mock())
  46. viewModel.removeObserver(observer)
  47. viewModel.addAccount(mock())
  48. verify(observer).accountAdded(1)
  49. verify(observer, never()).accountAdded(0)
  50. verify(observer, never()).accountAdded(2)
  51. }
  52. @Test
  53. fun testRemoveAccount_notifiesRegisteredObservers() {
  54. val account1 = mock<Account>()
  55. val account2 = mock<Account>()
  56. val account3 = mock<Account>()
  57. viewModel.addAccount(account1)
  58. viewModel.addAccount(account2)
  59. viewModel.addAccount(account3)
  60. viewModel.removeAccount(account1)
  61. viewModel.addObserver(observer)
  62. viewModel.removeAccount(account3)
  63. viewModel.removeObserver(observer)
  64. viewModel.removeAccount(account2)
  65. verify(observer).accountRemoved(1)
  66. verify(observer, never()).accountRemoved(0)
  67. }
  68. @Test
  69. fun testGetViewModel_returnsCorrectViewModel() {
  70. viewModel.addAccount(mock { on { label } doReturn "Foo" })
  71. viewModel.addAccount(mock { on { label } doReturn "Bar" })
  72. assertEquals("Foo", viewModel.getViewModelForAccount(0).label.value)
  73. assertEquals("Bar", viewModel.getViewModelForAccount(1).label.value)
  74. }
  75. }