feat: display five GLB PnL series with distinct colors
Deploy production / deploy (push) Successful in 56s
Deploy production / deploy (push) Successful in 56s
This commit is contained in:
@@ -0,0 +1,55 @@
|
||||
"""GLB display data uses raw caches without changing the correlation baseline."""
|
||||
|
||||
import pytest
|
||||
|
||||
from app.alphas import glb_pnl_series, pnl_points, upsert_alpha
|
||||
from app.models import Pnl
|
||||
from tests.conftest import alpha
|
||||
|
||||
COLUMNS = ["date", "pnl", "investability-constrained-pnl", "amer-pnl", "apac-pnl", "emea-pnl"]
|
||||
RAW = {
|
||||
"schema": {"properties": [{"name": name} for name in COLUMNS]},
|
||||
"records": [["2025-01-02", 100, 80, 50, None, -20], ["2025-01-01", 0, 0, 0, 0, 0]],
|
||||
}
|
||||
|
||||
|
||||
@pytest.mark.parametrize("region", ["GLB", "USA"])
|
||||
async def test_existing_raw_cache_exposes_glb_series_without_refresh(app, logged_in, region):
|
||||
points = pnl_points(RAW)
|
||||
async with app.state.runner.sessions.begin() as db:
|
||||
await upsert_alpha(db, alpha("glb", settings={"region": region}))
|
||||
db.add(Pnl(alpha_id="glb", raw=RAW, points=points))
|
||||
response = await logged_in.get("/api/v1/alphas/glb/pnl")
|
||||
assert response.status_code == 200
|
||||
result = response.json()
|
||||
assert result["cached"] and result["points"] == points
|
||||
if region == "GLB":
|
||||
assert [s["id"] for s in result["series"]] == COLUMNS[1:]
|
||||
assert [s["points"][-1]["value"] for s in result["series"]] == [100, 80, 50, None, -20]
|
||||
else:
|
||||
assert result["series"] == []
|
||||
|
||||
|
||||
def test_reordered_columns_and_incomplete_rows_preserve_gaps():
|
||||
raw = {
|
||||
"schema": {"properties": {"AMER-PNL": {}, "date": {}, "pnl": {}, "emea-pnl": {}}},
|
||||
"records": [[12, "2025-01-01", 30, "NaN"], [20, "2025-01-02", 50]],
|
||||
}
|
||||
series = glb_pnl_series(raw, pnl_points(raw))
|
||||
assert [s["id"] for s in series] == ["pnl", "amer-pnl", "emea-pnl"]
|
||||
assert [p["value"] for p in series[1]["points"]] == [12, 20]
|
||||
assert [p["value"] for p in series[2]["points"]] == [None, None]
|
||||
|
||||
|
||||
def test_dictionary_records_and_legacy_cache():
|
||||
raw = {"records": [{"timestamp": 1735689600000, "value": 5, "apac-pnl": -2}]}
|
||||
series = glb_pnl_series(raw, pnl_points(raw))
|
||||
assert series[1]["points"] == [{"date": "2025-01-01T00:00:00+00:00", "value": -2}]
|
||||
assert glb_pnl_series({}, pnl_points(raw)) == series[:1]
|
||||
|
||||
|
||||
async def test_uncached_glb_is_empty(app, logged_in):
|
||||
async with app.state.runner.sessions.begin() as db:
|
||||
await upsert_alpha(db, alpha("empty", settings={"region": "GLB"}))
|
||||
result = (await logged_in.get("/api/v1/alphas/empty/pnl")).json()
|
||||
assert result == {"cached": False, "points": [], "series": [], "fetched_at": None}
|
||||
Reference in New Issue
Block a user