42 lines
1.9 KiB
Python
42 lines
1.9 KiB
Python
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()
|