from __future__ import annotations import json import unittest from unittest.mock import Mock, patch from app.services.runtime_settings_service import update_runtime_settings class RuntimeSettingsServiceTests(unittest.TestCase): @patch("app.services.runtime_settings_service.get_redis") @patch("app.services.runtime_settings_service.write_runtime_json") @patch("app.services.runtime_settings_service.get_runtime_settings") def test_update_runtime_settings_publishes_runtime_settings_refresh( self, mock_get_runtime_settings, mock_write_runtime_json, mock_get_redis, ) -> None: redis_client = Mock() mock_get_redis.return_value = redis_client mock_get_runtime_settings.return_value = { "worker_mode": "linux-systemd", "worker_service_name": "domaincheck-worker", "api_service_name": "domaincheck-api", "sync_agent_service_name": "domaincheck-sync-agent", "worker_log_sync_enabled": False, "worker_log_sync_mode": "key", "control_node_autoresume_enabled": False, "claim_recent_jobs_first": False, "claim_recent_jobs_limit": 8, "claim_recent_jobs_window_hours": 24, "claim_batch_floor": 0, "claim_batch_ceil": 0, "submit_backlog_floor": 0, "submit_backlog_ceil": 0, "dispatch_cap_multiplier": 1, "pending_buffer_cap_multiplier": 1, } updated = update_runtime_settings( { "worker_log_sync_enabled": True, "worker_log_sync_mode": "full", "control_node_autoresume_enabled": True, "claim_recent_jobs_first": True, "claim_recent_jobs_limit": 6, "claim_recent_jobs_window_hours": 72, "claim_batch_floor": 200, "claim_batch_ceil": 800, "submit_backlog_floor": 500, "submit_backlog_ceil": 1500, "dispatch_cap_multiplier": 2, "pending_buffer_cap_multiplier": 2, } ) mock_write_runtime_json.assert_called_once_with("runtime_settings.json", updated) redis_client.set.assert_called_once() redis_key, serialized = redis_client.set.call_args.args self.assertEqual("domain_tool:runtime_settings", redis_key) self.assertEqual(updated, json.loads(serialized)) self.assertTrue(updated["control_node_autoresume_enabled"]) self.assertTrue(updated["claim_recent_jobs_first"]) self.assertEqual(6, updated["claim_recent_jobs_limit"]) self.assertEqual(72, updated["claim_recent_jobs_window_hours"]) self.assertEqual(200, updated["claim_batch_floor"]) self.assertEqual(800, updated["claim_batch_ceil"]) self.assertEqual(500, updated["submit_backlog_floor"]) self.assertEqual(1500, updated["submit_backlog_ceil"]) self.assertEqual(2, updated["dispatch_cap_multiplier"]) self.assertEqual(2, updated["pending_buffer_cap_multiplier"]) redis_client.publish.assert_called_once_with("domain_tool:config_update", "runtime_settings") if __name__ == "__main__": unittest.main()