def test_api_with_reference(self, mock_transformer): metrics = ['clicks', 'conversions'] dimensions = ['date'] self.test_slicer.manager.data.return_value = pd.DataFrame(columns=metrics) self.test_slicer.manager.display_schema.side_effect = [ {'metrics': metrics[:1], 'dimensions': dimensions, 'references': []}, {'metrics': metrics[1:], 'dimensions': dimensions, 'references': []}, ] reference = WoW('date') test_render = WidgetGroup( slicer=self.test_slicer, widgets=[ LineChartWidget(metrics=metrics[:1]), LineChartWidget(metrics=metrics[1:]), ], dimensions=dimensions ) result = test_render.manager.render( references=[reference], ) self.assert_slicer_queried( metrics, dimensions=dimensions, references=[reference], ) self.assert_result_transformed(test_render.widgets, dimensions, mock_transformer, result)
def test_reference_in_widgetgroup(self, mock_transformer): metrics = ['clicks', 'conversions'] dimensions = ['date'] references = [WoW('date')] self.test_slicer.manager.data.return_value = pd.DataFrame(columns=[(ref, metric) for ref in ['', 'wow'] for metric in metrics]) self.test_slicer.manager.display_schema.side_effect = [ {'metrics': metrics[:1], 'dimensions': dimensions, 'references': {'wow': 'date'}}, {'metrics': metrics[1:], 'dimensions': dimensions, 'references': {'wow': 'date'}}, ] test_render = WidgetGroup( slicer=self.test_slicer, widgets=[ LineChartWidget(metrics=metrics[:1]), LineChartWidget(metrics=metrics[1:]), ], dimensions=dimensions, references=references, ) result = test_render.manager.render() self.assert_slicer_queried( metrics, dimensions=dimensions, references=references, ) self.assert_result_transformed(test_render.widgets, dimensions, mock_transformer, result, references)
def test_data(self, mock_query_schema, mock_operation_schema, mock_query_data, mock_post_process): mock_args = {'metrics': ['a'], 'dimensions': ['e'], 'metric_filters': [2], 'dimension_filters': [3], 'references': [WoW('d')], 'operations': [5], 'pagination': None} mock_query_schema.return_value = {'a': 1, 'b': 2} mock_query_data.return_value = mock_post_process.return_value = pd.DataFrame( columns=itertools.product(['', 'wow'], ['a', 'c', 'm_test'])) mock_operation_schema.return_value = [{'metric': 'm', 'key': 'test'}] result = self.slicer.manager.data(**mock_args) self.assertIsInstance(result, pd.DataFrame) self.assertListEqual([('', 'a'), ('', 'm_test'), ('wow', 'a'), ('wow', 'm_test')], list(result.columns)) mock_query_schema.assert_called_once_with(**mock_args) mock_query_data.assert_called_once_with(a=1, b=2) mock_operation_schema.assert_called_once_with(mock_args['operations'])
def test_query_data_calls_build_data_query_with_correct_args(self, mock_build_query, *args): db = TestDatabase() metrics = {'bar': self.slicer.metrics.get('bar')} dimensions = {'cat': self.slicer.dimensions.get('cat')} dfilters = ContainsFilter('cat', ['a', 'b']) references = {'date': WoW('date')} args = { 'database': db, 'table': self.slicer.table, 'joins': self.slicer.joins, 'metrics': metrics, 'dimensions': dimensions, 'dfilters': dfilters, 'references': references } self.slicer.manager.query_data(**args) mock_build_query.assert_called_once_with(db, self.slicer.table, self.slicer.joins, metrics, dimensions, dfilters, None, references, None, None)