Files

57 lines
2.6 KiB
Python
Raw Permalink Normal View History

import pytest
from app.alphas import snapshot_columns, upsert_alpha
from tests.conftest import alpha
@pytest.mark.parametrize("value", [0.6988, 0.0])
async def test_submitted_metrics_map_without_check_history(app, logged_in, value):
raw = alpha(status="ACTIVE", **{"is": {"prodCorrelation": value, "selfCorrelation": 0.0,
"checks": [{"name": "LOW_2Y_SHARPE", "result": "PASS", "value": 2.1}]},
"os": {"checks": [{"name": "PROD_CORRELATION", "result": "PENDING"}]}})
async with app.state.sessions.begin() as db:
await upsert_alpha(db, raw)
detail = (await logged_in.get('/api/v1/alphas/alpha1')).json()
assert detail['prod_correlation'] == value
assert detail['is_metrics']['selfCorrelation'] == 0.0
assert detail['os_metrics']['checks'][0]['result'] == 'PENDING'
assert detail['two_year_sharpe'] == 2.1
assert detail['check_type'] != 'PASS'
def test_check_value_takes_precedence_over_cached_metric():
assert snapshot_columns({}, {'prodCorrelation': 0.4}, [
{'name': 'PROD_CORRELATION', 'value': 0.0, 'result': 'PASS'}
])['prod_correlation'] == 0.0
def test_migration_recovers_saved_values_without_overwriting_existing():
import importlib.util
from pathlib import Path
from types import SimpleNamespace
import sqlalchemy as sa
path = Path(__file__).parents[1] / 'migrations/versions/0013_submitted_correlation.py'
spec = importlib.util.spec_from_file_location('migration_0013', path)
migration = importlib.util.module_from_spec(spec)
spec.loader.exec_module(migration)
engine = sa.create_engine('sqlite://')
metadata = sa.MetaData()
table = sa.Table('alphas', metadata, sa.Column('id', sa.String, primary_key=True),
sa.Column('is_metrics', sa.JSON), sa.Column('prod_correlation', sa.Float))
metadata.create_all(engine)
with engine.begin() as db:
db.execute(table.insert(), [
{'id': 'zero', 'is_metrics': {'prodCorrelation': 0.0}, 'prod_correlation': None},
{'id': 'saved', 'is_metrics': {'prodCorrelation': 0.6988}, 'prod_correlation': None},
{'id': 'existing', 'is_metrics': {'prodCorrelation': 0.4}, 'prod_correlation': 0.2},
{'id': 'missing', 'is_metrics': {}, 'prod_correlation': None},
])
migration.op = SimpleNamespace(get_bind=lambda: db)
migration.upgrade()
migration.upgrade()
assert dict(db.execute(sa.select(table.c.id, table.c.prod_correlation)).all()) == {
'zero': 0.0, 'saved': 0.6988, 'existing': 0.2, 'missing': None}
engine.dispose()