package uk.ivanc.archimvvm; import android.content.Context; import android.content.Intent; import android.databinding.Observable; import android.view.View; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.RobolectricGradleTestRunner; import org.robolectric.RuntimeEnvironment; import org.robolectric.annotation.Config; import uk.ivanc.archimvvm.model.Repository; import uk.ivanc.archimvvm.viewmodel.ItemRepoViewModel; import static org.junit.Assert.assertEquals; import static org.mockito.Matchers.any; import static org.mockito.Matchers.anyInt; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; @RunWith(RobolectricGradleTestRunner.class) @Config(constants = BuildConfig.class, sdk = 21) public class ItemRepoViewModelTest { ArchiApplication application; @Before public void setUp() { application = (ArchiApplication) RuntimeEnvironment.application; } @Test public void shouldGetName() { Repository repository = new Repository(); repository.name = "ivan"; ItemRepoViewModel itemRepoViewModel = new ItemRepoViewModel(application, repository); assertEquals(repository.name, itemRepoViewModel.getName()); } @Test public void shouldGetDescription() { Repository repository = new Repository(); repository.description = "This is the description"; ItemRepoViewModel itemRepoViewModel = new ItemRepoViewModel(application, repository); assertEquals(repository.description, itemRepoViewModel.getDescription()); } @Test public void shouldGetStars() { Repository repository = new Repository(); repository.stars = 10; String expectedString = application.getString(R.string.text_stars, repository.stars); ItemRepoViewModel itemRepoViewModel = new ItemRepoViewModel(application, repository); assertEquals(expectedString, itemRepoViewModel.getStars()); } @Test public void shouldGetForks() { Repository repository = new Repository(); repository.forks = 5; String expectedString = application.getString(R.string.text_forks, repository.forks); ItemRepoViewModel itemRepoViewModel = new ItemRepoViewModel(application, repository); assertEquals(expectedString, itemRepoViewModel.getForks()); } @Test public void shouldGetWatchers() { Repository repository = new Repository(); repository.watchers = 7; String expectedString = application.getString(R.string.text_watchers, repository.watchers); ItemRepoViewModel itemRepoViewModel = new ItemRepoViewModel(application, repository); assertEquals(expectedString, itemRepoViewModel.getWatchers()); } @Test public void shouldStartActivityOnItemClick() { Repository repository = new Repository(); Context mockContext = mock(Context.class); ItemRepoViewModel itemRepoViewModel = new ItemRepoViewModel(mockContext, repository); itemRepoViewModel.onItemClick(new View(application)); verify(mockContext).startActivity(any(Intent.class)); } @Test public void shouldNotifyPropertyChangeWhenSetRepository() { Repository repository = new Repository(); ItemRepoViewModel itemRepoViewModel = new ItemRepoViewModel(application, repository); Observable.OnPropertyChangedCallback mockCallback = mock(Observable.OnPropertyChangedCallback.class); itemRepoViewModel.addOnPropertyChangedCallback(mockCallback); itemRepoViewModel.setRepository(repository); verify(mockCallback).onPropertyChanged(any(Observable.class), anyInt()); } }