def test_process_metrics(self): # test TableViz metrics in correct order form_data = { "url_params": {}, "row_limit": 500, "metric": "sum__SP_POP_TOTL", "entity": "country_code", "secondary_metric": "sum__SP_POP_TOTL", "granularity_sqla": "year", "page_length": 0, "all_columns": [], "viz_type": "table", "since": "2014-01-01", "until": "2014-01-02", "metrics": ["sum__SP_POP_TOTL", "SUM(SE_PRM_NENR_MA)", "SUM(SP_URB_TOTL)"], "country_fieldtype": "cca3", "percent_metrics": ["count"], "slice_id": 74, "time_grain_sqla": None, "order_by_cols": [], "groupby": ["country_name"], "compare_lag": "10", "limit": "25", "datasource": "2__table", "table_timestamp_format": "%Y-%m-%d %H:%M:%S", "markup_type": "markdown", "where": "", "compare_suffix": "o10Y", } datasource = Mock() datasource.type = "table" test_viz = viz.BaseViz(datasource, form_data) expect_metric_labels = [ u"sum__SP_POP_TOTL", u"SUM(SE_PRM_NENR_MA)", u"SUM(SP_URB_TOTL)", u"count", ] self.assertEqual(test_viz.metric_labels, expect_metric_labels) self.assertEqual(test_viz.all_metrics, expect_metric_labels)
def test_get_df_returns_empty_df(self): form_data = {'dummy': 123} query_obj = {'granularity': 'day'} datasource = self.get_datasource_mock() test_viz = viz.BaseViz(datasource, form_data) result = test_viz.get_df(query_obj) self.assertEqual(type(result), pd.DataFrame) self.assertTrue(result.empty)
def test_cache_timeout(self): datasource = Mock() datasource.cache_timeout = 0 test_viz = viz.BaseViz(datasource, form_data={}) self.assertEqual(0, test_viz.cache_timeout) datasource.cache_timeout = 156 test_viz = viz.BaseViz(datasource, form_data={}) self.assertEqual(156, test_viz.cache_timeout) datasource.cache_timeout = None datasource.database = Mock() datasource.database.cache_timeout = 0 self.assertEqual(0, test_viz.cache_timeout) datasource.database.cache_timeout = 1666 self.assertEqual(1666, test_viz.cache_timeout) datasource.database.cache_timeout = None test_viz = viz.BaseViz(datasource, form_data={}) self.assertEqual(app.config['CACHE_DEFAULT_TIMEOUT'], test_viz.cache_timeout)
def test_cache_timeout(self): datasource = Mock() datasource.cache_timeout = 156 test_viz = viz.BaseViz(datasource, form_data={}) self.assertEqual(156, test_viz.cache_timeout) datasource.cache_timeout = None datasource.database = Mock() datasource.database.cache_timeout = 1666 self.assertEqual(1666, test_viz.cache_timeout)
def test_get_fillna_returns_default_on_null_columns(self): form_data = { 'viz_type': 'table', 'token': '12345', } datasource = {'type': 'table'} test_viz = viz.BaseViz(datasource, form_data) self.assertEqual(test_viz.default_fillna, test_viz.get_fillna_for_columns())
def test_get_df_handles_dttm_col(self): form_data = {'dummy': 123} query_obj = {'granularity': 'day'} results = Mock() results.query = Mock() results.status = Mock() results.error_message = Mock() datasource = Mock() datasource.type = 'table' datasource.query = Mock(return_value=results) mock_dttm_col = Mock() datasource.get_col = Mock(return_value=mock_dttm_col) test_viz = viz.BaseViz(datasource, form_data) test_viz.df_metrics_to_num = Mock() test_viz.get_fillna_for_columns = Mock(return_value=0) results.df = pd.DataFrame(data={DTTM_ALIAS: ['1960-01-01 05:00:00']}) datasource.offset = 0 mock_dttm_col = Mock() datasource.get_col = Mock(return_value=mock_dttm_col) mock_dttm_col.python_date_format = 'epoch_ms' result = test_viz.get_df(query_obj) print(result) import logging logging.info(result) pd.testing.assert_series_equal( result[DTTM_ALIAS], pd.Series([datetime(1960, 1, 1, 5, 0)], name=DTTM_ALIAS), ) mock_dttm_col.python_date_format = None result = test_viz.get_df(query_obj) pd.testing.assert_series_equal( result[DTTM_ALIAS], pd.Series([datetime(1960, 1, 1, 5, 0)], name=DTTM_ALIAS), ) datasource.offset = 1 result = test_viz.get_df(query_obj) pd.testing.assert_series_equal( result[DTTM_ALIAS], pd.Series([datetime(1960, 1, 1, 6, 0)], name=DTTM_ALIAS), ) datasource.offset = 0 results.df = pd.DataFrame(data={DTTM_ALIAS: ['1960-01-01']}) mock_dttm_col.python_date_format = '%Y-%m-%d' result = test_viz.get_df(query_obj) pd.testing.assert_series_equal( result[DTTM_ALIAS], pd.Series([datetime(1960, 1, 1, 0, 0)], name=DTTM_ALIAS), )
def test_cache_timeout(self): datasource = Mock() form_data = {'cache_timeout': '10'} test_viz = viz.BaseViz(datasource, form_data) self.assertEqual(10, test_viz.cache_timeout) del form_data['cache_timeout'] datasource.cache_timeout = 156 self.assertEqual(156, test_viz.cache_timeout) datasource.cache_timeout = None datasource.database = Mock() datasource.database.cache_timeout = 1666 self.assertEqual(1666, test_viz.cache_timeout)
def test_get_df_handles_dttm_col(self): datasource = Mock() datasource.type = 'table' datasource.offset = 1 mock_dttm_col = Mock() mock_dttm_col.python_date_format = 'epoch_ms' datasource.get_col = Mock(return_value=mock_dttm_col) form_data = {'dummy': 123} query_obj = {'granularity': 'day'} results = Mock() results.query = Mock() results.status = Mock() results.error_message = Mock() df = Mock() df.columns = [DTTM_ALIAS] f_datetime = datetime(1960, 1, 1, 5, 0) df.__getitem__ = Mock(return_value=pd.Series([f_datetime])) df.__setitem__ = Mock() df.replace = Mock() df.fillna = Mock() results.df = df results.df.empty = False datasource.query = Mock(return_value=results) test_viz = viz.BaseViz(datasource, form_data) test_viz.df_metrics_to_num = Mock() test_viz.get_fillna_for_columns = Mock(return_value=0) test_viz.get_df(query_obj) mock_call = df.__setitem__.mock_calls[0] self.assertEqual(mock_call[1][0], DTTM_ALIAS) self.assertFalse(mock_call[1][1].empty) self.assertEqual(mock_call[1][1][0], f_datetime) mock_call = df.__setitem__.mock_calls[1] self.assertEqual(mock_call[1][0], DTTM_ALIAS) self.assertEqual(mock_call[1][1][0].hour, 6) self.assertEqual(mock_call[1][1].dtype, 'datetime64[ns]') mock_dttm_col.python_date_format = 'utc' test_viz.get_df(query_obj) mock_call = df.__setitem__.mock_calls[2] self.assertEqual(mock_call[1][0], DTTM_ALIAS) self.assertFalse(mock_call[1][1].empty) self.assertEqual(mock_call[1][1][0].hour, 7) mock_call = df.__setitem__.mock_calls[3] self.assertEqual(mock_call[1][0], DTTM_ALIAS) self.assertEqual(mock_call[1][1][0].hour, 6) self.assertEqual(mock_call[1][1].dtype, 'datetime64[ns]') mock_call = df.__setitem__.mock_calls[4] self.assertEqual(mock_call[1][0], DTTM_ALIAS) self.assertEqual(mock_call[1][1][0].hour, 7) self.assertEqual(mock_call[1][1].dtype, 'datetime64[ns]')
def test_get_df_returns_empty_df(self): datasource = Mock() datasource.type = 'table' form_data = {'dummy': 123} query_obj = {'granularity': 'day'} results = Mock() results.query = Mock() results.status = Mock() results.error_message = None results.df = pd.DataFrame() datasource.query = Mock(return_value=results) test_viz = viz.BaseViz(datasource, form_data) result = test_viz.get_df(query_obj) self.assertEqual(type(result), pd.DataFrame) self.assertTrue(result.empty)
def test_process_metrics(self): # test TableViz metrics in correct order form_data = { 'url_params': {}, 'row_limit': 500, 'metric': 'sum__SP_POP_TOTL', 'entity': 'country_code', 'secondary_metric': 'sum__SP_POP_TOTL', 'granularity_sqla': 'year', 'page_length': 0, 'all_columns': [], 'viz_type': 'table', 'since': '2014-01-01', 'until': '2014-01-02', 'metrics': [ 'sum__SP_POP_TOTL', 'SUM(SE_PRM_NENR_MA)', 'SUM(SP_URB_TOTL)', ], 'country_fieldtype': 'cca3', 'percent_metrics': [ 'count', ], 'slice_id': 74, 'time_grain_sqla': None, 'order_by_cols': [], 'groupby': [ 'country_name', ], 'compare_lag': '10', 'limit': '25', 'datasource': '2__table', 'table_timestamp_format': '%Y-%m-%d %H:%M:%S', 'markup_type': 'markdown', 'where': '', 'compare_suffix': 'o10Y', } datasource = Mock() datasource.type = 'table' test_viz = viz.BaseViz(datasource, form_data) expect_metric_labels = [u'sum__SP_POP_TOTL', u'SUM(SE_PRM_NENR_MA)', u'SUM(SP_URB_TOTL)', u'count', ] self.assertEqual(test_viz.metric_labels, expect_metric_labels) self.assertEqual(test_viz.all_metrics, expect_metric_labels)
def test_get_df_returns_empty_df(self): datasource = Mock() datasource.type = 'table' mock_dttm_col = Mock() mock_dttm_col.python_date_format = Mock() datasource.get_col = Mock(return_value=mock_dttm_col) form_data = {'dummy': 123} query_obj = {'granularity': 'day'} results = Mock() results.query = Mock() results.status = Mock() results.error_message = None results.df = Mock() results.df.empty = True datasource.query = Mock(return_value=results) test_viz = viz.BaseViz(datasource, form_data) result = test_viz.get_df(query_obj) self.assertEqual(type(result), pd.DataFrame) self.assertTrue(result.empty) self.assertEqual(test_viz.error_message, 'No data.') self.assertEqual(test_viz.status, utils.QueryStatus.FAILED)
def test_constructor_exception_no_datasource(self): form_data = {} datasource = None with self.assertRaises(Exception): viz.BaseViz(datasource, form_data)