From bf3796b238ca2efb2d7ebc0a9b274dbdc3190b6c Mon Sep 17 00:00:00 2001 From: Siva Reddy Date: Fri, 27 Jan 2023 18:09:50 +0530 Subject: [PATCH] BS-68 | Create new REST endpoint for Diagnosis Search (#175) * BS-68 | Siva Reddy | Create New Rest End Point for Diagnosis Search * BS-68 | Siva Reddy | Adding Test Cases for New Rest End Point * BS-68 | Siva Reddy | Updating Global Proerty Name * BS-68 | Siva Reddy | Adding terminology services dependency * BS-68 | Siva Reddy | Updated Rest End Point for Diagnosis Search * BS-68 | Siva Reddy | Publishing SNOMED specific Bahmnicore OMOD * BS-68 | Siva Reddy | Updated Dependencies from terminology services module * Siva Reddy | BS-68 | Updating Rest End Point, TS module dependencies * Siva Reddy | BS-68 | Update Package of FHIR TS module --- bahmnicore-api/pom.xml | 2 +- .../service/BahmniDiagnosisService.java | 9 ++ .../impl/BahmniDiagnosisServiceImpl.java | 28 +++- .../impl/BahmniDiagnosisServiceImplTest.java | 33 ++++- bahmnicore-omod/pom.xml | 14 +- .../BahmniConceptSearchController.java | 136 ++++++++++++++++++ bahmnicore-omod/src/main/resources/config.xml | 11 +- .../BahmniConceptSearchControllerTest.java | 102 +++++++++++++ pom.xml | 15 ++ 9 files changed, 339 insertions(+), 11 deletions(-) create mode 100644 bahmnicore-omod/src/main/java/org/bahmni/module/bahmnicore/web/v1_0/controller/BahmniConceptSearchController.java create mode 100644 bahmnicore-omod/src/test/java/org/bahmni/module/bahmnicore/web/v1_0/controller/BahmniConceptSearchControllerTest.java diff --git a/bahmnicore-api/pom.xml b/bahmnicore-api/pom.xml index 10091dd454..207a192b1c 100644 --- a/bahmnicore-api/pom.xml +++ b/bahmnicore-api/pom.xml @@ -6,7 +6,7 @@ bahmni 1.1.0 - bahmnicore-api + bahmnicore-ts-api jar Bahmni EMR Core API diff --git a/bahmnicore-api/src/main/java/org/bahmni/module/bahmnicore/service/BahmniDiagnosisService.java b/bahmnicore-api/src/main/java/org/bahmni/module/bahmnicore/service/BahmniDiagnosisService.java index fa0b3845fa..3a2497ccfb 100644 --- a/bahmnicore-api/src/main/java/org/bahmni/module/bahmnicore/service/BahmniDiagnosisService.java +++ b/bahmnicore-api/src/main/java/org/bahmni/module/bahmnicore/service/BahmniDiagnosisService.java @@ -1,12 +1,21 @@ package org.bahmni.module.bahmnicore.service; +import org.openmrs.Concept; +import org.openmrs.ConceptSource; import org.openmrs.module.bahmniemrapi.diagnosis.contract.BahmniDiagnosisRequest; import java.text.ParseException; +import java.util.Collection; import java.util.List; public interface BahmniDiagnosisService { void delete(String diagnosisObservationUuid); List getBahmniDiagnosisByPatientAndVisit(String patientUuid,String visitUuid); List getBahmniDiagnosisByPatientAndDate(String patientUuid, String date) throws ParseException; + + boolean isExternalTerminologyServerLookupNeeded(); + + Collection getDiagnosisSets(); + + List getConceptSourcesForDiagnosisSearch(); } diff --git a/bahmnicore-api/src/main/java/org/bahmni/module/bahmnicore/service/impl/BahmniDiagnosisServiceImpl.java b/bahmnicore-api/src/main/java/org/bahmni/module/bahmnicore/service/impl/BahmniDiagnosisServiceImpl.java index 58fb31a996..9cf3c646fd 100644 --- a/bahmnicore-api/src/main/java/org/bahmni/module/bahmnicore/service/impl/BahmniDiagnosisServiceImpl.java +++ b/bahmnicore-api/src/main/java/org/bahmni/module/bahmnicore/service/impl/BahmniDiagnosisServiceImpl.java @@ -1,12 +1,15 @@ package org.bahmni.module.bahmnicore.service.impl; import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.lang.StringUtils; import org.bahmni.module.bahmnicore.service.BahmniDiagnosisService; import org.openmrs.Concept; +import org.openmrs.ConceptSource; import org.openmrs.Obs; import org.openmrs.Patient; import org.openmrs.Person; import org.openmrs.Visit; +import org.openmrs.api.AdministrationService; import org.openmrs.api.ConceptService; import org.openmrs.api.EncounterService; import org.openmrs.api.ObsService; @@ -21,6 +24,7 @@ import org.openmrs.module.emrapi.encounter.DiagnosisMapper; import org.openmrs.module.emrapi.encounter.domain.EncounterTransaction; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Component; import java.text.ParseException; @@ -34,6 +38,10 @@ @Component public class BahmniDiagnosisServiceImpl implements BahmniDiagnosisService { + + private static final String BAHMNI_EXTERNAL_TERMINOLOGY_SERVER_LOOKUP_NEEDED = "bahmni.lookupExternalTerminologyServer"; + private static final boolean DEFAULT_EXTERNAL_TERMINOLOGY_SERVER_LOOKUP_NEEDED = false; + private EncounterService encounterService; private ObsService obsService; private VisitService visitService; @@ -42,9 +50,10 @@ public class BahmniDiagnosisServiceImpl implements BahmniDiagnosisService { private BahmniDiagnosisMetadata bahmniDiagnosisMetadata; private ConceptService conceptService; private EmrApiProperties emrApiProperties; + private AdministrationService administrationService; @Autowired - public BahmniDiagnosisServiceImpl(EncounterService encounterService, ObsService obsService, VisitService visitService, PatientService patientService, DiagnosisMapper diagnosisMapper, BahmniDiagnosisMetadata bahmniDiagnosisMetadata, ConceptService conceptService, EmrApiProperties emrApiProperties) { + public BahmniDiagnosisServiceImpl(EncounterService encounterService, ObsService obsService, VisitService visitService, PatientService patientService, DiagnosisMapper diagnosisMapper, BahmniDiagnosisMetadata bahmniDiagnosisMetadata, ConceptService conceptService, EmrApiProperties emrApiProperties, @Qualifier("adminService") AdministrationService administrationService) { this.encounterService = encounterService; this.obsService = obsService; this.visitService = visitService; @@ -53,6 +62,7 @@ public BahmniDiagnosisServiceImpl(EncounterService encounterService, ObsService this.bahmniDiagnosisMetadata = bahmniDiagnosisMetadata; this.conceptService = conceptService; this.emrApiProperties = emrApiProperties; + this.administrationService = administrationService; } @Override @@ -201,4 +211,20 @@ private void voidObsAndItsChildren(Obs obs) { voidObsAndItsChildren(childObs); } } + + @Override + public boolean isExternalTerminologyServerLookupNeeded() { + String externalTSLookupNeeded = administrationService.getGlobalProperty(BAHMNI_EXTERNAL_TERMINOLOGY_SERVER_LOOKUP_NEEDED); + return StringUtils.isNotBlank(externalTSLookupNeeded) ? Boolean.valueOf(externalTSLookupNeeded) : DEFAULT_EXTERNAL_TERMINOLOGY_SERVER_LOOKUP_NEEDED; + } + + @Override + public Collection getDiagnosisSets() { + return emrApiProperties.getDiagnosisSets(); + } + + @Override + public List getConceptSourcesForDiagnosisSearch() { + return emrApiProperties.getConceptSourcesForDiagnosisSearch(); + } } diff --git a/bahmnicore-api/src/test/java/org/bahmni/module/bahmnicore/service/impl/BahmniDiagnosisServiceImplTest.java b/bahmnicore-api/src/test/java/org/bahmni/module/bahmnicore/service/impl/BahmniDiagnosisServiceImplTest.java index 81bf87a96b..1c050d0e3a 100644 --- a/bahmnicore-api/src/test/java/org/bahmni/module/bahmnicore/service/impl/BahmniDiagnosisServiceImplTest.java +++ b/bahmnicore-api/src/test/java/org/bahmni/module/bahmnicore/service/impl/BahmniDiagnosisServiceImplTest.java @@ -9,7 +9,6 @@ import org.junit.runner.RunWith; import org.mockito.ArgumentCaptor; import org.mockito.InjectMocks; -import org.mockito.Matchers; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.openmrs.Concept; @@ -18,6 +17,7 @@ import org.openmrs.Patient; import org.openmrs.Person; import org.openmrs.Visit; +import org.openmrs.api.AdministrationService; import org.openmrs.api.ConceptService; import org.openmrs.api.EncounterService; import org.openmrs.api.ObsService; @@ -29,9 +29,9 @@ import org.openmrs.module.emrapi.EmrApiProperties; import org.openmrs.module.emrapi.diagnosis.Diagnosis; import org.openmrs.module.emrapi.encounter.DiagnosisMapper; -import org.openmrs.module.emrapi.encounter.domain.EncounterTransaction; import org.openmrs.util.LocaleUtility; import org.powermock.api.mockito.PowerMockito; +import org.powermock.core.classloader.annotations.PowerMockIgnore; import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; @@ -44,17 +44,17 @@ import java.util.Set; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.any; -import static org.mockito.Mockito.anyInt; import static org.mockito.Mockito.anyList; -import static org.mockito.Mockito.anyListOf; import static org.mockito.Mockito.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; +@PowerMockIgnore("javax.management.*") @PrepareForTest(LocaleUtility.class) @RunWith(PowerMockRunner.class) public class BahmniDiagnosisServiceImplTest { @@ -75,8 +75,11 @@ public class BahmniDiagnosisServiceImplTest { @Mock private EmrApiProperties emrApiProperties; + @Mock + private AdministrationService administrationService; + @InjectMocks - private BahmniDiagnosisServiceImpl bahmniDiagnosisService = new BahmniDiagnosisServiceImpl(encounterService, obsService, visitService, patientService, diagnosisMapper, bahmniDiagnosisMetadata, conceptService, emrApiProperties); + private BahmniDiagnosisServiceImpl bahmniDiagnosisService = new BahmniDiagnosisServiceImpl(encounterService, obsService, visitService, patientService, diagnosisMapper, bahmniDiagnosisMetadata, conceptService, emrApiProperties, administrationService); private String initialDiagnosisObsUUID = "initialDiagnosisObsUUID"; private String modifiedDiagnosisObsUUID = "modifiedDiagnosisObsUUID"; @@ -92,6 +95,7 @@ public void setUp() throws Exception { PowerMockito.mockStatic(LocaleUtility.class); PowerMockito.when(LocaleUtility.getLocalesInOrder()).thenReturn(new HashSet<>(Arrays.asList(Locale.getDefault()))); + when(administrationService.getGlobalProperty(eq("bahmni.lookupExternalTerminologyServer"))).thenReturn("false"); } @Test @@ -225,6 +229,25 @@ public void shouldReturnEmptyListIfNoVisitFound() throws Exception { assertEquals(0, bahmniDiagnosisRequests.size()); } + @Test + public void shouldReturnFalseWhenNoExternalTerminologyServerLookupNeeded() { + boolean externalTerminologyServerLookupNeeded = bahmniDiagnosisService.isExternalTerminologyServerLookupNeeded(); + assertFalse(externalTerminologyServerLookupNeeded); + } + + @Test + public void shouldReturnTrueWhenExternalTerminologyServerLookupNeeded() { + when(administrationService.getGlobalProperty(eq("bahmni.lookupExternalTerminologyServer"))).thenReturn("TRUE"); + boolean externalTerminologyServerLookupNeeded = bahmniDiagnosisService.isExternalTerminologyServerLookupNeeded(); + assertTrue(externalTerminologyServerLookupNeeded); + } + + @Test + public void shouldCallDiagosisSetofSetsInEmrApiWhenNoExternalTerminologyServerLookupNeeded() { + bahmniDiagnosisService.getDiagnosisSets(); + verify(emrApiProperties, times(1)).getDiagnosisSets(); + } + private Diagnosis getDiagnosis() { Diagnosis diagnosis = new Diagnosis(); Obs diagnosisObs = new DiagnosisBuilder() diff --git a/bahmnicore-omod/pom.xml b/bahmnicore-omod/pom.xml index 41093c9f8a..40df602137 100644 --- a/bahmnicore-omod/pom.xml +++ b/bahmnicore-omod/pom.xml @@ -6,7 +6,7 @@ bahmni 1.1.0 - bahmnicore-omod + bahmnicore-ts-omod jar Bahmni EMR Core OMOD @@ -61,7 +61,17 @@ org.bahmni.module - bahmnicore-api + fhir-ts-services-api + ${terminologyServices.version} + + + org.openmrs.module + fhir2-api + ${openmrs.fhir2.version} + + + org.bahmni.module + bahmnicore-ts-api ${project.parent.version} diff --git a/bahmnicore-omod/src/main/java/org/bahmni/module/bahmnicore/web/v1_0/controller/BahmniConceptSearchController.java b/bahmnicore-omod/src/main/java/org/bahmni/module/bahmnicore/web/v1_0/controller/BahmniConceptSearchController.java new file mode 100644 index 0000000000..198a8bc01e --- /dev/null +++ b/bahmnicore-omod/src/main/java/org/bahmni/module/bahmnicore/web/v1_0/controller/BahmniConceptSearchController.java @@ -0,0 +1,136 @@ +package org.bahmni.module.bahmnicore.web.v1_0.controller; + +import org.apache.commons.lang3.LocaleUtils; +import org.bahmni.module.bahmnicore.service.BahmniDiagnosisService; +import org.bahmni.module.fhirterminologyservices.api.TerminologyLookupService; +import org.openmrs.Concept; +import org.openmrs.ConceptMap; +import org.openmrs.ConceptName; +import org.openmrs.ConceptReferenceTerm; +import org.openmrs.ConceptSearchResult; +import org.openmrs.ConceptSource; +import org.openmrs.api.context.Context; +import org.openmrs.module.emrapi.concept.EmrConceptService; +import org.openmrs.module.webservices.rest.SimpleObject; +import org.openmrs.module.webservices.rest.web.RestConstants; +import org.openmrs.module.webservices.rest.web.v1_0.controller.BaseRestController; +import org.openmrs.util.LocaleUtility; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashSet; +import java.util.List; +import java.util.Locale; +import java.util.Set; + +import static org.springframework.web.bind.annotation.ValueConstants.DEFAULT_NONE; + +@Controller +@RequestMapping(value = "/rest/" + RestConstants.VERSION_1 + "/bahmni/terminologies") +public class BahmniConceptSearchController extends BaseRestController { + + private BahmniDiagnosisService bahmniDiagnosisService; + + private EmrConceptService emrService; + + private TerminologyLookupService terminologyLookupService; + + @Autowired + public BahmniConceptSearchController(BahmniDiagnosisService bahmniDiagnosisService, EmrConceptService emrService, TerminologyLookupService terminologyLookupService) { + this.bahmniDiagnosisService = bahmniDiagnosisService; + this.emrService = emrService; + this.terminologyLookupService = terminologyLookupService; + } + + @RequestMapping(method = RequestMethod.GET, value = "concepts") + @ResponseBody + public Object search(@RequestParam("term") String query, @RequestParam Integer limit, + @RequestParam(required = false, defaultValue = DEFAULT_NONE) String locale) throws Exception { + boolean externalTerminologyServerLookupNeeded = bahmniDiagnosisService.isExternalTerminologyServerLookupNeeded(); + if(externalTerminologyServerLookupNeeded) { + return terminologyLookupService.getResponseList(query, limit, locale); + } else { + return getDiagnosisConcepts(query, limit, locale); + } + } + + private List getDiagnosisConcepts(String query, Integer limit, String locale) { + Collection diagnosisSets = bahmniDiagnosisService.getDiagnosisSets(); + List conceptSources = bahmniDiagnosisService.getConceptSourcesForDiagnosisSearch(); + Locale searchLocale = getSearchLocale(locale); + List conceptSearchResults = + emrService.conceptSearch(query, LocaleUtility.getDefaultLocale(), null, diagnosisSets, conceptSources, limit); + ConceptSource conceptSource = conceptSources.isEmpty() ? null: conceptSources.get(0); + return createListResponse(conceptSearchResults, conceptSource, searchLocale); + } + + private List createListResponse(List resultList, + ConceptSource conceptSource, Locale searchLocale) { + List allDiagnoses = new ArrayList<>(); + + for (ConceptSearchResult diagnosis : resultList) { + SimpleObject diagnosisObject = new SimpleObject(); + ConceptName conceptName = diagnosis.getConcept().getName(searchLocale); + if (conceptName == null) { + conceptName = diagnosis.getConcept().getName(); + } + diagnosisObject.add("conceptName", conceptName.getName()); + diagnosisObject.add("conceptUuid", diagnosis.getConcept().getUuid()); + if(diagnosis.getConceptName()!=null) { + diagnosisObject.add("matchedName", diagnosis.getConceptName().getName()); + } + ConceptReferenceTerm term = getConceptReferenceTermByConceptSource(diagnosis.getConcept(), conceptSource); + if(term != null) { + diagnosisObject.add("code", term.getCode()); + } + allDiagnoses.add(diagnosisObject); + } + return allDiagnoses; + } + + private ConceptReferenceTerm getConceptReferenceTermByConceptSource(Concept concept, ConceptSource conceptSource) { + Collection conceptMappings = concept.getConceptMappings(); + if(conceptMappings != null && conceptSource != null) { + for (ConceptMap cm : conceptMappings) { + ConceptReferenceTerm term = cm.getConceptReferenceTerm(); + if (conceptSource.equals(term.getConceptSource())) { + return term; + } + } + } + return null; + } + + private Locale getSearchLocale(String localeStr) { + if (localeStr == null) { + return Context.getLocale(); + } + Locale locale; + try { + locale = LocaleUtils.toLocale(localeStr); + } catch (IllegalArgumentException e) { + throw new IllegalArgumentException(localeErrorMessage("emrapi.conceptSearch.invalidLocale", localeStr)); + } + if (allowedLocale(locale)) { + return locale; + } else { + throw new IllegalArgumentException(localeErrorMessage("emrapi.conceptSearch.unsupportedLocale", localeStr)); + } + } + + private boolean allowedLocale(Locale locale) { + Set allowedLocales = new HashSet<>(Context.getAdministrationService().getAllowedLocales()); + return allowedLocales.contains(locale); + } + + private String localeErrorMessage(String msgKey, String localeStr) { + return Context.getMessageSourceService().getMessage(msgKey, new Object[] { localeStr }, Context.getLocale()); + } + +} diff --git a/bahmnicore-omod/src/main/resources/config.xml b/bahmnicore-omod/src/main/resources/config.xml index f8c64188a8..45317e2aa2 100644 --- a/bahmnicore-omod/src/main/resources/config.xml +++ b/bahmnicore-omod/src/main/resources/config.xml @@ -1,7 +1,7 @@ - + - + @MODULE_ID@ @@ -34,6 +34,7 @@ org.openmrs.module.auditlog org.bahmni.module.bahmnicommons org.bahmni.module.communication + org.bahmni.module.fhirterminologyservices @@ -167,6 +168,12 @@ A list of UUIDs indicating extra Patient Identifier Types that should be displayed + + bahmni.lookupExternalTerminologyServer + false + Property used to determine whether external terminology server being used or not + + bahmni.enableEmailPrescriptionOption false diff --git a/bahmnicore-omod/src/test/java/org/bahmni/module/bahmnicore/web/v1_0/controller/BahmniConceptSearchControllerTest.java b/bahmnicore-omod/src/test/java/org/bahmni/module/bahmnicore/web/v1_0/controller/BahmniConceptSearchControllerTest.java new file mode 100644 index 0000000000..44b57b5de2 --- /dev/null +++ b/bahmnicore-omod/src/test/java/org/bahmni/module/bahmnicore/web/v1_0/controller/BahmniConceptSearchControllerTest.java @@ -0,0 +1,102 @@ +package org.bahmni.module.bahmnicore.web.v1_0.controller; + +import org.bahmni.module.bahmnicore.service.BahmniDiagnosisService; +import org.bahmni.module.fhirterminologyservices.api.TerminologyLookupService; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.openmrs.Concept; +import org.openmrs.ConceptName; +import org.openmrs.ConceptSearchResult; +import org.openmrs.api.AdministrationService; +import org.openmrs.api.context.Context; +import org.openmrs.module.emrapi.concept.EmrConceptService; +import org.openmrs.module.webservices.rest.SimpleObject; +import org.openmrs.util.LocaleUtility; +import org.powermock.api.mockito.PowerMockito; +import org.powermock.core.classloader.annotations.PowerMockIgnore; +import org.powermock.core.classloader.annotations.PrepareForTest; +import org.powermock.modules.junit4.PowerMockRunner; + +import java.util.Collections; +import java.util.List; +import java.util.Locale; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.mockito.Mockito.when; +import static org.mockito.MockitoAnnotations.initMocks; + +@PowerMockIgnore("javax.management.*") +@RunWith(PowerMockRunner.class) +@PrepareForTest(Context.class) +public class BahmniConceptSearchControllerTest { + + @Mock + private BahmniDiagnosisService bahmniDiagnosisService; + + @Mock + private EmrConceptService emrService; + + @Mock + private TerminologyLookupService terminologyLookupService; + + @Mock + private AdministrationService administrationService; + + @InjectMocks + private BahmniConceptSearchController bahmniConceptSearchController; + + String searchTerm = "Malaria"; + int searchLimit = 20; + String locale = LocaleUtility.getDefaultLocale().toString(); + List locales = Collections.singletonList(LocaleUtility.getDefaultLocale()); + + @Before + public void setUp() throws Exception { + initMocks(this); + PowerMockito.mockStatic(Context.class); + when(Context.getAdministrationService()).thenReturn(administrationService); + when(administrationService.getAllowedLocales()).thenReturn(locales); + } + + @Test + public void shouldSearchDiagnosisByNameFromDiagnosisSetOfSetsWhenNoExternalTerminologyServerUsed() throws Exception { + Concept malariaConcept = new Concept(); + ConceptName malariaConceptName = new ConceptName(searchTerm, LocaleUtility.getDefaultLocale()); + String malariaConceptUuid = "uuid1"; + malariaConcept.setUuid(malariaConceptUuid); + malariaConcept.setFullySpecifiedName(malariaConceptName); + malariaConcept.setPreferredName(malariaConceptName); + ConceptSearchResult conceptSearchResult = new ConceptSearchResult(searchTerm, malariaConcept, malariaConceptName); + + when(emrService.conceptSearch(searchTerm, LocaleUtility.getDefaultLocale(), null, Collections.EMPTY_LIST, Collections.EMPTY_LIST, searchLimit)).thenReturn(Collections.singletonList(conceptSearchResult)); + + List searchResults = (List< SimpleObject >) bahmniConceptSearchController.search(searchTerm, searchLimit, locale); + + assertNotNull(searchResults); + assertEquals(searchResults.size(), 1); + assertEquals(searchResults.get(0).get("conceptName"), searchTerm); + assertEquals(searchResults.get(0).get("conceptUuid"), malariaConceptUuid); + } + + @Test + public void shouldSearchDiagnosisByNameFromExternalTerminologyServer() throws Exception { + String malariaConceptUuid = "uuid1"; + SimpleObject MalariaObject = new SimpleObject(); + MalariaObject.add("conceptName", searchTerm); + MalariaObject.add("conceptUuid", malariaConceptUuid); + MalariaObject.add("matchedName", searchTerm); + + when(bahmniDiagnosisService.isExternalTerminologyServerLookupNeeded()).thenReturn(true); + when(terminologyLookupService.getResponseList(searchTerm, searchLimit, locale)).thenReturn(Collections.singletonList(MalariaObject)); + + List searchResults = (List< SimpleObject >) bahmniConceptSearchController.search(searchTerm, searchLimit, locale); + assertNotNull(searchResults); + assertEquals(searchResults.size(), 1); + assertEquals(searchResults.get(0).get("conceptName"), searchTerm); + assertEquals(searchResults.get(0).get("conceptUuid"), malariaConceptUuid); + } +} diff --git a/pom.xml b/pom.xml index 60c9313938..d9a1bb94d7 100644 --- a/pom.xml +++ b/pom.xml @@ -70,6 +70,8 @@ 2.13.0 1.6.2 1.0.0 + 1.0.0-SNAPSHOT + 1.8.0 4.13 @@ -279,6 +281,19 @@ ${bahmniCommons.version} provided + + org.bahmni.module + fhir-ts-services-api + jar + ${terminologyServices.version} + provided + + + org.openmrs.module + fhir2-api + ${openmrs.fhir2.version} + provided + org.openmrs.api openmrs-api