Skip to content

Instantly share code, notes, and snippets.

@makovkastar
Last active January 9, 2018 13:50
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save makovkastar/e3e1a2c39b57d254f54f643cb2fb7f44 to your computer and use it in GitHub Desktop.
Save makovkastar/e3e1a2c39b57d254f54f643cb2fb7f44 to your computer and use it in GitHub Desktop.
@MediumTest
@RunWith(AndroidJUnit4::class)
class LoginFragmentTest {
@Rule
@JvmField
val activityRule = IntentsTestRule(SingleFragmentActivity::class.java)
@Rule
@JvmField
val taskExecutorRule = InstantTaskExecutorRule()
@Rule
@JvmField
val mockitoRule: MockitoRule = MockitoJUnit.rule()
@Mock
private lateinit var viewModel: LoginViewModel
@Mock
private lateinit var emailTextChangedListener: TextWatcher
@Mock
private lateinit var passwordTextChangedListener: TextWatcher
private val emailField = ObservableField<String>()
private val passwordField = ObservableField<String>()
private val isSignInButtonEnabled = ObservableBoolean()
private val isProgressBarVisible = ObservableBoolean()
private val navigateToForgotPasswordPage = SingleLiveEvent<Unit>()
private val navigateToNextScreen = SingleLiveEvent<Unit>()
private val showErrorToast = SingleLiveEvent<Int>()
private lateinit var loginFragment: LoginFragment
@Before
fun setUp() {
loginFragment = LoginFragment()
`when`(viewModel.emailField).thenReturn(emailField)
`when`(viewModel.passwordField).thenReturn(passwordField)
`when`(viewModel.isSignInButtonEnabled).thenReturn(isSignInButtonEnabled)
`when`(viewModel.isProgressBarVisible).thenReturn(isProgressBarVisible)
`when`(viewModel.navigateToForgotPasswordPage).thenReturn(navigateToForgotPasswordPage)
`when`(viewModel.navigateToNextScreen).thenReturn(navigateToNextScreen)
`when`(viewModel.showErrorToast).thenReturn(showErrorToast)
`when`(viewModel.emailTextChangedListener()).thenReturn(emailTextChangedListener)
`when`(viewModel.passwordTextChangedListener()).thenReturn(passwordTextChangedListener)
loginFragment.viewModelFactory = createViewModelFactory(viewModel)
activityRule.activity.setFragment(loginFragment)
}
private fun <T : ViewModel> createViewModelFactory(viewModel: T): ViewModelProvider.Factory {
return object : ViewModelProvider.Factory {
override fun <T : ViewModel> create(viewModelClass: Class<T>): T {
if (viewModelClass.isAssignableFrom(viewModel.javaClass)) {
@Suppress("UNCHECKED_CAST")
return viewModel as T
}
throw IllegalArgumentException("Unknown view model class " + viewModelClass)
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment