67 lines
2.4 KiB
Python
67 lines
2.4 KiB
Python
from __future__ import annotations
|
|
|
|
import json
|
|
|
|
from crypto_spot_bot.dashboard import _apply_fast_trading
|
|
from crypto_spot_bot.dashboard import _safe_config
|
|
from crypto_spot_bot.dashboard import HTML
|
|
from crypto_spot_bot.storage import Storage
|
|
|
|
|
|
def test_apply_fast_trading_updates_runtime_and_env(make_settings, tmp_path) -> None:
|
|
settings = make_settings(tmp_path, fast_trading_enabled=False)
|
|
settings.env_file_path.write_text("FAST_TRADING_ENABLED=false\n", encoding="utf-8")
|
|
storage = Storage(settings.database_path)
|
|
|
|
env_persisted = _apply_fast_trading(settings, storage, True)
|
|
|
|
assert env_persisted is True
|
|
assert settings.fast_trading_enabled is True
|
|
assert storage.get_runtime("fast_trading_enabled") is True
|
|
assert "FAST_TRADING_ENABLED=true" in settings.env_file_path.read_text(encoding="utf-8")
|
|
|
|
|
|
def test_safe_config_summarizes_torch_forecast_artifact(make_settings, tmp_path) -> None:
|
|
artifact_path = tmp_path / "lstm_forecaster.json"
|
|
artifact_path.write_text(
|
|
json.dumps(
|
|
{
|
|
"type": "pytorch_recurrent_forecaster",
|
|
"created_at": "2026-06-20T18:15:05+00:00",
|
|
"symbols": {
|
|
"BTCUSDT": {"model": "torch_lstm"},
|
|
"ETHUSDT": {"model": "torch_gru"},
|
|
},
|
|
}
|
|
),
|
|
encoding="utf-8",
|
|
)
|
|
settings = make_settings(tmp_path, time_series_lstm_model_path=artifact_path)
|
|
|
|
config = _safe_config(settings)
|
|
|
|
assert config["time_series_probe_enabled"] is True
|
|
assert config["time_series_probe_min_edge_percent"] == 0.02
|
|
assert config["time_series_probe_min_probability_up"] == 0.55
|
|
assert config["time_series_probe_size_multiplier"] == 0.40
|
|
assert config["time_series_rebound_fallback_enabled"] is True
|
|
assert config["time_series_model_artifact"] == {
|
|
"available": True,
|
|
"type": "pytorch_recurrent_forecaster",
|
|
"label": "PyTorch LSTM/GRU",
|
|
"created_at": "2026-06-20T18:15:05+00:00",
|
|
"symbol_count": 2,
|
|
"models": ["PyTorch GRU", "PyTorch LSTM"],
|
|
"feature_count": 1,
|
|
"target_horizon": 0,
|
|
"direct_horizon": False,
|
|
}
|
|
|
|
|
|
def test_dashboard_html_is_russian_torch_workspace() -> None:
|
|
assert "Рынки и Torch" in HTML
|
|
assert "Что видит нейросеть перед прогнозом" in HTML
|
|
assert "Свечи" in HTML
|
|
assert "class=\"pill" not in HTML
|
|
assert ".pill" not in HTML
|