Ver código fonte

test: Added unit tests for the Activities Presenter.

This provides 100% coverage of the Activities Presenter class.
ardevd 7 anos atrás
pai
commit
81a300077c

+ 145 - 0
src/test/java/com/owncloud/android/ui/activities/ActivitiesPresenterTest.java

@@ -0,0 +1,145 @@
+package com.owncloud.android.ui.activities;
+
+import com.owncloud.android.datamodel.OCFile;
+import com.owncloud.android.lib.common.OwnCloudClient;
+import com.owncloud.android.lib.resources.activities.models.Activity;
+import com.owncloud.android.ui.activities.data.activities.ActivitiesRepository;
+import com.owncloud.android.ui.activities.data.files.FilesRepository;
+import com.owncloud.android.ui.activity.BaseActivity;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.ArgumentCaptor;
+import org.mockito.Captor;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import static org.mockito.Matchers.eq;
+import static org.mockito.Mockito.verify;
+
+public class ActivitiesPresenterTest {
+
+    @Mock
+    private FilesRepository mFileRepository;
+
+    @Mock
+    private ActivitiesContract.View mView;
+
+    @Mock
+    private ActivitiesRepository mActivitiesRepository;
+
+    @Mock
+    private BaseActivity mBaseActivity;
+
+    @Mock
+    private OwnCloudClient mOwnCloudClient;
+
+    @Mock
+    private OCFile mOCFile;
+
+    @Captor
+    private ArgumentCaptor<FilesRepository.ReadRemoteFileCallback> mReadRemoteFilleCallbackCaptor;
+
+    @Captor
+    private ArgumentCaptor<ActivitiesRepository.LoadActivitiesCallback> mLoadActivitiesCallbackCaptor;
+
+    private ActivitiesPresenter mPresenter;
+
+    private List<Object> activitiesList;
+
+
+    @Before
+    public void setupActivitiesPresenter() {
+        MockitoAnnotations.initMocks(this);
+        mPresenter = new ActivitiesPresenter(mActivitiesRepository, mFileRepository, mView);
+
+        activitiesList = new ArrayList<>();
+        activitiesList.add(new Activity());
+    }
+
+    @Test
+    public void loadActivitiesFromRepositoryIntoView() {
+        // When loading activities from repository is requested from presenter...
+        mPresenter.loadActivites(null);
+        // Progress indicator is shown in view
+        verify(mView).setProgressIndicatorState(eq(true));
+        // Repository starts retrieving activities from server
+        verify(mActivitiesRepository).getActivities(eq(null), mLoadActivitiesCallbackCaptor.capture());
+        // Repository returns data
+        mLoadActivitiesCallbackCaptor.getValue().onActivitiesLoaded(activitiesList, mOwnCloudClient, false);
+        // Progress indicator is hidden
+        verify(mView).setProgressIndicatorState(eq(false));
+        // List of activities is shown in view.
+        verify(mView).showActivites(eq(activitiesList), eq(mOwnCloudClient), eq(false));
+    }
+
+    @Test
+    public void loadActivitiesFromRepositoryShowError() {
+        // When loading activities from repository is requested from presenter...
+        mPresenter.loadActivites(null);
+        // Progress indicator is shown in view
+        verify(mView).setProgressIndicatorState(eq(true));
+        // Repository starts retrieving activities from server
+        verify(mActivitiesRepository).getActivities(eq(null), mLoadActivitiesCallbackCaptor.capture());
+        // Repository returns data
+        mLoadActivitiesCallbackCaptor.getValue().onActivitiesLoadedError("error");
+        // Progress indicator is hidden
+        verify(mView).setProgressIndicatorState(eq(false));
+        // Correct error is shown in view
+        verify(mView).showActivitiesLoadError(eq("error"));
+    }
+
+    @Test
+    public void loadRemoteFileFromRepositoryShowDetailUI() {
+        // When retrieving remote file from repository...
+        mPresenter.openActivity("null", mBaseActivity, true);
+        // Progress indicator is shown in view
+        verify(mView).setProgressIndicatorState(eq(true));
+        // Repository retrieves remote file
+        verify(mFileRepository).readRemoteFile(eq("null"), eq(mBaseActivity), eq(true),
+                mReadRemoteFilleCallbackCaptor.capture());
+        // Repository returns valid file object
+        mReadRemoteFilleCallbackCaptor.getValue().onFileLoaded(mOCFile);
+        // Progress indicator is hidden
+        verify(mView).setProgressIndicatorState(eq(false));
+        // File detail UI is shown
+        verify(mView).showActivityDetailUI(eq(mOCFile));
+    }
+
+    @Test
+    public void loadRemoteFileFromRepositoryShowEmptyFile() {
+        // When retrieving remote file from repository...
+        mPresenter.openActivity("null", mBaseActivity, true);
+        // Progress indicator is shown in view
+        verify(mView).setProgressIndicatorState(eq(true));
+        // Repository retrieves remote file
+        verify(mFileRepository).readRemoteFile(eq("null"), eq(mBaseActivity), eq(true),
+                mReadRemoteFilleCallbackCaptor.capture());
+        // Repository returns an valid but Null value file object.
+        mReadRemoteFilleCallbackCaptor.getValue().onFileLoaded(null);
+        // Progress indicator is hidden
+        verify(mView).setProgressIndicatorState(eq(false));
+        // Returned file is null. Inform user.
+        verify(mView).showActivityDetailUIIsNull();
+    }
+
+    @Test
+    public void loadRemoteFileFromRepositoryShowError() {
+        // When retrieving remote file from repository...
+        mPresenter.openActivity("null", mBaseActivity, true);
+        // Progress indicator is shown in view
+        verify(mView).setProgressIndicatorState(eq(true));
+        // Repository retrieves remote file
+        verify(mFileRepository).readRemoteFile(eq("null"), eq(mBaseActivity), eq(true),
+                mReadRemoteFilleCallbackCaptor.capture());
+        // Repository returns valid file object
+        mReadRemoteFilleCallbackCaptor.getValue().onFileLoadError("error");
+        // Progress indicator is hidden
+        verify(mView).setProgressIndicatorState(eq(false));
+        // Error message is shown to the user.
+        verify(mView).showActivityDetailError(eq("error"));
+    }
+}