mirror of
https://github.com/apache/superset.git
synced 2026-04-19 08:04:53 +00:00
[Bugfix] Druid run_query dimensions part 3 + Unit tests (#3949)
* Fixed and added tests for druid run query * Fixes style and python3
This commit is contained in:
committed by
Maxime Beauchemin
parent
16ab696d7c
commit
8f00e9e30b
@@ -413,116 +413,6 @@ class DruidTests(SupersetTestCase):
|
||||
assert all_metrics == ['aCustomMetric']
|
||||
assert set(post_aggs.keys()) == result_postaggs
|
||||
|
||||
def test_get_filters_ignores_invalid_filter_objects(self):
|
||||
filtr = {'col': 'col1', 'op': '=='}
|
||||
filters = [filtr]
|
||||
self.assertEqual(None, DruidDatasource.get_filters(filters, []))
|
||||
|
||||
def test_get_filters_constructs_filter_in(self):
|
||||
filtr = {'col': 'A', 'op': 'in', 'val': ['a', 'b', 'c']}
|
||||
res = DruidDatasource.get_filters([filtr], [])
|
||||
self.assertIn('filter', res.filter)
|
||||
self.assertIn('fields', res.filter['filter'])
|
||||
self.assertEqual('or', res.filter['filter']['type'])
|
||||
self.assertEqual(3, len(res.filter['filter']['fields']))
|
||||
|
||||
def test_get_filters_constructs_filter_not_in(self):
|
||||
filtr = {'col': 'A', 'op': 'not in', 'val': ['a', 'b', 'c']}
|
||||
res = DruidDatasource.get_filters([filtr], [])
|
||||
self.assertIn('filter', res.filter)
|
||||
self.assertIn('type', res.filter['filter'])
|
||||
self.assertEqual('not', res.filter['filter']['type'])
|
||||
self.assertIn('field', res.filter['filter'])
|
||||
self.assertEqual(
|
||||
3,
|
||||
len(res.filter['filter']['field'].filter['filter']['fields']),
|
||||
)
|
||||
|
||||
def test_get_filters_constructs_filter_equals(self):
|
||||
filtr = {'col': 'A', 'op': '==', 'val': 'h'}
|
||||
res = DruidDatasource.get_filters([filtr], [])
|
||||
self.assertEqual('selector', res.filter['filter']['type'])
|
||||
self.assertEqual('A', res.filter['filter']['dimension'])
|
||||
self.assertEqual('h', res.filter['filter']['value'])
|
||||
|
||||
def test_get_filters_constructs_filter_not_equals(self):
|
||||
filtr = {'col': 'A', 'op': '!=', 'val': 'h'}
|
||||
res = DruidDatasource.get_filters([filtr], [])
|
||||
self.assertEqual('not', res.filter['filter']['type'])
|
||||
self.assertEqual(
|
||||
'h',
|
||||
res.filter['filter']['field'].filter['filter']['value'],
|
||||
)
|
||||
|
||||
def test_get_filters_constructs_bounds_filter(self):
|
||||
filtr = {'col': 'A', 'op': '>=', 'val': 'h'}
|
||||
res = DruidDatasource.get_filters([filtr], [])
|
||||
self.assertFalse(res.filter['filter']['lowerStrict'])
|
||||
self.assertEqual('A', res.filter['filter']['dimension'])
|
||||
self.assertEqual('h', res.filter['filter']['lower'])
|
||||
self.assertFalse(res.filter['filter']['alphaNumeric'])
|
||||
filtr['op'] = '>'
|
||||
res = DruidDatasource.get_filters([filtr], [])
|
||||
self.assertTrue(res.filter['filter']['lowerStrict'])
|
||||
filtr['op'] = '<='
|
||||
res = DruidDatasource.get_filters([filtr], [])
|
||||
self.assertFalse(res.filter['filter']['upperStrict'])
|
||||
self.assertEqual('h', res.filter['filter']['upper'])
|
||||
filtr['op'] = '<'
|
||||
res = DruidDatasource.get_filters([filtr], [])
|
||||
self.assertTrue(res.filter['filter']['upperStrict'])
|
||||
|
||||
def test_get_filters_constructs_regex_filter(self):
|
||||
filtr = {'col': 'A', 'op': 'regex', 'val': '[abc]'}
|
||||
res = DruidDatasource.get_filters([filtr], [])
|
||||
self.assertEqual('regex', res.filter['filter']['type'])
|
||||
self.assertEqual('[abc]', res.filter['filter']['pattern'])
|
||||
self.assertEqual('A', res.filter['filter']['dimension'])
|
||||
|
||||
def test_get_filters_composes_multiple_filters(self):
|
||||
filtr1 = {'col': 'A', 'op': '!=', 'val': 'y'}
|
||||
filtr2 = {'col': 'B', 'op': 'in', 'val': ['a', 'b', 'c']}
|
||||
res = DruidDatasource.get_filters([filtr1, filtr2], [])
|
||||
self.assertEqual('and', res.filter['filter']['type'])
|
||||
self.assertEqual(2, len(res.filter['filter']['fields']))
|
||||
|
||||
def test_get_filters_ignores_in_not_in_with_empty_value(self):
|
||||
filtr1 = {'col': 'A', 'op': 'in', 'val': []}
|
||||
filtr2 = {'col': 'A', 'op': 'not in', 'val': []}
|
||||
res = DruidDatasource.get_filters([filtr1, filtr2], [])
|
||||
self.assertEqual(None, res)
|
||||
|
||||
def test_get_filters_constructs_equals_for_in_not_in_single_value(self):
|
||||
filtr = {'col': 'A', 'op': 'in', 'val': ['a']}
|
||||
res = DruidDatasource.get_filters([filtr], [])
|
||||
self.assertEqual('selector', res.filter['filter']['type'])
|
||||
|
||||
def test_get_filters_handles_arrays_for_string_types(self):
|
||||
filtr = {'col': 'A', 'op': '==', 'val': ['a', 'b']}
|
||||
res = DruidDatasource.get_filters([filtr], [])
|
||||
self.assertEqual('a', res.filter['filter']['value'])
|
||||
filtr = {'col': 'A', 'op': '==', 'val': []}
|
||||
res = DruidDatasource.get_filters([filtr], [])
|
||||
self.assertEqual('', res.filter['filter']['value'])
|
||||
|
||||
def test_get_filters_handles_none_for_string_types(self):
|
||||
filtr = {'col': 'A', 'op': '==', 'val': None}
|
||||
res = DruidDatasource.get_filters([filtr], [])
|
||||
self.assertEqual('', res.filter['filter']['value'])
|
||||
|
||||
def test_get_filters_extracts_values_in_quotes(self):
|
||||
filtr = {'col': 'A', 'op': 'in', 'val': [' "a" ']}
|
||||
res = DruidDatasource.get_filters([filtr], [])
|
||||
self.assertEqual('a', res.filter['filter']['value'])
|
||||
|
||||
def test_get_filters_converts_strings_to_num(self):
|
||||
filtr = {'col': 'A', 'op': 'in', 'val': ['6']}
|
||||
res = DruidDatasource.get_filters([filtr], ['A'])
|
||||
self.assertEqual(6, res.filter['filter']['value'])
|
||||
filtr = {'col': 'A', 'op': '==', 'val': '6'}
|
||||
res = DruidDatasource.get_filters([filtr], ['A'])
|
||||
self.assertEqual(6, res.filter['filter']['value'])
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
||||
|
||||
Reference in New Issue
Block a user