import datetime as dt import random import polars as pl import pytest from tests.conftest import live from wp39.api_client import FinDataClient, _redact def test_redaction(): assert "fd_abc.def" not in _redact("token fd_abc.def leaked") @live def test_schema_and_datasets(): c = FinDataClient() s = c.schema_bars() assert s["timestamp_convention"] == "bar_open" and s["schema_version"] == 1 ids = {d["id"] for d in c.datasets()} assert {"market_bars.stock.1m.raw", "market_bars.etf.1m.raw"} <= ids @live def test_asof_equivalence(): """Local filter available_at <= as_of on the full extract == API as_of result (metric, period) set.""" c = FinDataClient() full = pl.DataFrame(c.fundamentals("frd:MSFT", period_type="q", limit=20000)["data"]) full = full.with_columns(pl.col("available_at").str.to_datetime(time_zone="UTC", strict=False)) for as_of in ("2016-03-01T00:00:00Z", "2019-11-15T00:00:00Z", "2023-08-01T00:00:00Z"): api = pl.DataFrame(c.fundamentals("frd:MSFT", as_of=as_of, period_type="q", limit=20000)["data"]) local = full.filter(pl.col("available_at") <= pl.lit(as_of).str.to_datetime(time_zone="UTC")) a = set(zip(api["metric"], api["fiscal_period_end"])); b = set(zip(local["metric"], local["fiscal_period_end"])) assert a == b, (as_of, len(a), len(b)) @live def test_bars_limits_are_enforced(): from wp39.api_client import FinDataError c = FinDataClient() with pytest.raises(FinDataError): c.get("/market/bars", symbol="AAPL", interval="1m", start="2024-01-01", end="2024-03-15", limit=10)