Exemple #1
0
class ElasticSearchQueryTranslationTests(TestCase):
    def setUp(self):
        self.translator = ElasticSearchQueryTranslator()
        self.org_uuid = ['orgid007']

    def test_queryTranslation_sizeInQuery_sizeAddedToOutput(self):
        SIZE = 123
        size_query = json.dumps({'size': SIZE})

        translated_query = self.translator.translate(size_query, self.org_uuid,
                                                     None, False)

        self.assertEqual(SIZE, json.loads(translated_query)['size'])

    def test_queryTranslation_fromInQuery_fromAddedToOutput(self):
        FROM = 345
        from_query = json.dumps({'from': FROM})

        translated_query = self.translator.translate(from_query, self.org_uuid,
                                                     True, False)

        self.assertEqual(FROM, json.loads(translated_query)['from'])

    def test_combiningQueryAndFilter_queryWithFilter_filteredQueryCreated(
            self):
        FAKE_BASE_QUERY = {'yup': 'totally fake'}
        FAKE_FILTER = {'uhuh': 'this filter is also fake'}
        FAKE_POST_FILTER = {'hello': 'fake filter'}
        expected_query = {
            'query': {
                'filtered': {
                    'filter': FAKE_FILTER,
                    'query': FAKE_BASE_QUERY
                }
            },
            'post_filter': FAKE_POST_FILTER,
            'aggregations': {
                'categories': {
                    'terms': {
                        'size': 100,
                        'field': 'category'
                    }
                },
                'formats': {
                    'terms': {
                        'field': 'format'
                    }
                }
            }
        }

        output_query = self.translator._combine_query_and_filters(
            FAKE_BASE_QUERY, FAKE_FILTER, FAKE_POST_FILTER)

        self.assertDictEqual(expected_query, output_query)

    def test_queryTranslation_queryIsNotJson_invalidQueryError(self):
        with self.assertRaises(InvalidQueryError):
            self.translator.translate('{"this is not a proper JSON"}',
                                      self.org_uuid, None, False)

    def test_decodingInputQuery_noneQuery_emptyDictReturned(self):
        self.assertDictEqual({}, self.translator._get_query_dict(None))

    def test_queryTranslation_fullFeaturedQuery_queryTranslated(self):
        input_query = {
            'query': 'blabla',
            'filters': [{
                'format': ['csv']
            }],
            'size': 3,
            'from': 14
        }

        output_query_string = self.translator.translate(
            json.dumps(input_query), self.org_uuid, True, False)
        output_query = json.loads(output_query_string)

        self.assertIn('filtered', output_query['query'])
        self.assertIn('size', output_query)
        self.assertIn('from', output_query)