import importlib.util from pathlib import Path import unittest from unittest.mock import call, patch spec = importlib.util.spec_from_file_location("maa_script", Path(__file__).resolve().parents[1] / "ArknightsMaaConfig/maa.py") maa = importlib.util.module_from_spec(spec) spec.loader.exec_module(maa) class MaaTest(unittest.TestCase): def test_update_uses_proxy_but_game_commands_do_not(self): with patch.object(maa.os, "environ", {"http_proxy": "http://proxy:7890"}), \ patch.object(maa, "DIRECT", {"MAA_LOG": "info"}), \ patch.object(maa.subprocess, "run") as run: run.return_value.returncode = 0 maa.command(["maa", "update"], proxy=True) self.assertEqual(run.call_args.kwargs["env"]["http_proxy"], "http://proxy:7890") maa.command(["maa", "run", "startup"]) self.assertNotIn("http_proxy", run.call_args.kwargs["env"]) def test_failed_task_does_not_skip_other_tasks_or_shutdown(self): with patch.object(maa, "command", return_value=0) as command, \ patch.object(maa, "wait_android", return_value=True), \ patch.object(maa, "retry", return_value=True), \ patch.object(maa, "task", side_effect=[True, False, True, True, True, True]) as task: self.assertEqual(maa.main(), 1) self.assertEqual(task.call_args_list, [call(name) for name in maa.TASKS]) self.assertEqual(command.call_args.args[0], ["docker", "stop", maa.REDROID]) def test_task_failure_reopens_game_then_retries(self): with patch.object(maa, "retry", side_effect=[False, True, True, True]) as retry: self.assertTrue(maa.task("fight")) self.assertEqual(retry.call_args_list, [ call(maa.maa("run", "fight")), call(maa.maa("closedown")), call(maa.maa("run", "startup")), call(maa.maa("run", "fight")), ]) if __name__ == "__main__": unittest.main()