mirror of
https://github.com/getredash/redash.git
synced 2025-12-19 17:37:19 -05:00
195 lines
8.5 KiB
Python
195 lines
8.5 KiB
Python
import datetime
|
|
from unittest import TestCase
|
|
|
|
from redash.query_runner.google_analytics4 import (
|
|
format_column_value,
|
|
get_formatted_column_json,
|
|
parse_ga_response,
|
|
)
|
|
|
|
|
|
class TestFormatColumnValue(TestCase):
|
|
def setUp(self):
|
|
self.columns = [
|
|
{
|
|
"name": "date",
|
|
"friendly_name": "date",
|
|
"type": "date",
|
|
},
|
|
{
|
|
"name": "dateHour",
|
|
"friendly_name": "dateHour",
|
|
"type": "datetime",
|
|
},
|
|
{
|
|
"name": "dateHourMinute",
|
|
"friendly_name": "dateHourMinute",
|
|
"type": "datetime",
|
|
},
|
|
{
|
|
"name": "city",
|
|
"friendly_name": "city",
|
|
"type": "string",
|
|
},
|
|
]
|
|
|
|
def test_string_value(self):
|
|
column_name = "city"
|
|
column_value = "Delhi"
|
|
|
|
value = format_column_value(column_name, column_value, self.columns)
|
|
|
|
self.assertEqual(value, column_value)
|
|
|
|
def test_for_date(self):
|
|
column_name = "date"
|
|
column_value = "20230711"
|
|
|
|
value = format_column_value(column_name, column_value, self.columns)
|
|
|
|
self.assertEqual(value, datetime.datetime.strptime(column_value, "%Y%m%d"))
|
|
|
|
def test_for_date_hour(self):
|
|
column_name = "dateHour"
|
|
column_value = "2023071210"
|
|
|
|
value = format_column_value(column_name, column_value, self.columns)
|
|
|
|
self.assertEqual(value, datetime.datetime.strptime(column_value, "%Y%m%d%H"))
|
|
|
|
def test_for_date_hour_minute(self):
|
|
column_name = "dateHour"
|
|
column_value = "202307121030"
|
|
|
|
value = format_column_value(column_name, column_value, self.columns)
|
|
|
|
self.assertEqual(value, datetime.datetime.strptime(column_value, "%Y%m%d%H%M"))
|
|
|
|
def test_when_exception_raise(self):
|
|
column_name = "dateHour"
|
|
column_value = "20230712103025"
|
|
|
|
with self.assertRaisesRegex(Exception, "Unknown date/time format in results: '20230712103025'"):
|
|
format_column_value(column_name, column_value, self.columns)
|
|
|
|
|
|
class TestGetFormattedColumnJson(TestCase):
|
|
def test_date_column(self):
|
|
column_name = "date"
|
|
expected_response = {
|
|
"name": column_name,
|
|
"friendly_name": column_name,
|
|
"type": "date",
|
|
}
|
|
|
|
self.assertEqual(get_formatted_column_json(column_name), expected_response)
|
|
|
|
def test_date_hour_column(self):
|
|
column_name = "dateHour"
|
|
expected_response = {
|
|
"name": column_name,
|
|
"friendly_name": column_name,
|
|
"type": "datetime",
|
|
}
|
|
|
|
self.assertEqual(get_formatted_column_json(column_name), expected_response)
|
|
|
|
def test_other_string(self):
|
|
column_name = "city"
|
|
expected_response = {
|
|
"name": column_name,
|
|
"friendly_name": column_name,
|
|
"type": "string",
|
|
}
|
|
|
|
self.assertEqual(get_formatted_column_json(column_name), expected_response)
|
|
|
|
|
|
class TestParseGaResponse(TestCase):
|
|
def test_parse_ga_response(self):
|
|
response = {
|
|
"dimensionHeaders": [{"name": "date"}],
|
|
"metricHeaders": [{"name": "activeUsers", "type": "TYPE_INTEGER"}],
|
|
"rows": [{"dimensionValues": [{"value": "20230713"}], "metricValues": [{"value": "50"}]}],
|
|
"rowCount": 1,
|
|
"metadata": {"currencyCode": "USD", "timeZone": "Asia/Calcutta"},
|
|
"kind": "analyticsData#runReport",
|
|
}
|
|
|
|
expected_value = {
|
|
"columns": [
|
|
{"name": "date", "friendly_name": "date", "type": "date"},
|
|
{"name": "activeUsers", "friendly_name": "activeUsers", "type": "string"},
|
|
],
|
|
"rows": [{"date": datetime.datetime(2023, 7, 13, 0, 0), "activeUsers": "50"}],
|
|
}
|
|
|
|
value = parse_ga_response(response)
|
|
|
|
self.assertEqual(value, expected_value)
|
|
|
|
def test_parse_ga_response_with_date_hour(self):
|
|
response = {
|
|
"dimensionHeaders": [{"name": "dateHour"}],
|
|
"metricHeaders": [{"name": "activeUsers", "type": "TYPE_INTEGER"}],
|
|
"rows": [
|
|
{"dimensionValues": [{"value": "2023071312"}], "metricValues": [{"value": "7"}]},
|
|
{"dimensionValues": [{"value": "2023071318"}], "metricValues": [{"value": "7"}]},
|
|
{"dimensionValues": [{"value": "2023071317"}], "metricValues": [{"value": "5"}]},
|
|
{"dimensionValues": [{"value": "2023071319"}], "metricValues": [{"value": "5"}]},
|
|
{"dimensionValues": [{"value": "2023071320"}], "metricValues": [{"value": "5"}]},
|
|
{"dimensionValues": [{"value": "2023071314"}], "metricValues": [{"value": "4"}]},
|
|
{"dimensionValues": [{"value": "2023071315"}], "metricValues": [{"value": "4"}]},
|
|
{"dimensionValues": [{"value": "2023071302"}], "metricValues": [{"value": "3"}]},
|
|
{"dimensionValues": [{"value": "2023071305"}], "metricValues": [{"value": "3"}]},
|
|
{"dimensionValues": [{"value": "2023071313"}], "metricValues": [{"value": "3"}]},
|
|
{"dimensionValues": [{"value": "2023071306"}], "metricValues": [{"value": "2"}]},
|
|
{"dimensionValues": [{"value": "2023071310"}], "metricValues": [{"value": "2"}]},
|
|
{"dimensionValues": [{"value": "2023071321"}], "metricValues": [{"value": "2"}]},
|
|
{"dimensionValues": [{"value": "2023071300"}], "metricValues": [{"value": "1"}]},
|
|
{"dimensionValues": [{"value": "2023071304"}], "metricValues": [{"value": "1"}]},
|
|
{"dimensionValues": [{"value": "2023071307"}], "metricValues": [{"value": "1"}]},
|
|
{"dimensionValues": [{"value": "2023071308"}], "metricValues": [{"value": "1"}]},
|
|
{"dimensionValues": [{"value": "2023071309"}], "metricValues": [{"value": "1"}]},
|
|
{"dimensionValues": [{"value": "2023071311"}], "metricValues": [{"value": "1"}]},
|
|
{"dimensionValues": [{"value": "2023071316"}], "metricValues": [{"value": "1"}]},
|
|
{"dimensionValues": [{"value": "2023071323"}], "metricValues": [{"value": "1"}]},
|
|
],
|
|
"rowCount": 21,
|
|
"metadata": {"currencyCode": "USD", "timeZone": "Asia/Calcutta"},
|
|
"kind": "analyticsData#runReport",
|
|
}
|
|
|
|
expected_value = {
|
|
"columns": [
|
|
{"name": "dateHour", "friendly_name": "dateHour", "type": "datetime"},
|
|
{"name": "activeUsers", "friendly_name": "activeUsers", "type": "string"},
|
|
],
|
|
"rows": [
|
|
{"dateHour": datetime.datetime(2023, 7, 13, 12, 0), "activeUsers": "7"},
|
|
{"dateHour": datetime.datetime(2023, 7, 13, 18, 0), "activeUsers": "7"},
|
|
{"dateHour": datetime.datetime(2023, 7, 13, 17, 0), "activeUsers": "5"},
|
|
{"dateHour": datetime.datetime(2023, 7, 13, 19, 0), "activeUsers": "5"},
|
|
{"dateHour": datetime.datetime(2023, 7, 13, 20, 0), "activeUsers": "5"},
|
|
{"dateHour": datetime.datetime(2023, 7, 13, 14, 0), "activeUsers": "4"},
|
|
{"dateHour": datetime.datetime(2023, 7, 13, 15, 0), "activeUsers": "4"},
|
|
{"dateHour": datetime.datetime(2023, 7, 13, 2, 0), "activeUsers": "3"},
|
|
{"dateHour": datetime.datetime(2023, 7, 13, 5, 0), "activeUsers": "3"},
|
|
{"dateHour": datetime.datetime(2023, 7, 13, 13, 0), "activeUsers": "3"},
|
|
{"dateHour": datetime.datetime(2023, 7, 13, 6, 0), "activeUsers": "2"},
|
|
{"dateHour": datetime.datetime(2023, 7, 13, 10, 0), "activeUsers": "2"},
|
|
{"dateHour": datetime.datetime(2023, 7, 13, 21, 0), "activeUsers": "2"},
|
|
{"dateHour": datetime.datetime(2023, 7, 13, 0, 0), "activeUsers": "1"},
|
|
{"dateHour": datetime.datetime(2023, 7, 13, 4, 0), "activeUsers": "1"},
|
|
{"dateHour": datetime.datetime(2023, 7, 13, 7, 0), "activeUsers": "1"},
|
|
{"dateHour": datetime.datetime(2023, 7, 13, 8, 0), "activeUsers": "1"},
|
|
{"dateHour": datetime.datetime(2023, 7, 13, 9, 0), "activeUsers": "1"},
|
|
{"dateHour": datetime.datetime(2023, 7, 13, 11, 0), "activeUsers": "1"},
|
|
{"dateHour": datetime.datetime(2023, 7, 13, 16, 0), "activeUsers": "1"},
|
|
{"dateHour": datetime.datetime(2023, 7, 13, 23, 0), "activeUsers": "1"},
|
|
],
|
|
}
|
|
value = parse_ga_response(response)
|
|
|
|
self.assertEqual(value, expected_value)
|