Add multilingual STT support and config UI/runtime updates
This commit is contained in:
parent
ed950cb7c4
commit
4a69c3d333
26 changed files with 2207 additions and 465 deletions
|
|
@ -13,8 +13,8 @@ if str(SRC) not in sys.path:
|
|||
|
||||
import aman
|
||||
from config import Config
|
||||
from config_ui import ConfigUiResult
|
||||
from diagnostics import DiagnosticCheck, DiagnosticReport
|
||||
from onboarding_ui import OnboardingResult
|
||||
|
||||
|
||||
class _FakeDesktop:
|
||||
|
|
@ -81,13 +81,13 @@ class _FakeDaemon:
|
|||
class _RetrySetupDesktop(_FakeDesktop):
|
||||
def __init__(self):
|
||||
super().__init__()
|
||||
self.setup_invocations = 0
|
||||
self.settings_invocations = 0
|
||||
|
||||
def run_tray(self, _state_getter, on_quit, **kwargs):
|
||||
setup_cb = kwargs.get("on_setup_wizard")
|
||||
if setup_cb is not None and self.setup_invocations == 0:
|
||||
self.setup_invocations += 1
|
||||
setup_cb()
|
||||
settings_cb = kwargs.get("on_open_settings")
|
||||
if settings_cb is not None and self.settings_invocations == 0:
|
||||
self.settings_invocations += 1
|
||||
settings_cb()
|
||||
return
|
||||
on_quit()
|
||||
|
||||
|
|
@ -105,6 +105,20 @@ class AmanCliTests(unittest.TestCase):
|
|||
self.assertEqual(args.command, "doctor")
|
||||
self.assertTrue(args.json)
|
||||
|
||||
def test_parse_cli_args_self_check_command(self):
|
||||
args = aman._parse_cli_args(["self-check", "--json"])
|
||||
|
||||
self.assertEqual(args.command, "self-check")
|
||||
self.assertTrue(args.json)
|
||||
|
||||
def test_version_command_prints_version(self):
|
||||
out = io.StringIO()
|
||||
args = aman._parse_cli_args(["version"])
|
||||
with patch("aman._app_version", return_value="1.2.3"), patch("sys.stdout", out):
|
||||
exit_code = aman._version_command(args)
|
||||
self.assertEqual(exit_code, 0)
|
||||
self.assertEqual(out.getvalue().strip(), "1.2.3")
|
||||
|
||||
def test_doctor_command_json_output_and_exit_code(self):
|
||||
report = DiagnosticReport(
|
||||
checks=[DiagnosticCheck(id="config.load", ok=True, message="ok", hint="")]
|
||||
|
|
@ -163,7 +177,7 @@ class AmanCliTests(unittest.TestCase):
|
|||
payload = json.loads(path.read_text(encoding="utf-8"))
|
||||
self.assertEqual(payload["daemon"]["hotkey"], "Cmd+m")
|
||||
|
||||
def test_run_command_missing_config_uses_onboarding_and_writes_file(self):
|
||||
def test_run_command_missing_config_uses_settings_ui_and_writes_file(self):
|
||||
with tempfile.TemporaryDirectory() as td:
|
||||
path = Path(td) / "config.json"
|
||||
args = aman._parse_cli_args(["run", "--config", str(path)])
|
||||
|
|
@ -173,15 +187,15 @@ class AmanCliTests(unittest.TestCase):
|
|||
with patch("aman._lock_single_instance", return_value=object()), patch(
|
||||
"aman.get_desktop_adapter", return_value=desktop
|
||||
), patch(
|
||||
"aman.run_onboarding_wizard",
|
||||
return_value=OnboardingResult(completed=True, config=onboard_cfg, aborted_reason=None),
|
||||
) as onboarding_mock, patch("aman.Daemon", _FakeDaemon):
|
||||
"aman.run_config_ui",
|
||||
return_value=ConfigUiResult(saved=True, config=onboard_cfg, closed_reason="saved"),
|
||||
) as config_ui_mock, patch("aman.Daemon", _FakeDaemon):
|
||||
exit_code = aman._run_command(args)
|
||||
|
||||
self.assertEqual(exit_code, 0)
|
||||
self.assertTrue(path.exists())
|
||||
self.assertEqual(desktop.hotkey, "Super+m")
|
||||
onboarding_mock.assert_called_once()
|
||||
config_ui_mock.assert_called_once()
|
||||
|
||||
def test_run_command_missing_config_cancel_returns_without_starting_daemon(self):
|
||||
with tempfile.TemporaryDirectory() as td:
|
||||
|
|
@ -191,8 +205,8 @@ class AmanCliTests(unittest.TestCase):
|
|||
with patch("aman._lock_single_instance", return_value=object()), patch(
|
||||
"aman.get_desktop_adapter", return_value=desktop
|
||||
), patch(
|
||||
"aman.run_onboarding_wizard",
|
||||
return_value=OnboardingResult(completed=False, config=None, aborted_reason="cancelled"),
|
||||
"aman.run_config_ui",
|
||||
return_value=ConfigUiResult(saved=False, config=None, closed_reason="cancelled"),
|
||||
), patch("aman.Daemon") as daemon_cls:
|
||||
exit_code = aman._run_command(args)
|
||||
|
||||
|
|
@ -200,27 +214,27 @@ class AmanCliTests(unittest.TestCase):
|
|||
self.assertFalse(path.exists())
|
||||
daemon_cls.assert_not_called()
|
||||
|
||||
def test_run_command_missing_config_cancel_then_retry_setup(self):
|
||||
def test_run_command_missing_config_cancel_then_retry_settings(self):
|
||||
with tempfile.TemporaryDirectory() as td:
|
||||
path = Path(td) / "config.json"
|
||||
args = aman._parse_cli_args(["run", "--config", str(path)])
|
||||
desktop = _RetrySetupDesktop()
|
||||
onboard_cfg = Config()
|
||||
onboarding_results = [
|
||||
OnboardingResult(completed=False, config=None, aborted_reason="cancelled"),
|
||||
OnboardingResult(completed=True, config=onboard_cfg, aborted_reason=None),
|
||||
config_ui_results = [
|
||||
ConfigUiResult(saved=False, config=None, closed_reason="cancelled"),
|
||||
ConfigUiResult(saved=True, config=onboard_cfg, closed_reason="saved"),
|
||||
]
|
||||
with patch("aman._lock_single_instance", return_value=object()), patch(
|
||||
"aman.get_desktop_adapter", return_value=desktop
|
||||
), patch(
|
||||
"aman.run_onboarding_wizard",
|
||||
side_effect=onboarding_results,
|
||||
"aman.run_config_ui",
|
||||
side_effect=config_ui_results,
|
||||
), patch("aman.Daemon", _FakeDaemon):
|
||||
exit_code = aman._run_command(args)
|
||||
|
||||
self.assertEqual(exit_code, 0)
|
||||
self.assertTrue(path.exists())
|
||||
self.assertEqual(desktop.setup_invocations, 1)
|
||||
self.assertEqual(desktop.settings_invocations, 1)
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue