From 7e4d9d4faba5150f68aeba88b8205132fca05dff Mon Sep 17 00:00:00 2001 From: qaziabubakar-vd Date: Thu, 5 Aug 2021 15:51:00 +0500 Subject: [PATCH] - Test cases for out of area birth --- .../chw/fragment/OutOfAreaFragment.java | 10 +- .../activity/OutOfAreaChildActivityTest.java | 154 ++++++++++++++++++ .../fragment/OutOfAreaChildFragmentTest.java | 122 ++++++++++++++ 3 files changed, 281 insertions(+), 5 deletions(-) create mode 100644 opensrp-chw/src/test/java/org/smartregister/chw/activity/OutOfAreaChildActivityTest.java create mode 100644 opensrp-chw/src/test/java/org/smartregister/chw/fragment/OutOfAreaChildFragmentTest.java diff --git a/opensrp-chw/src/crvs/java/org/smartregister/chw/fragment/OutOfAreaFragment.java b/opensrp-chw/src/crvs/java/org/smartregister/chw/fragment/OutOfAreaFragment.java index b20ae84c3e..084e802368 100644 --- a/opensrp-chw/src/crvs/java/org/smartregister/chw/fragment/OutOfAreaFragment.java +++ b/opensrp-chw/src/crvs/java/org/smartregister/chw/fragment/OutOfAreaFragment.java @@ -270,7 +270,7 @@ public void countExecute() { } } - private String getCountSelect() { + public String getCountSelect() { String query = countSelect; try { @@ -291,7 +291,7 @@ private String getCountSelect() { return query; } - private String filterandSortQuery() { + public String filterandSortQuery() { String query = ""; try { if (StringUtils.isNoneBlank(filters)) { @@ -308,7 +308,7 @@ private String filterandSortQuery() { return query; } - private String customDeathQuery(int limit, int offset) { + public String customDeathQuery(int limit, int offset) { return "Select ec_out_of_area_child.id as _id, ec_out_of_area_child.relationalid, ec_out_of_area_child.last_interacted_with, " + "ec_out_of_area_child.base_entity_id , ec_out_of_area_child.first_name, ec_out_of_area_child.middle_name, " + "ec_out_of_area_child.surname, ec_out_of_area_child.middle_name as family_middle_name, ec_out_of_area_child.unique_id, " + @@ -317,7 +317,7 @@ private String customDeathQuery(int limit, int offset) { "from ec_out_of_area_child ORDER BY ec_out_of_area_child.last_interacted_with DESC LIMIT " + offset + "," + limit; } - private String customDeathQuery(int limit, int offset, String filter) { + public String customDeathQuery(int limit, int offset, String filter) { return "Select ec_out_of_area_child.id as _id, ec_out_of_area_child.relationalid, ec_out_of_area_child.last_interacted_with, " + "ec_out_of_area_child.base_entity_id , ec_out_of_area_child.first_name, ec_out_of_area_child.middle_name, " + "ec_out_of_area_child.surname, ec_out_of_area_child.middle_name as family_middle_name, ec_out_of_area_child.unique_id, " + @@ -326,7 +326,7 @@ private String customDeathQuery(int limit, int offset, String filter) { "from ec_out_of_area_child "+getFilters(filter)+" ORDER BY ec_out_of_area_child.last_interacted_with DESC LIMIT " + offset + "," + limit; } - private String getFilters(String filter) { + public String getFilters(String filter) { return "where ( ec_out_of_area_child.first_name like '%" + filter + "%' or ec_out_of_area_child.middle_name like '%" + filter + "%' or ec_out_of_area_child.unique_id like '%" + filter + "%')"; } } \ No newline at end of file diff --git a/opensrp-chw/src/test/java/org/smartregister/chw/activity/OutOfAreaChildActivityTest.java b/opensrp-chw/src/test/java/org/smartregister/chw/activity/OutOfAreaChildActivityTest.java new file mode 100644 index 0000000000..bdb3ddf67e --- /dev/null +++ b/opensrp-chw/src/test/java/org/smartregister/chw/activity/OutOfAreaChildActivityTest.java @@ -0,0 +1,154 @@ +package org.smartregister.chw.activity; + +import android.app.Activity; +import android.app.Application; +import android.content.Intent; +import org.json.JSONException; +import org.json.JSONObject; +import org.junit.After; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.mockito.MockitoAnnotations; +import org.mockito.junit.MockitoJUnit; +import org.mockito.junit.MockitoRule; +import org.robolectric.Robolectric; +import org.robolectric.RuntimeEnvironment; +import org.robolectric.android.controller.ActivityController; +import org.robolectric.util.ReflectionHelpers; +import org.smartregister.Context; +import org.smartregister.CoreLibrary; +import org.smartregister.chw.BaseUnitTest; +import org.smartregister.chw.core.adapter.NavigationAdapter; +import org.smartregister.chw.core.custom_views.NavigationMenu; +import org.smartregister.chw.presenter.CoreOutOfAreaChildRegisterPresenter; +import org.smartregister.chw.util.CrvsConstants; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.nio.charset.StandardCharsets; + +public class OutOfAreaChildActivityTest extends BaseUnitTest { + + @Rule + public MockitoRule mockitoRule = MockitoJUnit.rule(); + + @Mock + private CoreOutOfAreaChildRegisterPresenter presenter; + + private OutOfAreaChildActivity activity; + private ActivityController controller; + + @Before + public void setUp() { + MockitoAnnotations.initMocks(this); + Context context = Context.getInstance(); + CoreLibrary.init(context); + + //Auto login by default + context.session().start(context.session().lengthInMilliseconds()); + + MockitoAnnotations.initMocks(this); + controller = Robolectric.buildActivity(OutOfAreaChildActivity.class); + activity = controller.get(); + activity = Mockito.spy(activity); + // mute this presenter + Mockito.doNothing().when(activity).initializePresenter(); + ReflectionHelpers.setField(activity, "presenter", presenter); + } + + @Test + public void testOnResumption() { + NavigationMenu menu = Mockito.mock(NavigationMenu.class); + NavigationAdapter adapter = Mockito.mock(NavigationAdapter.class); + + Mockito.doReturn(adapter).when(menu).getNavigationAdapter(); + ReflectionHelpers.setStaticField(NavigationMenu.class, "instance", menu); + + ReflectionHelpers.setField(activity, "presenter", presenter); + activity.onResumption(); + + Mockito.verify(adapter).setSelectedView(Mockito.anyString()); + } + + @Test + public void testGetPresenter(){ + Assert.assertEquals(presenter, activity.presenter()); + } + + @Test + public void testActivityLoaded() { + Assert.assertNotNull(activity); + } + + @Test + public void testStartFormActivity() { + JSONObject json = new JSONObject(); + activity.startFormActivity(json); + Mockito.verify(activity).startActivityForResult(Mockito.any(Intent.class), Mockito.anyInt()); + } + + @Test + public void testOnActivityResultVerifyJsonReceived() { + OutOfAreaChildActivity spyActivity = Mockito.spy(activity); + JSONObject form = getFormJson(RuntimeEnvironment.application, CrvsConstants.OUT_OF_AREA_CHILD_FORM); + + CoreOutOfAreaChildRegisterPresenter presenter = Mockito.mock(CoreOutOfAreaChildRegisterPresenter.class); + ReflectionHelpers.setField(spyActivity, "presenter", presenter); + + int resultCode = Activity.RESULT_OK; + int requestCode = org.smartregister.family.util.JsonFormUtils.REQUEST_CODE_GET_JSON; + Intent data = new Intent(); + data.putExtra(org.smartregister.family.util.Constants.JSON_FORM_EXTRA.JSON, form.toString()); + spyActivity.onActivityResultExtended(requestCode, resultCode, data); + } + + @Test + public void testPresenterIsSetUp() { + CoreOutOfAreaChildRegisterPresenter presenter = ReflectionHelpers.getField(activity, "presenter"); + Assert.assertTrue(presenter != null); + } + + public JSONObject getFormJson(Application mContext, String formIdentity) { + if (mContext != null) { + try { + InputStream inputStream = mContext.getApplicationContext().getAssets() + .open("json" + ".form/" + formIdentity + ".json"); + BufferedReader reader = new BufferedReader( + new InputStreamReader(inputStream, StandardCharsets.UTF_8)); + String jsonString; + StringBuilder stringBuilder = new StringBuilder(); + + while ((jsonString = reader.readLine()) != null) { + stringBuilder.append(jsonString); + } + inputStream.close(); + + return new JSONObject(stringBuilder.toString()); + } catch (IOException | JSONException e) { + e.printStackTrace(); + } + } + + return null; + } + + @After + public void tearDown() { + try { + activity.finish(); + controller.pause().stop().destroy(); //destroy controller if we can + } catch (Exception e) { + e.printStackTrace(); + } + + //logout + Context.getInstance().session().expire(); + System.gc(); + } + +} \ No newline at end of file diff --git a/opensrp-chw/src/test/java/org/smartregister/chw/fragment/OutOfAreaChildFragmentTest.java b/opensrp-chw/src/test/java/org/smartregister/chw/fragment/OutOfAreaChildFragmentTest.java new file mode 100644 index 0000000000..5753390be1 --- /dev/null +++ b/opensrp-chw/src/test/java/org/smartregister/chw/fragment/OutOfAreaChildFragmentTest.java @@ -0,0 +1,122 @@ +package org.smartregister.chw.fragment; + +import android.widget.ImageView; +import android.widget.ProgressBar; + +import androidx.appcompat.app.AppCompatActivity; +import androidx.fragment.app.FragmentActivity; + +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.mockito.MockitoAnnotations; +import org.robolectric.Robolectric; +import org.robolectric.util.ReflectionHelpers; +import org.smartregister.Context; +import org.smartregister.CoreLibrary; +import org.smartregister.chw.BaseUnitTest; +import org.smartregister.chw.presenter.OutOfAreaChildFragmentPresenter; +import org.smartregister.commonregistry.CommonRepository; +import org.smartregister.receiver.SyncStatusBroadcastReceiver; + +import java.util.ArrayList; + +import static android.view.View.GONE; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.Mockito.when; + +public class OutOfAreaChildFragmentTest extends BaseUnitTest { + + @Mock + private Context context; + + @Mock + private ProgressBar syncProgressBar; + + @Mock + private CommonRepository commonRepository; + + @Mock + private ImageView syncButton; + + @Mock + private OutOfAreaChildFragmentPresenter presenter; + + private OutOfAreaFragment fragment; + + @Before + public void setUp() { + MockitoAnnotations.initMocks(this); + fragment = Mockito.mock(OutOfAreaFragment.class, Mockito.CALLS_REAL_METHODS); + CoreLibrary.init(context); + when(context.commonrepository(anyString())).thenReturn(commonRepository); + FragmentActivity activity = Robolectric.buildActivity(AppCompatActivity.class).create().resume().get(); + Context.bindtypes = new ArrayList<>(); + SyncStatusBroadcastReceiver.init(activity); + } + + @Test + public void presenterInitializesCorrectly() { + fragment.initializePresenter(); + Assert.assertNotNull(presenter); + } + + @Test + public void refreshSyncProgressSpinnerTogglesSyncVisibility() { + ReflectionHelpers.setField(fragment, "syncButton", syncButton); + ReflectionHelpers.setField(fragment, "syncProgressBar", syncProgressBar); + fragment.refreshSyncProgressSpinner(); + Mockito.verify(syncProgressBar, Mockito.times(1)).setVisibility(GONE); + Mockito.verify(syncButton, Mockito.times(1)).setVisibility(GONE); + } + + @Test + public void getCountSelect() { + fragment.dueFilterActive = true; + fragment.getCountSelect(); + Mockito.verify(fragment, Mockito.times(1)).getCountSelect(); + } + + @Test + public void getFilterAndSortQuery() { + fragment.dueFilterActive = true; + fragment.filterandSortQuery(); + Mockito.verify(fragment, Mockito.times(1)).filterandSortQuery(); + } + + @Test + public void getCustomDeathQueryWithDueFilters() { + fragment.dueFilterActive = true; + String query = fragment.filterandSortQuery(); + commonRepository.rawCustomQueryForAdapter(query); + } + + @Test + public void getCustomDeathQuery() { + commonRepository.rawCustomQueryForAdapter(fragment.customDeathQuery(0,20)); + } + + @Test + public void getCustomDeathQueryWithFilter() { + String query = fragment.getFilters("a"); + String deathQuery = fragment.customDeathQuery(0,20, query); + commonRepository.rawCustomQueryForAdapter(deathQuery); + } + + @Test + public void getToolbarTitle() { + fragment.dueFilterActive = true; + fragment.getToolBarTitle(); + Mockito.verify(fragment, Mockito.times(1)).getToolBarTitle(); + } + + @Test + public void getShowNotFoundPopup() { + fragment.dueFilterActive = true; + fragment.showNotFoundPopup(Mockito.anyString()); + Mockito.verify(fragment, Mockito.times(1)).showNotFoundPopup(Mockito.anyString()); + } + +}