package com.khmelenko.lab.varis.presenter; import com.khmelenko.lab.varis.BuildConfig; import com.khmelenko.lab.varis.common.Constants; import com.khmelenko.lab.varis.dagger.DaggerTestComponent; import com.khmelenko.lab.varis.dagger.TestComponent; import com.khmelenko.lab.varis.network.response.Repo; import com.khmelenko.lab.varis.network.response.User; import com.khmelenko.lab.varis.network.retrofit.travis.TravisRestClient; import com.khmelenko.lab.varis.storage.AppSettings; import com.khmelenko.lab.varis.storage.CacheStorage; import com.khmelenko.lab.varis.task.TaskManager; import com.khmelenko.lab.varis.view.RepositoriesView; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.ArgumentCaptor; import org.robolectric.RobolectricGradleTestRunner; import org.robolectric.annotation.Config; import java.util.ArrayList; import java.util.List; import javax.inject.Inject; import de.greenrobot.event.EventBus; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.mockito.Matchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; /** * Testing {@link RepositoriesPresenter} * * @author Dmytro Khmelenko (d.khmelenko@gmail.com) */ @RunWith(RobolectricGradleTestRunner.class) @Config(constants = BuildConfig.class, sdk = 21) public class TestRepositoriesPresenter { @Inject TaskManager mTaskManager; @Inject EventBus mEventBus; @Inject TravisRestClient mTravisRestClient; @Inject CacheStorage mCacheStorage; private RepositoriesPresenter mRepositoriesPresenter; private RepositoriesView mRepositoriesView; @Before public void setup() { TestComponent component = DaggerTestComponent.builder().build(); component.inject(this); mRepositoriesPresenter = spy(new RepositoriesPresenter(mTravisRestClient, mEventBus, mTaskManager, mCacheStorage)); mRepositoriesView = mock(RepositoriesView.class); mRepositoriesPresenter.attach(mRepositoriesView); } @Test public void testReloadRepos() { final List<Repo> responseData = new ArrayList<>(); when(mTravisRestClient.getApiService().getRepos()).thenReturn(responseData); mRepositoriesPresenter.reloadRepos(); verify(mTaskManager, times(2)).findRepos(null); verify(mRepositoriesView, times(2)).hideProgress(); verify(mRepositoriesView, times(2)).setRepos(eq(responseData)); } @Test public void testReloadReposWithToken() { User user = new User(); user.setLogin("login"); when(mTravisRestClient.getApiService().getUser()).thenReturn(user); // pre-setting access token AppSettings.putAccessToken("token"); mRepositoriesPresenter.reloadRepos(); verify(mTaskManager).getUser(); ArgumentCaptor<User> userCaptor = ArgumentCaptor.forClass(User.class); verify(mRepositoriesView, times(2)).updateUserData(userCaptor.capture()); assertNotNull(userCaptor.getValue()); assertEquals(user.getLogin(), userCaptor.getValue().getLogin()); verify(mCacheStorage).saveUser(eq(user)); verify(mTaskManager).userRepos(eq(user.getLogin())); } @Test public void testUserLogout() { mRepositoriesPresenter.userLogout(); verify(mCacheStorage).deleteUser(); verify(mCacheStorage).deleteRepos(); verify(mTravisRestClient).updateTravisEndpoint(eq(Constants.OPEN_SOURCE_TRAVIS_URL)); } }