Repository: incubator-taverna-mobile Updated Branches: refs/heads/master 5d8a40a5a -> 207362ed4
Added WorkflowPresenter Test Project: http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/commit/55b44a74 Tree: http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/tree/55b44a74 Diff: http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/diff/55b44a74 Branch: refs/heads/master Commit: 55b44a7447e35fad9d8e95a3e2839a6a7e47d92f Parents: 05ec299 Author: Hitesh Gautam <[email protected]> Authored: Sun Jun 17 17:17:14 2018 +0530 Committer: Hitesh Gautam <[email protected]> Committed: Thu Jun 21 20:46:48 2018 +0530 ---------------------------------------------------------------------- .../mobile/ui/workflow/WorkflowPresenter.java | 18 ++- app/src/main/res/values/strings.xml | 3 + .../ui/workflow/WorkflowPresenterTest.java | 131 +++++++++++++++++++ 3 files changed, 147 insertions(+), 5 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/55b44a74/app/src/main/java/org/apache/taverna/mobile/ui/workflow/WorkflowPresenter.java ---------------------------------------------------------------------- diff --git a/app/src/main/java/org/apache/taverna/mobile/ui/workflow/WorkflowPresenter.java b/app/src/main/java/org/apache/taverna/mobile/ui/workflow/WorkflowPresenter.java index 24d0827..eb2ca90 100644 --- a/app/src/main/java/org/apache/taverna/mobile/ui/workflow/WorkflowPresenter.java +++ b/app/src/main/java/org/apache/taverna/mobile/ui/workflow/WorkflowPresenter.java @@ -63,7 +63,7 @@ public class WorkflowPresenter extends BasePresenter<WorkflowMvpView> { compositeDisposable.clear(); } - public void loadAllWorkflow(int pageNumber) { + public void loadAllWorkflow(final int pageNumber) { checkViewAttached(); getMvpView().showProgressbar(true); compositeDisposable.add(mDataManager.getAllWorkflow(getQueryOptions(pageNumber)) @@ -72,9 +72,18 @@ public class WorkflowPresenter extends BasePresenter<WorkflowMvpView> { .subscribeWith(new DisposableObserver<Workflows>() { @Override public void onNext(Workflows workflows) { - getMvpView().showProgressbar(false); - getMvpView().removeLoadMoreProgressbar(); - getMvpView().showWorkflows(workflows); + if (workflows.getWorkflowList() != null) { + getMvpView().showProgressbar(false); + getMvpView().removeLoadMoreProgressbar(); + getMvpView().showWorkflows(workflows); + } else { + if (pageNumber == 1) { + getMvpView().showSnackBar(R.string.no_workflows_found); + } else { + getMvpView().showSnackBar(R.string.no_more_workflows_avialable); + } + getMvpView().removeLoadMoreProgressbar(); + } } @Override @@ -89,7 +98,6 @@ public class WorkflowPresenter extends BasePresenter<WorkflowMvpView> { } })); - } public void attachSearchHandler(final SearchView searchView) { http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/55b44a74/app/src/main/res/values/strings.xml ---------------------------------------------------------------------- diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 01eb1a2..304a469 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -166,6 +166,8 @@ limitations under the License. <string name="err_login_email">Enter valid email</string> <string name="err_login_password">Enter valid password</string> <string name="error_failed_to_fetch_workflow">Failed to fetch Workflow</string> + <string name="no_more_workflows_avialable">No more workflows avialable</string> + <string name="no_workflows_found">No Workflows Found</string> <string name="no_my_workflow">You have not created any workflow yet !</string> <string name="error_vaild_credential">Please enter valid credential</string> @@ -197,6 +199,7 @@ limitations under the License. <string name="pref_key_logged_in">pref_logged_in</string> <string name="pref_remainLogged_in">Remain Logged-in</string> <string name="pref_login_description">Decide whether or not to be automatically logged-in when the app starts</string> + <!-- Player Portal url info --> <string name="pref_player_default"> http://heater.cs.man.ac.uk:3000/</string> <!-- default value --> <string name="pref_player_title">Configure Taverna player portal</string> http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/55b44a74/app/src/test/java/org/apache/taverna/mobile/ui/workflow/WorkflowPresenterTest.java ---------------------------------------------------------------------- diff --git a/app/src/test/java/org/apache/taverna/mobile/ui/workflow/WorkflowPresenterTest.java b/app/src/test/java/org/apache/taverna/mobile/ui/workflow/WorkflowPresenterTest.java new file mode 100644 index 0000000..591b040 --- /dev/null +++ b/app/src/test/java/org/apache/taverna/mobile/ui/workflow/WorkflowPresenterTest.java @@ -0,0 +1,131 @@ +package org.apache.taverna.mobile.ui.workflow; + +import org.apache.taverna.mobile.FakeRemoteDataSource; +import org.apache.taverna.mobile.R; +import org.apache.taverna.mobile.data.DataManager; +import org.apache.taverna.mobile.data.model.Workflows; +import org.apache.taverna.mobile.utils.RxSchedulersOverrideRule; +import org.junit.After; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.runners.MockitoJUnitRunner; + +import java.util.HashMap; +import java.util.Map; + +import io.reactivex.Observable; + +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +@RunWith(MockitoJUnitRunner.class) +public class WorkflowPresenterTest { + + @Rule + public final RxSchedulersOverrideRule rxSchedulersOverrideRule = new + RxSchedulersOverrideRule(); + + @Mock + DataManager dataManager; + + @Mock + WorkflowMvpView workflowMvpView; + + private Workflows workflows; + private WorkflowPresenter workflowPresenter; + private Map<String, String> optionPage1; + private Map<String, String> optionPage2; + + @Before + public void setUp() { + + workflowPresenter = new WorkflowPresenter(dataManager); + workflowPresenter.attachView(workflowMvpView); + + workflows = FakeRemoteDataSource.getWorkflowList(); + + optionPage1 = new HashMap<>(); + optionPage1.put("elements", "title,type,uploader,preview,created-at"); + optionPage1.put("page", String.valueOf(1)); + optionPage1.put("num", String.valueOf(10)); + optionPage1.put("order", "reverse"); + + optionPage2 = new HashMap<>(); + optionPage2.put("elements", "title,type,uploader,preview,created-at"); + optionPage2.put("page", String.valueOf(2)); + optionPage2.put("num", String.valueOf(10)); + optionPage2.put("order", "reverse"); + } + + @After + public void tearDown() { + + workflowPresenter.detachView(); + } + + @Test + public void loadAllWorkflow_validWorkflowList_ReturnsResults() { + + when(dataManager.getAllWorkflow(optionPage1)).thenReturn( + Observable.just(workflows)); + + workflowPresenter.loadAllWorkflow(1); + + verify(workflowMvpView).showProgressbar(true); + verify(workflowMvpView).removeLoadMoreProgressbar(); + verify(workflowMvpView).showWorkflows(workflows); + verify(workflowMvpView, never()).showSnackBar(R.string.error_failed_to_fetch_workflow); + } + + @Test + public void loadAllWorkflow_EmptyWorkflow_ReturnNoWorkflowResults() { + + Workflows workflows = new Workflows(); + when(dataManager.getAllWorkflow(optionPage1)).thenReturn( + Observable.just(workflows)); + + workflowPresenter.loadAllWorkflow(1); + + verify(workflowMvpView).showProgressbar(true); + verify(workflowMvpView).removeLoadMoreProgressbar(); + verify(workflowMvpView).showSnackBar(R.string.no_workflows_found); + verify(workflowMvpView, never()).showWorkflows(workflows); + verify(workflowMvpView, never()).showSnackBar(R.string.error_failed_to_fetch_workflow); + } + + @Test + public void loadAllWorkflow_page2_EmptyWorkflow_ReturnNoMoreWorkflowResults() { + + Workflows workflows = new Workflows(); + when(dataManager.getAllWorkflow(optionPage2)).thenReturn( + Observable.just(workflows)); + + workflowPresenter.loadAllWorkflow(2); + + verify(workflowMvpView).showProgressbar(true); + verify(workflowMvpView).removeLoadMoreProgressbar(); + verify(workflowMvpView).showSnackBar(R.string.no_more_workflows_avialable); + verify(workflowMvpView, never()).showWorkflows(workflows); + verify(workflowMvpView, never()).showSnackBar(R.string.no_workflows_found); + verify(workflowMvpView, never()).showSnackBar(R.string.error_failed_to_fetch_workflow); + } + + @Test + public void loadAllWorkflow_RuntimeError_showError() { + + when(dataManager.getAllWorkflow(optionPage1)).thenReturn( + Observable.<Workflows>error(new RuntimeException())); + + workflowPresenter.loadAllWorkflow(1); + + verify(workflowMvpView).showProgressbar(false); + verify(workflowMvpView).removeLoadMoreProgressbar(); + verify(workflowMvpView, never()).showWorkflows(workflows); + verify(workflowMvpView).showSnackBar(R.string.error_failed_to_fetch_workflow); + } + +} \ No newline at end of file
