package ca.uhn.fhir.jpa.dao.dstu3; import static org.junit.Assert.assertEquals; import static org.junit.Assert.fail; import javax.persistence.EntityManager; import org.hl7.fhir.dstu3.hapi.validation.IValidationSupport; import org.hl7.fhir.dstu3.model.*; import org.hl7.fhir.instance.model.api.IIdType; import org.junit.AfterClass; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.transaction.PlatformTransactionManager; import org.springframework.transaction.annotation.Transactional; import ca.uhn.fhir.context.FhirContext; import ca.uhn.fhir.jpa.config.TestDstu3WithoutLuceneConfig; import ca.uhn.fhir.jpa.dao.*; import ca.uhn.fhir.jpa.provider.dstu3.JpaSystemProviderDstu3; import ca.uhn.fhir.jpa.search.ISearchCoordinatorSvc; import ca.uhn.fhir.jpa.sp.ISearchParamPresenceSvc; import ca.uhn.fhir.rest.param.StringParam; import ca.uhn.fhir.rest.server.Constants; import ca.uhn.fhir.rest.server.exceptions.InvalidRequestException; import ca.uhn.fhir.util.TestUtil; // @RunWith(SpringJUnit4ClassRunner.class) // @ContextConfiguration(classes= {TestDstu3WithoutLuceneConfig.class}) // @SuppressWarnings("unchecked") @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = { TestDstu3WithoutLuceneConfig.class }) public class FhirResourceDaoDstu3SearchWithLuceneDisabledTest extends BaseJpaTest { private static final org.slf4j.Logger ourLog = org.slf4j.LoggerFactory.getLogger(FhirResourceDaoDstu3SearchWithLuceneDisabledTest.class); @Autowired @Qualifier("myAllergyIntoleranceDaoDstu3") private IFhirResourceDao<AllergyIntolerance> myAllergyIntoleranceDao; @Autowired @Qualifier("myAppointmentDaoDstu3") private IFhirResourceDao<Appointment> myAppointmentDao; @Autowired @Qualifier("myAuditEventDaoDstu3") private IFhirResourceDao<AuditEvent> myAuditEventDao; @Autowired @Qualifier("myBundleDaoDstu3") private IFhirResourceDao<Bundle> myBundleDao; @Autowired @Qualifier("myCarePlanDaoDstu3") private IFhirResourceDao<CarePlan> myCarePlanDao; @Autowired @Qualifier("myCodeSystemDaoDstu3") private IFhirResourceDao<CodeSystem> myCodeSystemDao; @Autowired @Qualifier("myCompartmentDefinitionDaoDstu3") private IFhirResourceDao<CompartmentDefinition> myCompartmentDefinitionDao; @Autowired @Qualifier("myConceptMapDaoDstu3") private IFhirResourceDao<ConceptMap> myConceptMapDao; @Autowired @Qualifier("myConditionDaoDstu3") private IFhirResourceDao<Condition> myConditionDao; @Autowired protected DaoConfig myDaoConfig; @Autowired @Qualifier("myDeviceDaoDstu3") private IFhirResourceDao<Device> myDeviceDao; @Autowired @Qualifier("myDiagnosticReportDaoDstu3") private IFhirResourceDao<DiagnosticReport> myDiagnosticReportDao; @Autowired @Qualifier("myEncounterDaoDstu3") private IFhirResourceDao<Encounter> myEncounterDao; // @PersistenceContext() @Autowired private EntityManager myEntityManager; @Autowired private FhirContext myFhirCtx; @Autowired @Qualifier("myImmunizationDaoDstu3") private IFhirResourceDao<Immunization> myImmunizationDao; @Autowired @Qualifier("myLocationDaoDstu3") private IFhirResourceDao<Location> myLocationDao; @Autowired @Qualifier("myMediaDaoDstu3") private IFhirResourceDao<Media> myMediaDao; @Autowired @Qualifier("myMedicationDaoDstu3") private IFhirResourceDao<Medication> myMedicationDao; @Autowired @Qualifier("myMedicationRequestDaoDstu3") private IFhirResourceDao<MedicationRequest> myMedicationRequestDao; @Autowired @Qualifier("myNamingSystemDaoDstu3") private IFhirResourceDao<NamingSystem> myNamingSystemDao; @Autowired @Qualifier("myObservationDaoDstu3") private IFhirResourceDao<Observation> myObservationDao; @Autowired @Qualifier("myOperationDefinitionDaoDstu3") private IFhirResourceDao<OperationDefinition> myOperationDefinitionDao; @Autowired @Qualifier("myOrganizationDaoDstu3") private IFhirResourceDao<Organization> myOrganizationDao; @Autowired @Qualifier("myPatientDaoDstu3") private IFhirResourceDaoPatient<Patient> myPatientDao; @Autowired @Qualifier("myPractitionerDaoDstu3") private IFhirResourceDao<Practitioner> myPractitionerDao; @Autowired @Qualifier("myQuestionnaireDaoDstu3") private IFhirResourceDao<Questionnaire> myQuestionnaireDao; @Autowired @Qualifier("myQuestionnaireResponseDaoDstu3") private IFhirResourceDao<QuestionnaireResponse> myQuestionnaireResponseDao; @Autowired @Qualifier("myResourceProvidersDstu3") private Object myResourceProviders; @Autowired @Qualifier("myStructureDefinitionDaoDstu3") private IFhirResourceDao<StructureDefinition> myStructureDefinitionDao; @Autowired @Qualifier("mySubscriptionDaoDstu3") private IFhirResourceDaoSubscription<Subscription> mySubscriptionDao; @Autowired @Qualifier("mySubstanceDaoDstu3") private IFhirResourceDao<Substance> mySubstanceDao; @Autowired @Qualifier("mySystemDaoDstu3") private IFhirSystemDao<Bundle, Meta> mySystemDao; @Autowired @Qualifier("mySystemProviderDstu3") private JpaSystemProviderDstu3 mySystemProvider; @Autowired protected PlatformTransactionManager myTxManager; @Autowired protected ISearchParamPresenceSvc mySearchParamPresenceSvc; @Autowired @Qualifier("myJpaValidationSupportChainDstu3") private IValidationSupport myValidationSupport; @Autowired protected ISearchCoordinatorSvc mySearchCoordinatorSvc; @Before @Transactional() public void beforePurgeDatabase() { final EntityManager entityManager = this.myEntityManager; purgeDatabase(entityManager, myTxManager, mySearchParamPresenceSvc, mySearchCoordinatorSvc); } @Before public void beforeResetConfig() { myDaoConfig.setHardSearchLimit(1000); myDaoConfig.setHardTagListLimit(1000); myDaoConfig.setIncludeLimit(2000); } @Override protected FhirContext getContext() { return myFhirCtx; } @Test public void testSearchWithRegularParam() throws Exception { String methodName = "testEverythingIncludesBackReferences"; Organization org = new Organization(); org.setName(methodName); IIdType orgId = myOrganizationDao.create(org, mySrd).getId().toUnqualifiedVersionless(); SearchParameterMap map = new SearchParameterMap(); map.add(Organization.SP_NAME, new StringParam(methodName)); myOrganizationDao.search(map); } @Test public void testSearchWithContent() throws Exception { String methodName = "testEverythingIncludesBackReferences"; Organization org = new Organization(); org.setName(methodName); IIdType orgId = myOrganizationDao.create(org, mySrd).getId().toUnqualifiedVersionless(); SearchParameterMap map = new SearchParameterMap(); map.add(Constants.PARAM_CONTENT, new StringParam(methodName)); try { myOrganizationDao.search(map).size(); fail(); } catch (InvalidRequestException e) { assertEquals("Fulltext search is not enabled on this service, can not process parameter: _content", e.getMessage()); } } @Test public void testSearchWithText() throws Exception { String methodName = "testEverythingIncludesBackReferences"; Organization org = new Organization(); org.setName(methodName); IIdType orgId = myOrganizationDao.create(org, mySrd).getId().toUnqualifiedVersionless(); SearchParameterMap map = new SearchParameterMap(); map.add(Constants.PARAM_TEXT, new StringParam(methodName)); try { myOrganizationDao.search(map).size(); fail(); } catch (InvalidRequestException e) { assertEquals("Fulltext search is not enabled on this service, can not process parameter: _text", e.getMessage()); } } @AfterClass public static void afterClassClearContext() { TestUtil.clearAllStaticFieldsForUnitTest(); } }