You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
68 lines
2.0 KiB
Python
68 lines
2.0 KiB
Python
"""Integration test: sync jobs (FRED/FINRA → DB rows)."""
|
|
|
|
import datetime as dt
|
|
|
|
import pytest
|
|
|
|
|
|
@pytest.mark.integration
|
|
@pytest.mark.asyncio
|
|
async def test_macro_series_insert(db_session, fred_observations_fixture):
|
|
"""FRED sync should create macro_series + macro_observations rows."""
|
|
from sqlalchemy import select
|
|
|
|
from libs.db.models import MacroObservation, MacroSeries
|
|
|
|
# Upsert macro_series
|
|
series = MacroSeries(
|
|
series_id="DGS10",
|
|
title="10-Year Treasury",
|
|
frequency="daily",
|
|
source_name="fred",
|
|
)
|
|
db_session.add(series)
|
|
await db_session.flush()
|
|
|
|
# Insert observations
|
|
for obs in fred_observations_fixture["data"]["observations"]:
|
|
ob = MacroObservation(
|
|
series_id="DGS10",
|
|
observation_date=dt.date.fromisoformat(obs["date"]),
|
|
value=obs["value"],
|
|
)
|
|
db_session.add(ob)
|
|
await db_session.flush()
|
|
|
|
result = await db_session.execute(
|
|
select(MacroObservation).where(MacroObservation.series_id == "DGS10")
|
|
)
|
|
rows = result.scalars().all()
|
|
assert len(rows) == 4
|
|
|
|
|
|
@pytest.mark.integration
|
|
@pytest.mark.asyncio
|
|
async def test_short_sale_daily_insert(db_session, short_volume_fixture):
|
|
"""FINRA sync should create short_sale_daily rows."""
|
|
from sqlalchemy import select
|
|
|
|
from libs.db.models import ShortSaleDaily
|
|
|
|
for entry in short_volume_fixture["entries"]:
|
|
row = ShortSaleDaily(
|
|
ticker_raw="AAPL",
|
|
trade_date=dt.date.fromisoformat(entry["date"]),
|
|
short_volume=entry["short_volume"],
|
|
short_exempt_volume=entry.get("short_exempt_volume"),
|
|
total_volume=entry.get("total_volume"),
|
|
source_name="finra",
|
|
)
|
|
db_session.add(row)
|
|
await db_session.flush()
|
|
|
|
result = await db_session.execute(
|
|
select(ShortSaleDaily).where(ShortSaleDaily.ticker_raw == "AAPL")
|
|
)
|
|
rows = result.scalars().all()
|
|
assert len(rows) == 3
|