Files
redash/tests/query_runner/test_drill.py
2023-07-11 19:13:54 +10:00

99 lines
3.4 KiB
Python

import datetime
from unittest import TestCase
from redash.query_runner import (
TYPE_BOOLEAN,
TYPE_DATETIME,
TYPE_FLOAT,
TYPE_INTEGER,
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("Текст", TYPE_STRING), "Текст")
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)