test: reorganize core suite into explicit domain files
This commit is contained in:
67
tests/stats/test_stats_aggregator_output.py
Normal file
67
tests/stats/test_stats_aggregator_output.py
Normal file
@@ -0,0 +1,67 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from datetime import date
|
||||
|
||||
from auditui.stats.aggregator import StatsAggregator
|
||||
from auditui.stats import aggregator as aggregator_mod
|
||||
|
||||
|
||||
def test_get_stats_returns_empty_without_client() -> None:
|
||||
"""Ensure stats aggregation short-circuits when API client is absent."""
|
||||
aggregator = StatsAggregator(
|
||||
client=None, auth=None, library_client=None, all_items=[]
|
||||
)
|
||||
assert aggregator.get_stats() == []
|
||||
|
||||
|
||||
def test_get_stats_builds_expected_rows(monkeypatch) -> None:
|
||||
"""Ensure aggregator assembles rows from listening, account, and email sources."""
|
||||
monkeypatch.setattr(
|
||||
aggregator_mod.listening_mod, "get_signup_year", lambda _client: 2015
|
||||
)
|
||||
monkeypatch.setattr(
|
||||
aggregator_mod.listening_mod,
|
||||
"get_listening_time",
|
||||
lambda _client, duration, start_date: 120_000 if duration == 1 else 3_600_000,
|
||||
)
|
||||
monkeypatch.setattr(
|
||||
aggregator_mod.listening_mod, "get_finished_books_count", lambda _lc, _items: 7
|
||||
)
|
||||
monkeypatch.setattr(
|
||||
aggregator_mod.email_mod,
|
||||
"resolve_email",
|
||||
lambda *args, **kwargs: "user@example.com",
|
||||
)
|
||||
monkeypatch.setattr(aggregator_mod.account_mod, "get_country", lambda _auth: "US")
|
||||
monkeypatch.setattr(
|
||||
aggregator_mod.account_mod,
|
||||
"get_account_info",
|
||||
lambda _client: {
|
||||
"subscription_details": [
|
||||
{
|
||||
"name": "Premium",
|
||||
"next_bill_date": "2026-02-01T00:00:00Z",
|
||||
"next_bill_amount": {
|
||||
"currency_value": "14.95",
|
||||
"currency_code": "USD",
|
||||
},
|
||||
}
|
||||
]
|
||||
},
|
||||
)
|
||||
|
||||
aggregator = StatsAggregator(
|
||||
client=object(),
|
||||
auth=object(),
|
||||
library_client=object(),
|
||||
all_items=[{}, {}, {}],
|
||||
)
|
||||
stats = dict(aggregator.get_stats(today=date(2026, 2, 1)))
|
||||
assert stats["Email"] == "user@example.com"
|
||||
assert stats["Country Store"] == "US"
|
||||
assert stats["Signup Year"] == "2015"
|
||||
assert stats["Subscription"] == "Premium"
|
||||
assert stats["Price"] == "14.95 USD"
|
||||
assert stats["This Month"] == "2m"
|
||||
assert stats["This Year"] == "1h00"
|
||||
assert stats["Books Finished"] == "7 / 3"
|
||||
Reference in New Issue
Block a user