コード例 #1
0
ファイル: test_pagination.py プロジェクト: jgu845/fireant
    def test_paginate_with_limit_and_offset_slice_data_frame_from_offset_to_offset_plus_limit(
        self,
    ):
        paginated = paginate(dimx2_date_str_df, [mock_table_widget], limit=5, offset=5)

        expected = dimx2_date_str_df[5:10]
        assert_frame_equal(expected, paginated)
コード例 #2
0
    def test_group_pagination_with_order_on_non_selected_datetime_metric(self):
        index_values = [['2016-10-03', '2016-10-04', '2016-10-05'],
                        ['General', 'City']]
        # City values have the highest aggregated $updated_time timestamp (as paginate uses MAX for datetimes):
        data_values = [
            (10, '2018-08-10'),  # General
            (2, '2018-08-11'),  # City
            (44, '2018-08-09'),  # General
            (6, '2018-08-06'),  # City
            (18, '2018-08-04'),  # General
            (21, '2018-08-20'),  # City
        ]
        idx = pd.MultiIndex.from_product(index_values,
                                         names=['$created_time', '$category'])
        df = pd.DataFrame(data_values, idx, ['$seeds', '$updated_time'])
        df["$updated_time"] = pd.to_datetime(df["$updated_time"])

        result = paginate(df, [mock_chart_widget],
                          [(Mock(alias="updated_time"), Order.desc)])

        # We order descending on $updated_time, which puts City values first.
        # So we sort the original dataframe on #category ascending so that it would put the City values first
        expected = df.sort_values(
            by=['$created_time', '$category'],
            ascending=[True, True],
        )
        # This created expected dataframe should match the result
        assert_frame_equal(expected, result)
コード例 #3
0
    def test_paginate_with_limit_slice_data_frame_to_limit_in_each_group(self):
        paginated = paginate(dimx2_date_str_df, [mock_chart_widget], limit=2)

        index = dimx2_date_str_df.index
        reindex = pd.MultiIndex.from_product(
            [index.levels[0], index.levels[1][:2]], names=index.names)
        expected = dimx2_date_str_df.reindex(reindex).dropna().astype(np.int64)
        assert_frame_equal(expected, paginated)
コード例 #4
0
    def test_paginate_with_offset_slice_data_frame_from_offset_in_each_group(
            self):
        paginated = paginate(dimx2_date_str_df, [mock_chart_widget], offset=2)

        index = dimx2_date_str_df.index
        reindex = pd.MultiIndex.from_product(
            [index.levels[0], index.levels[1][2:]], names=index.names)
        expected = dimx2_date_str_df.reindex(reindex)
        assert_frame_equal(expected, paginated)
コード例 #5
0
ファイル: test_pagination.py プロジェクト: jgu845/fireant
    def test_apply_sort_with_one_order_metric_desc(self):
        paginated = paginate(
            dimx2_date_str_df,
            [mock_chart_widget],
            orders=[(mock_metric_definition, Order.desc)],
        )

        expected = dimx2_date_str_df.iloc[[2, 0, 1, 4, 3, 6, 5, 8, 7, 10, 9, 12, 11]]
        assert_frame_equal(expected, paginated)
コード例 #6
0
    def test_apply_sort_with_one_order_metric_asc(self):
        paginated = paginate(
            dimx2_date_str_df,
            [mock_table_widget],
            orders=[(mock_metric_definition, Order.asc)],
        )

        expected = dimx2_date_str_df.sort_values(
            by=[mock_metric_definition.alias], ascending=True)
        assert_frame_equal(expected, paginated)
コード例 #7
0
    def test_apply_sort_with_one_order_dimension_desc(self):
        paginated = paginate(
            dimx2_date_str_df,
            [mock_chart_widget],
            orders=[(mock_dimension_definition, Order.desc)],
        )

        expected = dimx2_date_str_df.sort_values(
            by=[TS, mock_dimension_definition.alias], ascending=(True, False))
        assert_frame_equal(expected, paginated)
コード例 #8
0
    def test_apply_sort_before_slice(self):
        paginated = paginate(
            dimx2_date_str_df,
            [mock_chart_widget],
            limit=1,
            offset=1,
            orders=[(mock_metric_definition, Order.asc)],
        )

        expected = dimx2_date_str_df.iloc[[0, 3, 5, 7, 9, 11]]
        assert_frame_equal(expected, paginated)
コード例 #9
0
    def test_apply_sort_before_slice(self):
        paginated = paginate(
            dimx2_date_str_df,
            [mock_table_widget],
            orders=[(mock_metric_definition, Order.asc)],
            limit=5,
            offset=5,
        )

        expected = dimx2_date_str_df.sort_values(
            by=[mock_metric_definition.alias], ascending=True)[5:10]
        assert_frame_equal(expected, paginated)
コード例 #10
0
    def test_apply_sort_multiple_levels_df(self):
        paginated = paginate(
            dimx3_date_str_str_df,
            [mock_chart_widget],
            orders=[(mock_metric_definition, Order.asc)],
        )

        sorted_groups = (dimx3_date_str_str_df.groupby(
            level=[1, 2]).sum().sort_values(by="$votes", ascending=True).index)
        expected = (dimx3_date_str_str_df.groupby(
            level=0).apply(lambda df: df.reset_index(level=0, drop=True).
                           reindex(sorted_groups)).dropna())
        metrics = ["$votes", "$wins", "$wins_with_style", "$turnout"]
        expected[metrics] = expected[metrics].astype(np.int64)
        assert_frame_equal(expected, paginated)
コード例 #11
0
    def test_apply_sort_with_multiple_orders(self):
        paginated = paginate(
            dimx2_date_str_df,
            [mock_table_widget],
            orders=[
                (mock_dimension_definition, Order.asc),
                (mock_metric_definition, Order.desc),
            ],
        )

        expected = dimx2_date_str_df.sort_values(
            by=[mock_dimension_definition.alias, mock_metric_definition.alias],
            ascending=[True, False],
        )
        assert_frame_equal(expected, paginated)
コード例 #12
0
    def test_paginate_with_offset_slice_data_frame_from_offset(self):
        paginated = paginate(dimx2_date_str_df, [mock_table_widget], offset=5)

        expected = dimx2_date_str_df[5:]
        assert_frame_equal(expected, paginated)
コード例 #13
0
    def test_paginate_with_limit_slice_data_frame_to_limit(self):
        paginated = paginate(dimx2_date_str_df, [mock_table_widget], limit=5)

        expected = dimx2_date_str_df[:5]
        assert_frame_equal(expected, paginated)
コード例 #14
0
    def test_that_with_group_pagination_and_one_dimension_that_simple_pagination_is_applied(
            self, mock_paginate):
        paginate(dimx2_str_num_df, [mock_table_widget])

        mock_paginate.assert_called_once_with(ANY, ANY, ANY, ANY)
コード例 #15
0
    def test_that_with_no_widgets_using_group_pagination_that_simple_pagination_is_applied(
            self, mock_paginate):
        paginate(dimx2_date_str_df, [mock_table_widget])

        mock_paginate.assert_called_once_with(ANY, ANY, ANY, ANY)
コード例 #16
0
 def test_group_paginate_with_bool_dims__paginate_single_value(self):
     # This test does not apply any pagination but checks that none of the dimension values get lost
     paginated = paginate(dimx2_date_bool_df, [mock_chart_widget], limit=1)
     expected = dimx2_date_bool_df.loc[(slice(None), False), :]
     assert_frame_equal(expected, paginated)
コード例 #17
0
 def test_group_paginate_with_bool_dims__no_pagination(self):
     # This test does not apply any pagination but checks that none of the dimension values get lost
     expected = dimx2_date_bool_df
     paginated = paginate(dimx2_date_bool_df, [mock_chart_widget])
     assert_frame_equal(expected, paginated)