def test_search_by_filters(self): """Test that calling search_by_filters returns an JSON object""" with patch('es_api.utils.queries.XDSConfiguration.objects') as xdsCfg,\ patch('elasticsearch_dsl.Search.execute') as es_execute: configObj = XDSConfiguration(target_xis_metadata_api="dsds") uiConfigObj = XDSUIConfiguration(search_results_per_page=10, xds_configuration=configObj) xdsCfg.xdsuiconfiguration = uiConfigObj xdsCfg.first.return_value = configObj expected_result = {"test": "test"} es_execute.return_value = expected_result query = XSEQueries('test', 'test') result = query.search_by_filters(1, {'Course.CourseTitle': 'test'}) self.assertEqual(result, expected_result)
def get(self, request): results = [] filters = {} page_num = 1 if (request.GET.get('p')) and (request.GET.get('p') != ''): page_num = int(request.GET['p']) if (request.GET.get('Course.CourseTitle') and request.GET.get('Course.CourseTitle') != ''): filters['Course.CourseTitle'] = request.GET['Course.CourseTitle'] if (request.GET.get('Course.CourseProviderName') and request.GET.get('Course.CourseProviderName') != ''): filters['Course.CourseProviderName'] = \ request.GET['Course.CourseProviderName'] if (request.GET.get('CourseInstance.CourseLevel') and request.GET.get('CourseInstance.CourseLevel') != ''): filters['CourseInstance.CourseLevel'] = \ request.GET['CourseInstance.CourseLevel'] errorMsg = { "message": "error executing ElasticSearch query; " + "Please contact an administrator" } errorMsgJSON = json.dumps(errorMsg) try: queries = XSEQueries( XDSConfiguration.objects.first().target_xse_host, XDSConfiguration.objects.first().target_xse_index, user=request.user) response = queries.search_by_filters(page_num=page_num, filters=filters) results = queries.get_results(response) except HTTPError as http_err: logger.error(http_err) return HttpResponseServerError(errorMsgJSON, content_type="application/json") except Exception as err: logger.error(err) return HttpResponseServerError(errorMsgJSON, content_type="application/json") else: logger.info(results) return HttpResponse(results, content_type="application/json")