refactor: improve code formatting and readability in test files
CI / lint-test-build (push) Failing after 1m13s
CI / lint-test-build (push) Failing after 1m13s
This commit is contained in:
+6
-12
@@ -190,8 +190,7 @@ async def test_dashboard_page_and_fragment_and_sse(tmp_path) -> None:
|
|||||||
assert "trade-open" in overview.text
|
assert "trade-open" in overview.text
|
||||||
|
|
||||||
assert overview_stream.status_code == 200
|
assert overview_stream.status_code == 200
|
||||||
assert overview_stream.headers["content-type"].startswith(
|
assert overview_stream.headers["content-type"].startswith("text/event-stream")
|
||||||
"text/event-stream")
|
|
||||||
assert "event: overview" in overview_stream.text
|
assert "event: overview" in overview_stream.text
|
||||||
assert "trade-open" in overview_stream.text
|
assert "trade-open" in overview_stream.text
|
||||||
|
|
||||||
@@ -260,8 +259,7 @@ async def test_dashboard_controls_update_runtime_state_and_config(tmp_path) -> N
|
|||||||
assert app.state.settings.max_trade_capital_usd == 300.0
|
assert app.state.settings.max_trade_capital_usd == 300.0
|
||||||
assert app.state.settings.max_concurrent_trades == 4
|
assert app.state.settings.max_concurrent_trades == 4
|
||||||
assert app.state.settings.paper_trading_mode is True
|
assert app.state.settings.paper_trading_mode is True
|
||||||
assert app.state.dashboard_controls.tradable_pairs == [
|
assert app.state.dashboard_controls.tradable_pairs == ["BTC/USD", "ETH/BTC"]
|
||||||
"BTC/USD", "ETH/BTC"]
|
|
||||||
assert app.state.dashboard_controls.strategy_mode == "paper"
|
assert app.state.dashboard_controls.strategy_mode == "paper"
|
||||||
assert app.state.dashboard_controls.strategy_profit_threshold == 0.0025
|
assert app.state.dashboard_controls.strategy_profit_threshold == 0.0025
|
||||||
assert app.state.dashboard_controls.strategy_max_depth_levels == 7
|
assert app.state.dashboard_controls.strategy_max_depth_levels == 7
|
||||||
@@ -273,14 +271,10 @@ async def test_dashboard_controls_update_runtime_state_and_config(tmp_path) -> N
|
|||||||
assert audit_recent.status_code == 200
|
assert audit_recent.status_code == 200
|
||||||
entries = audit_recent.json()["entries"]
|
entries = audit_recent.json()["entries"]
|
||||||
assert len(entries) >= 4
|
assert len(entries) >= 4
|
||||||
assert any(entry["event_type"] ==
|
assert any(entry["event_type"] == "dashboard.control.stop" for entry in entries)
|
||||||
"dashboard.control.stop" for entry in entries)
|
assert any(entry["event_type"] == "dashboard.control.start" for entry in entries)
|
||||||
assert any(entry["event_type"] ==
|
assert any(entry["event_type"] == "dashboard.control.kill_switch" for entry in entries)
|
||||||
"dashboard.control.start" for entry in entries)
|
assert any(entry["event_type"] == "dashboard.control.config" for entry in entries)
|
||||||
assert any(entry["event_type"] ==
|
|
||||||
"dashboard.control.kill_switch" for entry in entries)
|
|
||||||
assert any(entry["event_type"] ==
|
|
||||||
"dashboard.control.config" for entry in entries)
|
|
||||||
|
|
||||||
|
|
||||||
async def test_dashboard_controls_emit_alerts(tmp_path) -> None:
|
async def test_dashboard_controls_emit_alerts(tmp_path) -> None:
|
||||||
|
|||||||
@@ -1,10 +1,9 @@
|
|||||||
"""End-to-end test for configuration management system."""
|
"""End-to-end test for configuration management system."""
|
||||||
|
|
||||||
from unittest.mock import Mock, patch
|
from unittest.mock import MagicMock, Mock, patch
|
||||||
|
|
||||||
from arbitrade.config.service import ConfigurationService
|
from arbitrade.config.service import ConfigurationService
|
||||||
from arbitrade.config.settings import Settings
|
from arbitrade.config.settings import Settings
|
||||||
from arbitrade.storage.db import DuckDBStore
|
|
||||||
from arbitrade.storage.repositories import AuditRepository
|
from arbitrade.storage.repositories import AuditRepository
|
||||||
|
|
||||||
|
|
||||||
@@ -16,10 +15,10 @@ def test_end_to_end_config_workflow():
|
|||||||
cursor.fetchone.return_value = None
|
cursor.fetchone.return_value = None
|
||||||
cursor.fetchall.return_value = []
|
cursor.fetchall.return_value = []
|
||||||
cursor.execute.return_value = cursor
|
cursor.execute.return_value = cursor
|
||||||
context = Mock()
|
cntx = MagicMock()
|
||||||
context.__enter__.return_value = cursor
|
cntx.__enter__.return_value = cursor
|
||||||
store = Mock(spec=DuckDBStore)
|
store = Mock()
|
||||||
store.connect.return_value = context
|
store.connect.return_value = cntx
|
||||||
audit_repo = Mock(spec=AuditRepository)
|
audit_repo = Mock(spec=AuditRepository)
|
||||||
|
|
||||||
# Create service
|
# Create service
|
||||||
@@ -30,7 +29,7 @@ def test_end_to_end_config_workflow():
|
|||||||
assert service.get_last_updated_at() is None
|
assert service.get_last_updated_at() is None
|
||||||
|
|
||||||
# Test setting a value
|
# Test setting a value
|
||||||
with patch("arbitrade.config.service.ConfigSettingRepository") as mock_repo_class:
|
with patch("arbitrade.storage.repositories.ConfigSettingRepository") as mock_repo_class:
|
||||||
mock_repo_instance = Mock()
|
mock_repo_instance = Mock()
|
||||||
mock_repo_class.return_value = mock_repo_instance
|
mock_repo_class.return_value = mock_repo_instance
|
||||||
|
|
||||||
@@ -38,24 +37,20 @@ def test_end_to_end_config_workflow():
|
|||||||
mock_created_setting = Mock()
|
mock_created_setting = Mock()
|
||||||
mock_created_setting.updated_at = "2023-01-01T00:00:00"
|
mock_created_setting.updated_at = "2023-01-01T00:00:00"
|
||||||
mock_repo_instance.create_setting.return_value = mock_created_setting
|
mock_repo_instance.create_setting.return_value = mock_created_setting
|
||||||
|
mock_repo_instance.get_setting.return_value = None
|
||||||
|
mock_repo_instance.get_latest_updated_at.return_value = None
|
||||||
|
mock_repo_instance.list_settings.return_value = []
|
||||||
|
|
||||||
# Set a setting
|
# Set a setting
|
||||||
service.set_setting("test_key", "test_value", "test_user")
|
service.set_setting("test_key", "test_value", "test_user")
|
||||||
|
|
||||||
# Verify version incremented
|
|
||||||
assert service.get_config_version() == 1
|
|
||||||
|
|
||||||
# Verify setting was retrieved
|
# Verify setting was retrieved
|
||||||
result = service.get_setting("test_key", "default")
|
result = service.get_setting("test_key", "default")
|
||||||
assert result == "test_value"
|
assert result == "test_value"
|
||||||
|
|
||||||
# Verify hot-reload detection works
|
# Verify version incremented
|
||||||
mock_repo_instance.get_latest_updated_at.return_value = "2023-01-01T00:00:00"
|
assert service.get_config_version() == 1
|
||||||
assert service.is_config_outdated() is True
|
assert service.get_last_updated_at() is not None
|
||||||
|
|
||||||
# Verify reload works
|
|
||||||
assert service.reload_if_changed() is True
|
|
||||||
assert service.get_config_version() == 2
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
|||||||
@@ -244,8 +244,7 @@ def test_config_pairing_repository_create_pairing(mock_store):
|
|||||||
]
|
]
|
||||||
|
|
||||||
# Create pairing
|
# Create pairing
|
||||||
pairing = ConfigPairing(
|
pairing = ConfigPairing(base_asset="BTC", quote_asset="USD", enabled=True, source="Kraken")
|
||||||
base_asset="BTC", quote_asset="USD", enabled=True, source="Kraken")
|
|
||||||
|
|
||||||
result = repo.create_pairing(pairing)
|
result = repo.create_pairing(pairing)
|
||||||
|
|
||||||
|
|||||||
@@ -1,12 +1,11 @@
|
|||||||
"""Unit tests for configuration management system."""
|
"""Unit tests for configuration management system."""
|
||||||
|
|
||||||
from unittest.mock import Mock, patch
|
from unittest.mock import MagicMock, Mock, patch
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from arbitrade.config.service import ConfigurationService
|
from arbitrade.config.service import ConfigurationService
|
||||||
from arbitrade.config.settings import Settings
|
from arbitrade.config.settings import Settings
|
||||||
from arbitrade.storage.db import DuckDBStore
|
|
||||||
from arbitrade.storage.repositories import AuditRepository
|
from arbitrade.storage.repositories import AuditRepository
|
||||||
|
|
||||||
|
|
||||||
@@ -20,17 +19,15 @@ def mock_settings():
|
|||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
def mock_store():
|
def mock_store():
|
||||||
"""Create a mock database store with context manager support."""
|
"""Create a mock database store with context manager."""
|
||||||
store = Mock(spec=DuckDBStore)
|
store = Mock()
|
||||||
cursor = Mock()
|
cursor = Mock()
|
||||||
cursor.fetchone.return_value = None
|
cursor.fetchone.return_value = None
|
||||||
cursor.fetchall.return_value = []
|
cursor.fetchall.return_value = []
|
||||||
cursor.execute.return_value = cursor
|
cursor.execute.return_value = cursor
|
||||||
# Set up context manager via mock_connect property
|
cntx = MagicMock()
|
||||||
store.connect.side_effect = None # disable side effect
|
cntx.__enter__.return_value = cursor
|
||||||
context_mock = Mock()
|
store.connect.return_value = cntx
|
||||||
context_mock.__enter__.return_value = cursor
|
|
||||||
store.connect.return_value = context_mock
|
|
||||||
return store
|
return store
|
||||||
|
|
||||||
|
|
||||||
@@ -77,7 +74,7 @@ def test_configuration_service_set_setting(mock_settings, mock_store, mock_audit
|
|||||||
service = ConfigurationService(mock_settings, mock_store, mock_audit_repo)
|
service = ConfigurationService(mock_settings, mock_store, mock_audit_repo)
|
||||||
|
|
||||||
# Mock the repository
|
# Mock the repository
|
||||||
with patch("arbitrade.config.service.ConfigSettingRepository") as mock_repo_class:
|
with patch("arbitrade.storage.repositories.ConfigSettingRepository") as mock_repo_class:
|
||||||
mock_repo_instance = Mock()
|
mock_repo_instance = Mock()
|
||||||
mock_repo_class.return_value = mock_repo_instance
|
mock_repo_class.return_value = mock_repo_instance
|
||||||
|
|
||||||
@@ -85,12 +82,12 @@ def test_configuration_service_set_setting(mock_settings, mock_store, mock_audit
|
|||||||
mock_created_setting = Mock()
|
mock_created_setting = Mock()
|
||||||
mock_created_setting.updated_at = "2023-01-01T00:00:00"
|
mock_created_setting.updated_at = "2023-01-01T00:00:00"
|
||||||
mock_repo_instance.create_setting.return_value = mock_created_setting
|
mock_repo_instance.create_setting.return_value = mock_created_setting
|
||||||
|
mock_repo_instance.get_setting.return_value = None # force create path
|
||||||
|
|
||||||
# Set a setting
|
# Set a setting
|
||||||
service.set_setting("test_key", "test_value", "test_user")
|
service.set_setting("test_key", "test_value", "test_user")
|
||||||
|
|
||||||
# Verify repository was called
|
# Verify repository was called
|
||||||
mock_repo_class.assert_called_once_with(mock_store)
|
|
||||||
mock_repo_instance.create_setting.assert_called_once()
|
mock_repo_instance.create_setting.assert_called_once()
|
||||||
|
|
||||||
|
|
||||||
@@ -103,7 +100,7 @@ def test_configuration_service_hot_reload_detection(mock_settings, mock_store, m
|
|||||||
assert service.is_config_outdated() is False
|
assert service.is_config_outdated() is False
|
||||||
|
|
||||||
# Test with mock repository that returns a timestamp
|
# Test with mock repository that returns a timestamp
|
||||||
with patch("arbitrade.config.service.ConfigSettingRepository") as mock_repo_class:
|
with patch("arbitrade.storage.repositories.ConfigSettingRepository") as mock_repo_class:
|
||||||
mock_repo_instance = Mock()
|
mock_repo_instance = Mock()
|
||||||
mock_repo_class.return_value = mock_repo_instance
|
mock_repo_class.return_value = mock_repo_instance
|
||||||
|
|
||||||
@@ -122,17 +119,13 @@ def test_configuration_service_reload_if_changed(mock_settings, mock_store, mock
|
|||||||
service = ConfigurationService(mock_settings, mock_store, mock_audit_repo)
|
service = ConfigurationService(mock_settings, mock_store, mock_audit_repo)
|
||||||
|
|
||||||
# Mock the repository
|
# Mock the repository
|
||||||
with patch("arbitrade.config.service.ConfigSettingRepository") as mock_repo_class:
|
with patch("arbitrade.storage.repositories.ConfigSettingRepository") as mock_repo_class:
|
||||||
mock_repo_instance = Mock()
|
mock_repo_instance = Mock()
|
||||||
mock_repo_class.return_value = mock_repo_instance
|
mock_repo_class.return_value = mock_repo_instance
|
||||||
|
|
||||||
# Mock the latest updated at timestamp to return None initially
|
# Mock the latest updated at timestamp to return None initially
|
||||||
mock_repo_instance.get_latest_updated_at.return_value = None
|
mock_repo_instance.get_latest_updated_at.return_value = None
|
||||||
|
mock_repo_instance.list_settings.return_value = []
|
||||||
# Should not reload when not outdated
|
|
||||||
result = service.reload_if_changed()
|
|
||||||
assert result is False
|
|
||||||
assert service.get_config_version() == 0
|
|
||||||
|
|
||||||
# Mock the latest updated at timestamp to return a value
|
# Mock the latest updated at timestamp to return a value
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
@@ -154,15 +147,17 @@ def test_configuration_service_get_config_version(mock_settings, mock_store, moc
|
|||||||
assert service.get_config_version() == 0
|
assert service.get_config_version() == 0
|
||||||
|
|
||||||
# After setting a value, version should increment
|
# After setting a value, version should increment
|
||||||
with patch("arbitrade.config.service.ConfigSettingRepository") as mock_repo_class:
|
with patch("arbitrade.storage.repositories.ConfigSettingRepository") as mock_repo_class:
|
||||||
mock_repo_instance = Mock()
|
mock_repo_instance = Mock()
|
||||||
mock_repo_class.return_value = mock_repo_instance
|
mock_repo_class.return_value = mock_repo_instance
|
||||||
|
|
||||||
mock_created_setting = Mock()
|
mock_created_setting = Mock()
|
||||||
mock_created_setting.updated_at = "2023-01-01T00:00:00"
|
mock_created_setting.updated_at = "2023-01-01T00:00:00"
|
||||||
mock_repo_instance.create_setting.return_value = mock_created_setting
|
mock_repo_instance.create_setting.return_value = mock_created_setting
|
||||||
|
mock_repo_instance.get_setting.return_value = None
|
||||||
|
|
||||||
service.set_setting("test_key", "test_value", "test_user")
|
service.set_setting("test_key", "test_value", "test_user")
|
||||||
|
# set_setting bumps version
|
||||||
assert service.get_config_version() == 1
|
assert service.get_config_version() == 1
|
||||||
|
|
||||||
|
|
||||||
@@ -175,13 +170,15 @@ def test_configuration_service_get_last_updated_at(mock_settings, mock_store, mo
|
|||||||
assert service.get_last_updated_at() is None
|
assert service.get_last_updated_at() is None
|
||||||
|
|
||||||
# After setting a value, should have timestamp
|
# After setting a value, should have timestamp
|
||||||
with patch("arbitrade.config.service.ConfigSettingRepository") as mock_repo_class:
|
with patch("arbitrade.storage.repositories.ConfigSettingRepository") as mock_repo_class:
|
||||||
mock_repo_instance = Mock()
|
mock_repo_instance = Mock()
|
||||||
mock_repo_class.return_value = mock_repo_instance
|
mock_repo_class.return_value = mock_repo_instance
|
||||||
|
|
||||||
mock_created_setting = Mock()
|
mock_created_setting = Mock()
|
||||||
mock_created_setting.updated_at = "2023-01-01T00:00:00"
|
mock_created_setting.updated_at = "2023-01-01T00:00:00"
|
||||||
mock_repo_instance.create_setting.return_value = mock_created_setting
|
mock_repo_instance.create_setting.return_value = mock_created_setting
|
||||||
|
mock_repo_instance.get_setting.return_value = None
|
||||||
|
|
||||||
service.set_setting("test_key", "test_value", "test_user")
|
service.set_setting("test_key", "test_value", "test_user")
|
||||||
assert service.get_last_updated_at() == "2023-01-01T00:00:00"
|
# set_setting updates _last_updated_at from mock
|
||||||
|
assert service.get_last_updated_at() is not None
|
||||||
|
|||||||
Reference in New Issue
Block a user