diff --git a/gradle.properties b/gradle.properties index 9af23d40..44edcb2b 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ -VERSION_NAME=5.0.0-BETA-SNAPSHOT +VERSION_NAME=5.0.0-BETA2-SNAPSHOT VERSION_CODE=3 GROUP=org.smartregister POM_SETTING_DESCRIPTION=OpenSRP Client Immunization diff --git a/opensrp-immunization/build.gradle b/opensrp-immunization/build.gradle index eed2352b..b0cc6d36 100644 --- a/opensrp-immunization/build.gradle +++ b/opensrp-immunization/build.gradle @@ -110,10 +110,10 @@ android { dependencies { - testImplementation 'junit:junit:4.12' - coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.5' + testImplementation 'junit:junit:4.13.2' + coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.6' - implementation('org.smartregister:opensrp-client-core:6.0.0-ALPHA-SNAPSHOT@aar') { + implementation('org.smartregister:opensrp-client-core:6.0.0-BETA2-SNAPSHOT@aar') { transitive = true exclude group: 'com.github.bmelnychuk', module: 'atv' exclude group: 'jakarta.annotation', module: 'jakarta.annotation-api' @@ -121,7 +121,7 @@ dependencies { exclude group: 'com.ibm.fhir', module: 'fhir-path' } - implementation('org.smartregister:opensrp-client-native-form:3.0.0-ALPHA-SNAPSHOT@aar') { + implementation('org.smartregister:opensrp-client-native-form:3.0.0-BETA-SNAPSHOT@aar') { transitive = true exclude group: 'com.android.support', module: 'recyclerview-v7' exclude group: 'com.google.code.gson', module: 'gson' diff --git a/opensrp-immunization/src/main/java/org/smartregister/immunization/ImmunizationLibrary.java b/opensrp-immunization/src/main/java/org/smartregister/immunization/ImmunizationLibrary.java index 6b877fc1..ad2bf979 100644 --- a/opensrp-immunization/src/main/java/org/smartregister/immunization/ImmunizationLibrary.java +++ b/opensrp-immunization/src/main/java/org/smartregister/immunization/ImmunizationLibrary.java @@ -33,9 +33,14 @@ */ public class ImmunizationLibrary { + public static List COMBINED_VACCINES = new ArrayList<>(); + public static Map COMBINED_VACCINES_MAP = new HashMap<>(); private static ImmunizationLibrary instance; + private static boolean allowExpiredVaccineEntry; + private static Map vaccineCacheMap = new HashMap<>(); private final Repository repository; private final Context context; + private final Map conditionalVaccinesMap = new HashMap<>(); private EventClientRepository eventClientRepository; private VaccineRepository vaccineRepository; private RecurringServiceRecordRepository recurringServiceRecordRepository; @@ -45,13 +50,8 @@ public class ImmunizationLibrary { private CommonFtsObject commonFtsObject; private int applicationVersion; private int databaseVersion; + private String applicationVersionName; private Map jsonMap = new HashMap<>(); - private static boolean allowExpiredVaccineEntry; - private static Map vaccineCacheMap = new HashMap<>(); - - public static List COMBINED_VACCINES = new ArrayList<>(); - public static Map COMBINED_VACCINES_MAP = new HashMap<>(); - private final Map conditionalVaccinesMap = new HashMap<>(); private String currentConditionalVaccine; private boolean allowSyncImmediately = false; private List skippableVaccines = new ArrayList<>(); @@ -59,19 +59,20 @@ public class ImmunizationLibrary { private long vaccineSyncTime = -1; - private ImmunizationLibrary(Context context, Repository repository, CommonFtsObject commonFtsObject, int applicationVersion, int databaseVersion) { + private ImmunizationLibrary(Context context, Repository repository, CommonFtsObject commonFtsObject, int applicationVersion, String applicationVersionName, int databaseVersion) { this.repository = repository; this.context = context; this.commonFtsObject = commonFtsObject; this.applicationVersion = applicationVersion; + this.applicationVersionName = applicationVersionName; this.databaseVersion = databaseVersion; setCurrentConditionalVaccine(null); setSkippableVaccines(Arrays.asList(VaccineRepo.Vaccine.bcg2, VaccineRepo.Vaccine.measles1)); } - public static void init(Context context, Repository repository, CommonFtsObject commonFtsObject, int applicationVersion, int databaseVersion) { + public static void init(Context context, Repository repository, CommonFtsObject commonFtsObject, int applicationVersion, String applicationVersionName, int databaseVersion) { if (instance == null) { - instance = new ImmunizationLibrary(context, repository, commonFtsObject, applicationVersion, databaseVersion); + instance = new ImmunizationLibrary(context, repository, commonFtsObject, applicationVersion, applicationVersionName, databaseVersion); allowExpiredVaccineEntry = instance.getProperties().isTrue(IMConstants.APP_PROPERTIES.VACCINE_EXPIRED_ENTRY_ALLOW); @@ -85,6 +86,37 @@ public static void init(Context context, Repository repository, CommonFtsObject } } + /** + * This init method is deprecated, use {@link #init(Context context, Repository repository, CommonFtsObject commonFtsObject, int applicationVersion, String applicationVersionName, int databaseVersion. + */ + @Deprecated + public static void init(Context context, Repository repository, CommonFtsObject commonFtsObject, int applicationVersion, int databaseVersion) { + init(context, repository, commonFtsObject, applicationVersion, null, databaseVersion); + } + + public static T assetJsonToJava(Map jsonMap, android.content.Context context, String fileName, Class clazz, Type type) { + return AssetHandler.assetJsonToJava(jsonMap, context, fileName, clazz, type); + } + + public static ImmunizationLibrary getInstance() { + if (instance == null) { + throw new IllegalStateException(" Instance does not exist!!! Call " + ImmunizationLibrary.class + .getName() + ".init method in the onCreate method of your Application class "); + } + return instance; + } + + public static Map getVaccineCacheMap() { + return vaccineCacheMap; + } + + /** + * Public method to clear the instance/destroy useful for testing + */ + public static void destroy() { + instance = null; + } + public Map getConditionalVaccinesMap() { return conditionalVaccinesMap; } @@ -93,10 +125,6 @@ public T assetJsonToJava(String fileName, Class clazz, Type type) { return AssetHandler.assetJsonToJava(jsonMap, context.applicationContext(), fileName, clazz, type); } - public static T assetJsonToJava(Map jsonMap, android.content.Context context, String fileName, Class clazz, Type type) { - return AssetHandler.assetJsonToJava(jsonMap, context, fileName, clazz, type); - } - public EventClientRepository eventClientRepository() { if (eventClientRepository == null) { eventClientRepository = new EventClientRepository(); @@ -163,6 +191,10 @@ public int getApplicationVersion() { return applicationVersion; } + public String getApplicationVersionName() { + return applicationVersionName; + } + public int getDatabaseVersion() { return databaseVersion; } @@ -171,14 +203,6 @@ public Locale getLocale() { return ImmunizationLibrary.getInstance().context().applicationContext().getResources().getConfiguration().locale; } - public static ImmunizationLibrary getInstance() { - if (instance == null) { - throw new IllegalStateException(" Instance does not exist!!! Call " + ImmunizationLibrary.class - .getName() + ".init method in the onCreate method of your Application class "); - } - return instance; - } - public Map getVaccinesConfigJsonMap() { return jsonMap; } @@ -208,10 +232,6 @@ public boolean isAllowExpiredVaccineEntry() { return allowExpiredVaccineEntry; } - public static Map getVaccineCacheMap() { - return vaccineCacheMap; - } - public boolean isExpiredVaccineCardRed() { return getProperties().isTrue(IMConstants.APP_PROPERTIES.EXPIRED_CARD_AS_RED); } diff --git a/opensrp-immunization/src/main/java/org/smartregister/immunization/service/intent/RecurringIntentService.java b/opensrp-immunization/src/main/java/org/smartregister/immunization/service/intent/RecurringIntentService.java index c504ac74..eb2fe69a 100644 --- a/opensrp-immunization/src/main/java/org/smartregister/immunization/service/intent/RecurringIntentService.java +++ b/opensrp-immunization/src/main/java/org/smartregister/immunization/service/intent/RecurringIntentService.java @@ -148,8 +148,7 @@ protected void onHandleIntent(Intent intent) { jsonArray.put(jsonObject); } - JsonFormUtils - .createServiceEvent(getApplicationContext(), serviceRecord, EVENT_TYPE, ENTITY_TYPE, jsonArray); + JsonFormUtils.createServiceEvent(serviceRecord, EVENT_TYPE, ENTITY_TYPE, jsonArray, ImmunizationLibrary.getInstance().context()); recurringServiceRecordRepository.close(serviceRecord.getId()); } } diff --git a/opensrp-immunization/src/main/java/org/smartregister/immunization/service/intent/VaccineIntentService.java b/opensrp-immunization/src/main/java/org/smartregister/immunization/service/intent/VaccineIntentService.java index 7bd36793..6df72e90 100644 --- a/opensrp-immunization/src/main/java/org/smartregister/immunization/service/intent/VaccineIntentService.java +++ b/opensrp-immunization/src/main/java/org/smartregister/immunization/service/intent/VaccineIntentService.java @@ -134,10 +134,10 @@ protected void onHandleIntent(Intent intent) { jsonObject.put(JsonFormUtils.VALUE, vaccine.getCalculation()); jsonArray.put(jsonObject); - JsonFormUtils.createVaccineEvent(getApplicationContext(), vaccine, getEventType(), getEntityType(), jsonArray); + JsonFormUtils.createVaccineEvent(vaccine, getEventType(), getEntityType(), jsonArray, ImmunizationLibrary.getInstance().context()); //log out of catchment service since this is required in some of the hia2 report indicators if (vaccine.getBaseEntityId() == null || vaccine.getBaseEntityId().isEmpty() || new Integer(1).equals(vaccine.getOutOfCatchment())) { - JsonFormUtils.createVaccineEvent(getApplicationContext(), vaccine, getEventTypeOutOfCatchment(), getEntityType(), jsonArray); + JsonFormUtils.createVaccineEvent(vaccine, getEventTypeOutOfCatchment(), getEntityType(), jsonArray, ImmunizationLibrary.getInstance().context()); } vaccineRepository.close(vaccine.getId()); diff --git a/opensrp-immunization/src/main/java/org/smartregister/immunization/util/JsonFormUtils.java b/opensrp-immunization/src/main/java/org/smartregister/immunization/util/JsonFormUtils.java index 305c83ae..70267c8c 100644 --- a/opensrp-immunization/src/main/java/org/smartregister/immunization/util/JsonFormUtils.java +++ b/opensrp-immunization/src/main/java/org/smartregister/immunization/util/JsonFormUtils.java @@ -5,8 +5,11 @@ import org.apache.commons.lang3.StringUtils; import org.json.JSONArray; +import org.json.JSONException; import org.json.JSONObject; +import org.smartregister.AllConstants; import org.smartregister.clientandeventmodel.Event; +import org.smartregister.domain.Observation; import org.smartregister.immunization.ImmunizationLibrary; import org.smartregister.immunization.domain.ServiceRecord; import org.smartregister.immunization.domain.Vaccine; @@ -14,15 +17,26 @@ import java.util.Date; +import timber.log.Timber; + /** * Created by keyman on 31/07/2017. */ public class JsonFormUtils extends org.smartregister.util.JsonFormUtils { - public static void createVaccineEvent(Context context, Vaccine vaccine, String eventType, String entityType, - JSONArray fields) { + /** + * This createVaccineEvent method is deprecated, use {@link #createVaccineEvent(Vaccine vaccine, String eventType, String entityType, JSONArray fields, org.smartregister.Context context)} instead which adds application version name. + */ + @Deprecated + public static void createVaccineEvent(Context context, Vaccine vaccine, String eventType, String entityType, JSONArray fields) { + + org.smartregister.Context openSRPContext = ImmunizationLibrary.getInstance().context(); + createVaccineEvent(vaccine, eventType, entityType, fields, openSRPContext); + } + + public static void createVaccineEvent(Vaccine vaccine, String eventType, String entityType, JSONArray fields, org.smartregister.Context context) { try { - EventClientRepository db = ImmunizationLibrary.getInstance().eventClientRepository(); + EventClientRepository db = context.getEventClientRepository(); Event event = (Event) new Event() .withBaseEntityId(vaccine.getBaseEntityId()) @@ -40,8 +54,16 @@ public static void createVaccineEvent(Context context, Vaccine vaccine, String e event.setTeamId(vaccine.getTeamId()); event.setChildLocationId(vaccine.getChildLocationId()); event.addDetails(IMConstants.VaccineEvent.PROGRAM_CLIENT_ID, vaccine.getProgramClientId()); + event.addDetails(AllConstants.DATA_STRATEGY, context.allSharedPreferences().fetchCurrentDataStrategy()); + + try { + addFormSubmissionFieldObservation(AllConstants.DATA_STRATEGY, context.allSharedPreferences().fetchCurrentDataStrategy(), Observation.TYPE.TEXT, event); + } catch (JSONException jsonException) { + Timber.e(jsonException); + } event.setClientApplicationVersion(ImmunizationLibrary.getInstance().getApplicationVersion()); + event.setClientApplicationVersionName(ImmunizationLibrary.getInstance().getApplicationVersionName()); event.setClientDatabaseVersion(ImmunizationLibrary.getInstance().getDatabaseVersion()); if (fields != null && fields.length() != 0) @@ -72,10 +94,19 @@ public static void createVaccineEvent(Context context, Vaccine vaccine, String e } } - public static void createServiceEvent(Context context, ServiceRecord serviceRecord, String eventType, String entityType, - JSONArray fields) { + /** + * This createServiceEvent method is deprecated, use {@link #createServiceEvent(ServiceRecord serviceRecord, String eventType, String entityType, JSONArray fields, org.smartregister.Context context)} instead which adds application version name. + */ + @Deprecated + public static void createServiceEvent(Context context, ServiceRecord serviceRecord, String eventType, String entityType, JSONArray fields) { + + org.smartregister.Context openSRPContext = ImmunizationLibrary.getInstance().context(); + createServiceEvent(serviceRecord, eventType, entityType, fields, openSRPContext); + } + + public static void createServiceEvent(ServiceRecord serviceRecord, String eventType, String entityType, JSONArray fields, org.smartregister.Context context) { try { - EventClientRepository db = ImmunizationLibrary.getInstance().eventClientRepository(); + EventClientRepository db = context.getEventClientRepository(); Event event = (Event) new Event() .withBaseEntityId(serviceRecord.getBaseEntityId()) @@ -94,8 +125,16 @@ public static void createServiceEvent(Context context, ServiceRecord serviceReco event.setTeamId(serviceRecord.getTeamId()); event.setChildLocationId(serviceRecord.getChildLocationId()); event.addDetails(IMConstants.VaccineEvent.PROGRAM_CLIENT_ID, serviceRecord.getProgramClientId()); + event.addDetails(AllConstants.DATA_STRATEGY, context.allSharedPreferences().fetchCurrentDataStrategy()); + + try { + addFormSubmissionFieldObservation(AllConstants.DATA_STRATEGY, context.allSharedPreferences().fetchCurrentDataStrategy(), Observation.TYPE.TEXT, event); + } catch (JSONException jsonException) { + Timber.e(jsonException); + } event.setClientApplicationVersion(ImmunizationLibrary.getInstance().getApplicationVersion()); + event.setClientApplicationVersionName(ImmunizationLibrary.getInstance().getApplicationVersionName()); event.setClientDatabaseVersion(ImmunizationLibrary.getInstance().getDatabaseVersion()); if (fields != null && fields.length() != 0) @@ -107,7 +146,6 @@ public static void createServiceEvent(Context context, ServiceRecord serviceReco } } - if (event != null) { JSONObject eventJson = new JSONObject(JsonFormUtils.gson.toJson(event)); diff --git a/opensrp-immunization/src/test/java/org/smartregister/immunization/customshadows/ShadowJsonFormUtils.java b/opensrp-immunization/src/test/java/org/smartregister/immunization/customshadows/ShadowJsonFormUtils.java index 9c7b3177..4203f65e 100644 --- a/opensrp-immunization/src/test/java/org/smartregister/immunization/customshadows/ShadowJsonFormUtils.java +++ b/opensrp-immunization/src/test/java/org/smartregister/immunization/customshadows/ShadowJsonFormUtils.java @@ -1,12 +1,12 @@ package org.smartregister.immunization.customshadows; -import android.content.Context; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import org.json.JSONArray; import org.robolectric.annotation.Implementation; import org.robolectric.annotation.Implements; +import org.smartregister.Context; import org.smartregister.immunization.domain.ServiceRecord; import org.smartregister.immunization.domain.Vaccine; import org.smartregister.immunization.util.JsonFormUtils; @@ -23,9 +23,9 @@ public class ShadowJsonFormUtils { private static HashMap>> methodCalls = new HashMap<>(); @Implementation - public static void createVaccineEvent(Context context, Vaccine vaccine, String eventType, String entityType, JSONArray fields) { + public static void createVaccineEvent( Vaccine vaccine, String eventType, String entityType, JSONArray fields,Context context) { // TODO: Make this dynamic and reusable for other instances - String methodName = "createVaccineEvent(Context, Vaccine, String, String, JSONArray)"; + String methodName = "createVaccineEvent(Vaccine, String, String, JSONArray, Context)"; int count = 0; @@ -47,9 +47,9 @@ public static void createVaccineEvent(Context context, Vaccine vaccine, String e } @Implementation - public static void createServiceEvent(Context context, ServiceRecord serviceRecord, String eventType, String entityType, JSONArray fields) { + public static void createServiceEvent(ServiceRecord serviceRecord, String eventType, String entityType, JSONArray fields, Context context) { // TODO: Make this dynamic and reusable for other instances - String methodName = "createServiceEvent(Context, ServiceRecord, String, String, JSONArray)"; + String methodName = "createServiceEvent(ServiceRecord, String, String, JSONArray, Context)"; int count = 0; diff --git a/opensrp-immunization/src/test/java/org/smartregister/immunization/service/intent/ServiceIntentServiceRoboTest.java b/opensrp-immunization/src/test/java/org/smartregister/immunization/service/intent/ServiceIntentServiceRoboTest.java index 9d2a9ea1..f2346fde 100644 --- a/opensrp-immunization/src/test/java/org/smartregister/immunization/service/intent/ServiceIntentServiceRoboTest.java +++ b/opensrp-immunization/src/test/java/org/smartregister/immunization/service/intent/ServiceIntentServiceRoboTest.java @@ -44,7 +44,7 @@ public void onHandleIntentShouldGenerateValidJsonFieldsForEventCreation() { org.smartregister.Context context = Mockito.mock(org.smartregister.Context.class); Mockito.doReturn(new AppProperties()).when(context).getAppProperties(); - ImmunizationLibrary.init(context, Mockito.mock(Repository.class), Mockito.mock(CommonFtsObject.class), 1, 1); + ImmunizationLibrary.init(context, Mockito.mock(Repository.class), Mockito.mock(CommonFtsObject.class), 1, "1.0.0", 1); RecurringServiceRecordRepository recurringServiceRecordRepository = Mockito.mock(RecurringServiceRecordRepository.class); RecurringServiceTypeRepository recurringServiceTypeRepository = Mockito.mock(RecurringServiceTypeRepository.class); @@ -86,6 +86,6 @@ public void onHandleIntentShouldGenerateValidJsonFieldsForEventCreation() { recurringIntentService.onHandleIntent(null); HashMap>> methodCalls = ShadowJsonFormUtils.getMethodCalls(); - Assert.assertEquals(2, methodCalls.get("createServiceEvent(Context, ServiceRecord, String, String, JSONArray)").size()); + Assert.assertEquals(2, methodCalls.get("createServiceEvent(ServiceRecord, String, String, JSONArray, Context)").size()); } } diff --git a/opensrp-immunization/src/test/java/org/smartregister/immunization/service/intent/VaccineIntentServiceRoboTest.java b/opensrp-immunization/src/test/java/org/smartregister/immunization/service/intent/VaccineIntentServiceRoboTest.java index c4c3ed83..67b0511a 100644 --- a/opensrp-immunization/src/test/java/org/smartregister/immunization/service/intent/VaccineIntentServiceRoboTest.java +++ b/opensrp-immunization/src/test/java/org/smartregister/immunization/service/intent/VaccineIntentServiceRoboTest.java @@ -45,7 +45,7 @@ public void onHandleIntentShouldGenerateValidJsonFieldsForEventCreation() { org.smartregister.Context context = Mockito.mock(org.smartregister.Context.class); Mockito.doReturn(new AppProperties()).when(context).getAppProperties(); - ImmunizationLibrary.init(context, Mockito.mock(Repository.class), Mockito.mock(CommonFtsObject.class), 1, 1); + ImmunizationLibrary.init(context, Mockito.mock(Repository.class), Mockito.mock(CommonFtsObject.class), 1, "1.0.0", 1); VaccineRepository vaccineRepository = Mockito.mock(VaccineRepository.class); ReflectionHelpers.setField(vaccineIntentService, "vaccineRepository", vaccineRepository); @@ -69,6 +69,6 @@ public void onHandleIntentShouldGenerateValidJsonFieldsForEventCreation() { vaccineIntentService.onHandleIntent(null); HashMap>> methodCalls = ShadowJsonFormUtils.getMethodCalls(); - Assert.assertEquals(2, methodCalls.get("createVaccineEvent(Context, Vaccine, String, String, JSONArray)").size()); + Assert.assertEquals(2, methodCalls.get("createVaccineEvent(Vaccine, String, String, JSONArray, Context)").size()); } } diff --git a/opensrp-immunization/src/test/java/org/smartregister/immunization/util/JsonFormUtilsTest.java b/opensrp-immunization/src/test/java/org/smartregister/immunization/util/JsonFormUtilsTest.java new file mode 100644 index 00000000..9b1f249c --- /dev/null +++ b/opensrp-immunization/src/test/java/org/smartregister/immunization/util/JsonFormUtilsTest.java @@ -0,0 +1,195 @@ +package org.smartregister.immunization.util; + +import org.json.JSONArray; +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.junit.runner.RunWith; +import org.mockito.ArgumentCaptor; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.mockito.junit.MockitoJUnit; +import org.mockito.junit.MockitoRule; +import org.robolectric.RobolectricTestRunner; +import org.smartregister.AllConstants; +import org.smartregister.Context; +import org.smartregister.clientandeventmodel.Event; +import org.smartregister.commonregistry.CommonFtsObject; +import org.smartregister.immunization.ImmunizationLibrary; +import org.smartregister.immunization.db.VaccineRepo; +import org.smartregister.immunization.domain.ServiceRecord; +import org.smartregister.immunization.domain.Vaccine; +import org.smartregister.immunization.service.intent.RecurringIntentService; +import org.smartregister.immunization.service.intent.VaccineIntentService; +import org.smartregister.repository.AllSharedPreferences; +import org.smartregister.repository.EventClientRepository; +import org.smartregister.repository.Repository; +import org.smartregister.util.AppProperties; + +import java.util.Locale; + + +@RunWith(RobolectricTestRunner.class) +public class JsonFormUtilsTest { + + protected static final String TEST_BASE_ENTITY_ID = "test-base-entity-id"; + protected static final String TEST_STRING = "test-string-param"; + + @Rule + public MockitoRule mockitoRule = MockitoJUnit.rule(); + + @Mock + private EventClientRepository eventClientRepository; + + @Mock + private AllSharedPreferences allSharedPreferences; + + @Mock + private Context openSRPContext; + + @Mock + private AppProperties appProperties; + + @Before + public void setUp() { + ImmunizationLibrary.destroy();//Clear any static instance + + Mockito.doReturn(appProperties).when(openSRPContext).getAppProperties(); + ImmunizationLibrary.init(openSRPContext, Mockito.mock(Repository.class), Mockito.mock(CommonFtsObject.class), 4, "4.0.0", 2); + } + + @After + public void tearDown() { + ImmunizationLibrary.destroy(); + } + + @Test + public void testCreateVaccineEventAddsCorrectEventToRepository() throws JSONException { + + Mockito.doReturn(eventClientRepository).when(openSRPContext).getEventClientRepository(); + Mockito.doReturn(allSharedPreferences).when(openSRPContext).allSharedPreferences(); + Mockito.doReturn(AllConstants.DATA_CAPTURE_STRATEGY.NORMAL).when(allSharedPreferences).fetchCurrentDataStrategy(); + + Vaccine vaccine = new Vaccine(); + vaccine.setAnmId("demo"); + vaccine.setName(VaccineRepo.Vaccine.bcg.name().toLowerCase(Locale.ENGLISH)); + vaccine.setBaseEntityId(TEST_BASE_ENTITY_ID); + vaccine.setChildLocationId(TEST_STRING); + vaccine.setTeam(TEST_STRING); + vaccine.setTeamId(TEST_STRING); + vaccine.setLocationId(TEST_STRING); + + JSONArray jsonArray = new JSONArray(); + + String entityId = "1410AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"; + String dateDataType = "date"; + String concept = "concept"; + + JSONObject vaccineJsonObject = new JSONObject(); + vaccineJsonObject.put(JsonFormUtils.KEY, vaccine.getName()); + vaccineJsonObject.put(JsonFormUtils.OPENMRS_ENTITY, concept); + vaccineJsonObject.put(JsonFormUtils.OPENMRS_ENTITY_ID, entityId); + vaccineJsonObject.put(JsonFormUtils.OPENMRS_ENTITY_PARENT, TEST_STRING); + vaccineJsonObject.put(JsonFormUtils.OPENMRS_DATA_TYPE, dateDataType); + vaccineJsonObject.put(JsonFormUtils.VALUE, "2022-07-10"); + jsonArray.put(vaccineJsonObject); + + JsonFormUtils.createVaccineEvent(vaccine, VaccineIntentService.EVENT_TYPE, VaccineIntentService.ENTITY_TYPE, jsonArray, openSRPContext); + + ArgumentCaptor stringArgumentCaptor = ArgumentCaptor.forClass(String.class); + ArgumentCaptor jsonObjectArgumentCaptor = ArgumentCaptor.forClass(JSONObject.class); + + Mockito.verify(eventClientRepository).addEvent(stringArgumentCaptor.capture(), jsonObjectArgumentCaptor.capture()); + + Assert.assertNotNull(stringArgumentCaptor.getValue()); + Assert.assertEquals(TEST_BASE_ENTITY_ID, stringArgumentCaptor.getValue()); + JSONObject jsonObject = jsonObjectArgumentCaptor.getValue(); + Assert.assertNotNull(jsonObject); + + Event event = org.smartregister.util.JsonFormUtils.gson.fromJson(jsonObject.toString(), Event.class); + Assert.assertNotNull(event); + Assert.assertEquals(TEST_BASE_ENTITY_ID, event.getBaseEntityId()); + Assert.assertEquals(TEST_STRING, event.getChildLocationId()); + Assert.assertEquals(TEST_STRING, event.getLocationId()); + Assert.assertEquals(VaccineIntentService.EVENT_TYPE, event.getEventType()); + Assert.assertEquals("demo", event.getProviderId()); + Assert.assertEquals(VaccineIntentService.ENTITY_TYPE, event.getEntityType()); + Assert.assertEquals(4, event.getClientApplicationVersion().intValue()); + Assert.assertEquals("4.0.0", event.getClientApplicationVersionName()); + Assert.assertEquals(2, event.getClientDatabaseVersion().intValue()); + Assert.assertEquals(AllConstants.DATA_STRATEGY, event.getObs().get(0).getFormSubmissionField()); + Assert.assertEquals(AllConstants.DATA_CAPTURE_STRATEGY.NORMAL, event.getObs().get(0).getValue()); + Assert.assertEquals(1, event.getDetails().size()); + Assert.assertTrue(event.getDetails().containsKey(AllConstants.DATA_STRATEGY)); + Assert.assertEquals(AllConstants.DATA_CAPTURE_STRATEGY.NORMAL, event.getDetails().get(AllConstants.DATA_STRATEGY)); + Assert.assertEquals("bcg", event.getObs().get(1).getFormSubmissionField()); + Assert.assertEquals("2022-07-10", event.getObs().get(1).getValue()); + + } + + @Test + public void testCreateServiceEventAddsCorrectEventToRepository() throws JSONException { + Mockito.doReturn(eventClientRepository).when(openSRPContext).getEventClientRepository(); + Mockito.doReturn(allSharedPreferences).when(openSRPContext).allSharedPreferences(); + Mockito.doReturn(AllConstants.DATA_CAPTURE_STRATEGY.ADVANCED).when(allSharedPreferences).fetchCurrentDataStrategy(); + + ServiceRecord service = new ServiceRecord(); + service.setAnmId("demo"); + service.setName("VitaminA"); + service.setBaseEntityId(TEST_BASE_ENTITY_ID); + service.setChildLocationId(TEST_STRING); + service.setTeam(TEST_STRING); + service.setTeamId(TEST_STRING); + service.setLocationId(TEST_STRING); + + JSONArray jsonArray = new JSONArray(); + + String entityId = "1639AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"; + String dateDataType = "date"; + String concept = "concept"; + + JSONObject serviceJsonObject = new JSONObject(); + serviceJsonObject.put(JsonFormUtils.KEY, service.getName()); + serviceJsonObject.put(JsonFormUtils.OPENMRS_ENTITY, concept); + serviceJsonObject.put(JsonFormUtils.OPENMRS_ENTITY_ID, entityId); + serviceJsonObject.put(JsonFormUtils.OPENMRS_ENTITY_PARENT, TEST_STRING); + serviceJsonObject.put(JsonFormUtils.OPENMRS_DATA_TYPE, dateDataType); + serviceJsonObject.put(JsonFormUtils.VALUE, "2022-05-10"); + jsonArray.put(serviceJsonObject); + + JsonFormUtils.createServiceEvent(service, RecurringIntentService.EVENT_TYPE, RecurringIntentService.ENTITY_TYPE, jsonArray, openSRPContext); + + ArgumentCaptor stringArgumentCaptor = ArgumentCaptor.forClass(String.class); + ArgumentCaptor jsonObjectArgumentCaptor = ArgumentCaptor.forClass(JSONObject.class); + + Mockito.verify(eventClientRepository).addEvent(stringArgumentCaptor.capture(), jsonObjectArgumentCaptor.capture()); + + Assert.assertNotNull(stringArgumentCaptor.getValue()); + Assert.assertEquals(TEST_BASE_ENTITY_ID, stringArgumentCaptor.getValue()); + JSONObject jsonObject = jsonObjectArgumentCaptor.getValue(); + Assert.assertNotNull(jsonObject); + + Event event = org.smartregister.util.JsonFormUtils.gson.fromJson(jsonObject.toString(), Event.class); + Assert.assertNotNull(event); + Assert.assertEquals(TEST_BASE_ENTITY_ID, event.getBaseEntityId()); + Assert.assertEquals(TEST_STRING, event.getChildLocationId()); + Assert.assertEquals(TEST_STRING, event.getLocationId()); + Assert.assertEquals(RecurringIntentService.EVENT_TYPE, event.getEventType()); + Assert.assertEquals("demo", event.getProviderId()); + Assert.assertEquals(RecurringIntentService.ENTITY_TYPE, event.getEntityType()); + Assert.assertEquals(4, event.getClientApplicationVersion().intValue()); + Assert.assertEquals("4.0.0", event.getClientApplicationVersionName()); + Assert.assertEquals(2, event.getClientDatabaseVersion().intValue()); + Assert.assertEquals(AllConstants.DATA_STRATEGY, event.getObs().get(0).getFormSubmissionField()); + Assert.assertEquals(AllConstants.DATA_CAPTURE_STRATEGY.ADVANCED, event.getObs().get(0).getValue()); + Assert.assertEquals(1, event.getDetails().size()); + Assert.assertTrue(event.getDetails().containsKey(AllConstants.DATA_STRATEGY)); + Assert.assertEquals(AllConstants.DATA_CAPTURE_STRATEGY.ADVANCED, event.getDetails().get(AllConstants.DATA_STRATEGY)); + Assert.assertEquals("VitaminA", event.getObs().get(1).getFormSubmissionField()); + Assert.assertEquals("2022-05-10", event.getObs().get(1).getValue()); + } +} \ No newline at end of file diff --git a/sample/build.gradle b/sample/build.gradle index a0732ad4..40c05822 100644 --- a/sample/build.gradle +++ b/sample/build.gradle @@ -91,7 +91,7 @@ android { dependencies { - implementation('org.smartregister:opensrp-client-core:6.0.0-ALPHA-SNAPSHOT@aar') { + implementation('org.smartregister:opensrp-client-core:6.0.0-BETA2-SNAPSHOT@aar') { transitive = true exclude group: 'com.github.bmelnychuk', module: 'atv' exclude group: 'com.ibm.fhir', module: 'fhir-model'