Files

103 lines
2.4 KiB
Python

"""Tests für REST-API / Dashboard (trademind serve)."""
import textwrap
import pytest
from trademind.config import ServerConfig, load
CFG = textwrap.dedent(
"""
trading:
base_currency: BTC
quote_currency: USDT
candles: 120
"""
)
@pytest.fixture
def cfg_file(tmp_path):
p = tmp_path / "config.yaml"
p.write_text(CFG, encoding="utf-8")
return str(p)
@pytest.fixture
def client(cfg_file):
from fastapi.testclient import TestClient
from trademind.server import make_app
app = make_app(cfg_file, data="mock", exchange="binance")
with TestClient(app) as c:
yield c
def test_server_config_defaults_and_env():
assert ServerConfig().port == 8080
assert ServerConfig().host == "0.0.0.0"
cfg = ServerConfig.from_dict({"port": "9443", "host": "127.0.0.1"})
assert cfg.port == 9443
assert cfg.host == "127.0.0.1"
def test_config_load_includes_server(cfg_file):
cfg = load(cfg_file)
assert cfg.server.port == 8080
assert cfg.server.host == "0.0.0.0"
def test_health(client):
r = client.get("/api/health")
assert r.status_code == 200
body = r.json()
assert body["status"] == "ok"
assert body["version"]
def test_dashboard_html(client):
r = client.get("/")
assert r.status_code == 200
assert "text/html" in r.headers["content-type"]
assert "TradeMind" in r.text
def test_status(client):
r = client.get("/api/status")
assert r.status_code == 200
body = r.json()
assert body["symbol"] == "BTC/USDT"
assert body["trading"]["candles"] == 120
assert body["last_run"] is None
def test_signals_mock_data(client):
r = client.get("/api/signals?limit=10")
assert r.status_code == 200
body = r.json()
assert body["broker"] == "mock"
sigs = body["signals"]
assert sigs, "expected at least one signal"
last = sigs[-1]
assert last["action"] in (-1, 0, 1, 2)
assert last["price"] > 0
assert isinstance(last["score"], (int, float))
def test_paper_run_and_equity(client):
r = client.post("/api/paper")
assert r.status_code == 200
body = r.json()
assert body["summary"]["final_equity"] > 0
assert len(body["equity_curve"]) > 1
eq = client.get("/api/equity")
assert eq.status_code == 200
ebody = eq.json()
assert ebody["summary"]["final_equity"] > 0
assert ebody["equity_curve"]
st = client.get("/api/status")
assert st.json()["last_run"]["broker"] == "mock"