Esempio n. 1
0
    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)
Esempio n. 2
0
    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)
Esempio n. 3
0
    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'])
Esempio n. 4
0
    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)