def test_median_returns_correct_values(get_dataframe):
    """
    features.network.TotalNetworkObjects median aggregate returns correct values.

    """
    instance = network.TotalNetworkObjects(
        table="calls", period="hour", network_object="versioned-site"
    ).aggregate(by="day", statistic="median")

    #
    #  This will compare the very first
    #  value with an independently
    #  computed value.
    #
    assert get_dataframe(instance).head(1)["median"][0] == 25
def test_count_returns_correct_values(get_dataframe):
    """
    TotalNetworkObjects returns correct values.

    """
    instance = network.TotalNetworkObjects(
        start="2016-01-01", stop="2016-12-30", table="calls", period="hour"
    )
    df = get_dataframe(instance)

    #
    #  This will compare the very first
    #  value with an independently
    #  computed value.
    #
    assert df.total[34] == 31
def test_mean_returns_correct_values(get_dataframe):
    """
    features.network.TotalNetworkObjects aggregation returns correct values.

    """
    instance = network.TotalNetworkObjects(
        start="2016-01-01",
        stop="2016-12-30",
        period="hour",
        network_object="versioned-site",
    ).aggregate(by="day")

    #
    #  This will compare the very first
    #  value with an independently
    #  computed value.
    #
    assert get_dataframe(instance).head(1)["avg"][0] == pytest.approx(28.7916666666)
def test_bad_statistic():
    """Test that invalid stat for aggregate raises value error."""
    with pytest.raises(ValueError):
        network.TotalNetworkObjects(
            start="2016-01-01", stop="2016-12-30", table="calls"
        ).aggregate(statistic="count")
def test_bad_params(bad_arg, bad_val):
    """Test value errors are raised for bad params"""
    with pytest.raises(ValueError):
        network.TotalNetworkObjects(
            start="2016-01-01", stop="2016-12-30", table="calls", **{bad_arg: bad_val}
        )
def test_period_agg_default(period, expected):
    """Correct aggregation period is deduced."""
    inst = network.TotalNetworkObjects(
        start="2016-01-01", stop="2016-12-30", period=period
    ).aggregate()
    assert inst.by == expected