Yet Another OTP generator
Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

OtpItemViewModelTest.kt 3.1KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. package com.chameth.yaotp.viewmodel
  2. import androidx.arch.core.executor.testing.InstantTaskExecutorRule
  3. import androidx.lifecycle.Observer
  4. import com.chameth.yaotp.algos.Otp
  5. import com.nhaarman.mockitokotlin2.argThat
  6. import com.nhaarman.mockitokotlin2.doReturn
  7. import com.nhaarman.mockitokotlin2.mock
  8. import com.nhaarman.mockitokotlin2.verify
  9. import org.junit.Assert.assertEquals
  10. import org.junit.Rule
  11. import org.junit.Test
  12. class OtpItemViewModelTest {
  13. @get:Rule
  14. val instantTaskExecutorRule = InstantTaskExecutorRule()
  15. private val viewModel = OtpItemViewModel()
  16. @Test
  17. fun testCalculateTimeLeft_withFutureTimes() {
  18. assertEquals(1, viewModel.calculateTimeLeft(100L, 99L))
  19. assertEquals(1000, viewModel.calculateTimeLeft(1000L, 0L))
  20. assertEquals(1000, viewModel.calculateTimeLeft(99999991000L, 99999990000L))
  21. }
  22. @Test
  23. fun testCalculateTimeLeft_withPastTimes() {
  24. assertEquals(0, viewModel.calculateTimeLeft(100L, 100L))
  25. assertEquals(0, viewModel.calculateTimeLeft(100L, 1000L))
  26. assertEquals(0, viewModel.calculateTimeLeft(100L, 100000000000L))
  27. }
  28. @Test
  29. fun testSetAccount_updatesLabel() {
  30. val observer = mock<Observer<String>>()
  31. viewModel.label.observeForever(observer)
  32. viewModel.account = mock { on { label } doReturn "My label" }
  33. verify(observer).onChanged("My label")
  34. }
  35. @Test
  36. fun testSetAccount_updatesOtp() {
  37. val otp = mock<Otp>()
  38. val observer = mock<Observer<Otp>>()
  39. viewModel.otp.observeForever(observer)
  40. viewModel.account = mock { on { generateOtp() } doReturn otp }
  41. verify(observer).onChanged(otp)
  42. }
  43. @Test
  44. fun testSetAccount_updatesShowTime_withTimeBasedAccount() {
  45. val observer = mock<Observer<Boolean>>()
  46. viewModel.showTime.observeForever(observer)
  47. viewModel.account = mock { on { timeBased } doReturn true }
  48. verify(observer).onChanged(true)
  49. }
  50. @Test
  51. fun testSetAccount_updatesShowTime_withNonTimeBasedAccount() {
  52. val observer = mock<Observer<Boolean>>()
  53. viewModel.showTime.observeForever(observer)
  54. viewModel.account = mock { on { timeBased } doReturn false }
  55. verify(observer).onChanged(false)
  56. }
  57. @Test
  58. fun testSetAccount_updatesTimeLeft_withTimeBasedAccount() {
  59. val otp = mock<Otp> { on { expiresAt } doReturn (System.currentTimeMillis() / 1000) + 10 }
  60. val observer = mock<Observer<String>>()
  61. viewModel.timeLeft.observeForever(observer)
  62. viewModel.account = mock { on { generateOtp() } doReturn otp; on { timeBased } doReturn true }
  63. verify(observer).onChanged(argThat { matches(Regex("(9|10)s")) })
  64. }
  65. @Test
  66. fun testSetAccount_updatesTimeLeft_withNonTimeBasedAccount() {
  67. val otp = mock<Otp>()
  68. val observer = mock<Observer<String>>()
  69. viewModel.timeLeft.observeForever(observer)
  70. viewModel.account = mock { on { generateOtp() } doReturn otp; on { timeBased } doReturn false }
  71. verify(observer).onChanged("")
  72. }
  73. }