交付前缺 Flask 常驻与路由断言;现补齐 pytest 与报告。 Co-authored-by: Cursor <cursoragent@cursor.com>
49 lines
1.2 KiB
Python
49 lines
1.2 KiB
Python
"""ECR-009: page/API smoke without requiring live provider during assert."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import os
|
|
import sys
|
|
|
|
import pytest
|
|
|
|
# Ensure repo root + web on path like app.py
|
|
_ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
|
_WEB = os.path.join(_ROOT, "web")
|
|
for p in (_ROOT, _WEB):
|
|
if p not in sys.path:
|
|
sys.path.insert(0, p)
|
|
|
|
os.environ.setdefault("CRYPTO_WYCKOFF_DISABLE", "1")
|
|
|
|
|
|
@pytest.fixture()
|
|
def client():
|
|
from app import create_app
|
|
|
|
app = create_app()
|
|
app.config["TESTING"] = True
|
|
with app.test_client() as c:
|
|
yield c
|
|
|
|
|
|
def test_wyckoff_crypto_page_ok(client):
|
|
resp = client.get("/wyckoff_crypto")
|
|
assert resp.status_code == 200
|
|
assert b"Crypto Wyckoff Screener" in resp.data
|
|
|
|
|
|
def test_wyckoff_crypto_meta_ok(client):
|
|
resp = client.get("/api/wyckoff_crypto/meta")
|
|
assert resp.status_code == 200
|
|
data = resp.get_json()
|
|
assert "engine_version" in data
|
|
assert data.get("timeframes") == ["1d", "1w", "1M"]
|
|
|
|
|
|
def test_wyckoff_crypto_scan_ok(client):
|
|
resp = client.get("/api/wyckoff_crypto/scan?limit=5")
|
|
assert resp.status_code == 200
|
|
data = resp.get_json()
|
|
assert "rows" in data
|