mirror of
https://github.com/rangermix/TwitchDropsMiner.git
synced 2026-05-26 07:08:04 +00:00
- Implemented 'Benefit Type' filtering (Item, Badge, etc.) in backend and settings UI. - Redesigned 'Wanted Drops Queue' as a card-based, masonry layout. - Added 'Game Groups' to Wanted Queue for better organization. - Added variable height support for Inventory cards. - Added proxy support and verification logic (from previous steps). - Added unit tests for new filters and UI logic.
59 lines
2.4 KiB
Python
59 lines
2.4 KiB
Python
import asyncio
|
|
import unittest
|
|
from unittest.mock import MagicMock, AsyncMock, patch
|
|
from src.web.app import SettingsUpdate
|
|
from src.web.managers.settings import SettingsManager
|
|
from src.config.settings import Settings
|
|
|
|
class TestSettingsAPI(unittest.IsolatedAsyncioTestCase):
|
|
def test_settings_update_model(self):
|
|
# Verify model accepts new fields
|
|
update_data = {
|
|
"inventory_filters": {"show_upcoming": True},
|
|
"mining_benefits": {"BADGE": True}
|
|
}
|
|
model = SettingsUpdate(**update_data)
|
|
self.assertEqual(model.inventory_filters, update_data["inventory_filters"])
|
|
self.assertEqual(model.mining_benefits, update_data["mining_benefits"])
|
|
|
|
async def test_settings_manager_networking(self):
|
|
# Mock dependencies
|
|
mock_broadcaster = AsyncMock()
|
|
mock_settings = MagicMock(spec=Settings)
|
|
# Configure mock to satisfy get_settings() calls
|
|
mock_settings.language = "en"
|
|
mock_settings.dark_mode = False
|
|
mock_settings.games_to_watch = []
|
|
mock_settings.proxy = "http://proxy"
|
|
mock_settings.connection_quality = 1
|
|
mock_settings.minimum_refresh_interval_minutes = 30
|
|
|
|
mock_console = MagicMock()
|
|
mock_callback = MagicMock()
|
|
|
|
manager = SettingsManager(mock_broadcaster, mock_settings, mock_console, on_change=mock_callback)
|
|
|
|
# 1. Update Inventory Filters (Should NOT trigger callback if not games/benefits)
|
|
inv_filters = {"show_upcoming": False}
|
|
manager.update_settings({"inventory_filters": inv_filters})
|
|
mock_callback.assert_not_called()
|
|
self.assertEqual(mock_settings.inventory_filters, inv_filters)
|
|
mock_console.print.assert_called_with("Setting changed: inventory_filters updated")
|
|
|
|
# 2. Update Mining Benefits (SHOULD trigger callback)
|
|
benefits = {"BADGE": False}
|
|
manager.update_settings({"mining_benefits": benefits})
|
|
mock_callback.assert_called_once()
|
|
self.assertEqual(mock_settings.mining_benefits, benefits)
|
|
mock_console.print.assert_called_with("Setting changed: mining_benefits = {'BADGE': False}")
|
|
mock_callback.reset_mock()
|
|
|
|
# 3. Update Games to Watch (SHOULD trigger callback)
|
|
games = ["Game 1"]
|
|
manager.update_settings({"games_to_watch": games})
|
|
mock_callback.assert_called_once()
|
|
|
|
|
|
if __name__ == '__main__':
|
|
unittest.main()
|