forked from getredash/redash
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtest_drill.py
More file actions
91 lines (72 loc) · 3.41 KB
/
test_drill.py
File metadata and controls
91 lines (72 loc) · 3.41 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
# -*- coding: utf-8 -*-
import datetime
from unittest import TestCase
from redash.query_runner import TYPE_DATETIME, TYPE_FLOAT, TYPE_INTEGER, TYPE_BOOLEAN, TYPE_STRING
from redash.query_runner.drill import convert_type, parse_response
class TestConvertType(TestCase):
def test_converts_booleans(self):
self.assertEqual(convert_type('true', TYPE_BOOLEAN), True)
self.assertEqual(convert_type('True', TYPE_BOOLEAN), True)
self.assertEqual(convert_type('TRUE', TYPE_BOOLEAN), True)
self.assertEqual(convert_type('false', TYPE_BOOLEAN), False)
self.assertEqual(convert_type('False', TYPE_BOOLEAN), False)
self.assertEqual(convert_type('FALSE', TYPE_BOOLEAN), False)
def test_converts_strings(self):
self.assertEqual(convert_type(u'Текст', TYPE_STRING), u'Текст')
self.assertEqual(convert_type(None, TYPE_STRING), '')
self.assertEqual(convert_type('', TYPE_STRING), '')
self.assertEqual(convert_type('redash', TYPE_STRING), 'redash')
def test_converts_integer(self):
self.assertEqual(convert_type('42', TYPE_INTEGER), 42)
def test_converts_float(self):
self.assertAlmostEqual(convert_type('3.14', TYPE_FLOAT), 3.14, 2)
def test_converts_date(self):
self.assertEqual(convert_type('2018-10-31', TYPE_DATETIME), datetime.datetime(2018, 10, 31, 0, 0))
empty_response = {
'columns': [],
'rows': [{}]
}
regular_response = {
'columns': ['key', 'date', 'count', 'avg'],
'rows': [
{'key': 'Alpha', 'date': '2018-01-01', 'count': '10', 'avg': '3.14'},
{'key': 'Beta', 'date': '2018-02-01', 'count': '20', 'avg': '6.28'}
]
}
class TestParseResponse(TestCase):
def test_parse_empty_reponse(self):
parsed = parse_response(empty_response)
self.assertIsInstance(parsed, dict)
self.assertIsNotNone(parsed['columns'])
self.assertIsNotNone(parsed['rows'])
self.assertEqual(len(parsed['columns']), 0)
self.assertEqual(len(parsed['rows']), 0)
def test_parse_regular_response(self):
parsed = parse_response(regular_response)
self.assertIsInstance(parsed, dict)
self.assertIsNotNone(parsed['columns'])
self.assertIsNotNone(parsed['rows'])
self.assertEqual(len(parsed['columns']), 4)
self.assertEqual(len(parsed['rows']), 2)
key_col = parsed['columns'][0]
self.assertEqual(key_col['name'], 'key')
self.assertEqual(key_col['type'], TYPE_STRING)
date_col = parsed['columns'][1]
self.assertEqual(date_col['name'], 'date')
self.assertEqual(date_col['type'], TYPE_DATETIME)
count_col = parsed['columns'][2]
self.assertEqual(count_col['name'], 'count')
self.assertEqual(count_col['type'], TYPE_INTEGER)
avg_col = parsed['columns'][3]
self.assertEqual(avg_col['name'], 'avg')
self.assertEqual(avg_col['type'], TYPE_FLOAT)
row_0 = parsed['rows'][0]
self.assertEqual(row_0['key'], 'Alpha')
self.assertEqual(row_0['date'], datetime.datetime(2018, 1, 1, 0, 0))
self.assertEqual(row_0['count'], 10)
self.assertAlmostEqual(row_0['avg'], 3.14, 2)
row_1 = parsed['rows'][1]
self.assertEqual(row_1['key'], 'Beta')
self.assertEqual(row_1['date'], datetime.datetime(2018, 2, 1, 0, 0))
self.assertEqual(row_1['count'], 20)
self.assertAlmostEqual(row_1['avg'], 6.28, 2)