From cef2352a5e81b272d067c2c02eb9588e54edfcfd Mon Sep 17 00:00:00 2001 From: historia Date: Thu, 27 Aug 2026 17:03:57 -0400 Subject: feat: automatic updates added to configure backend menu --- app/tests/test_backends_faster.py | 97 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 97 insertions(+) (limited to 'app/tests/test_backends_faster.py') diff --git a/app/tests/test_backends_faster.py b/app/tests/test_backends_faster.py index 8f024bf..44f4907 100644 --- a/app/tests/test_backends_faster.py +++ b/app/tests/test_backends_faster.py @@ -470,3 +470,100 @@ class UninstallTests(unittest.TestCase): rc = make_voices.uninstall(cancel=cancel) self.assertEqual(rc, 130) self.assertTrue(checkout.exists()) + + +class UpdateTests(unittest.TestCase): + """update: stop the server, pip install -U, refresh the checkout.""" + + def test_pip_upgrade_and_checkout_update(self): + with patch.object(make_voices.servers, "pid_for", + return_value=1234), \ + patch.object(make_voices.servers, "stop") as mk_stop, \ + patch.object(make_voices.common, "pip_install", + return_value=0) as mk_pip, \ + patch.object(make_voices, "_is_cloned", + return_value=True), \ + patch.object(make_voices, "_checkout", + return_value=Path("/co")), \ + patch.object(make_voices.common, "git_update", + return_value=0) as mk_git: + rc = make_voices.update(emit="EMIT") + self.assertEqual(rc, 0) + mk_stop.assert_called_once_with("faster") + # The task view's emit is forwarded, the install is an upgrade, + # and the package lands in the faster backend's own venv. + mk_pip.assert_called_once_with([make_voices.FASTER_PIP_PKG], + emit="EMIT", cancel=None, + env_dir=make_voices.FASTER_ENV, + upgrade=True) + mk_git.assert_called_once_with(Path("/co"), emit="EMIT", cancel=None) + + def test_no_checkout_updates_the_package_only(self): + with patch.object(make_voices.servers, "pid_for", + return_value=None), \ + patch.object(make_voices.servers, "stop") as mk_stop, \ + patch.object(make_voices.common, "pip_install", + return_value=0) as mk_pip, \ + patch.object(make_voices, "_is_cloned", + return_value=False), \ + patch.object(make_voices.common, "git_update") as mk_git: + rc = make_voices.update() + self.assertEqual(rc, 0) + mk_stop.assert_not_called() + mk_git.assert_not_called() + mk_pip.assert_called_once() + + def test_cancel_before_pip_skips_everything_after_stopping(self): + cancel = threading.Event() + cancel.set() + with patch.object(make_voices.servers, "pid_for", + return_value=1234), \ + patch.object(make_voices.servers, "stop") as mk_stop, \ + patch.object(make_voices.common, "pip_install") as mk_pip: + rc = make_voices.update(cancel=cancel) + self.assertEqual(rc, 130) + mk_stop.assert_called_once_with("faster") + mk_pip.assert_not_called() + + def test_cancel_after_pip_skips_the_checkout(self): + cancel = threading.Event() + cancel.set() + with patch.object(make_voices.servers, "pid_for", + return_value=None), \ + patch.object(make_voices.common, "pip_install", + return_value=0), \ + patch.object(make_voices, "_is_cloned", + return_value=True), \ + patch.object(make_voices.common, "git_update") as mk_git: + rc = make_voices.update(cancel=cancel) + self.assertEqual(rc, 130) + mk_git.assert_not_called() + + def test_checkout_failure_propagates_after_a_successful_pip(self): + with patch.object(make_voices.servers, "pid_for", + return_value=None), \ + patch.object(make_voices.common, "pip_install", + return_value=0), \ + patch.object(make_voices, "_is_cloned", + return_value=True), \ + patch.object(make_voices, "_checkout", + return_value=Path("/co")), \ + patch.object(make_voices.common, "git_update", + return_value=3) as mk_git: + rc = make_voices.update() + self.assertEqual(rc, 3) + mk_git.assert_called_once() + + def test_pip_failure_still_updates_the_checkout(self): + with patch.object(make_voices.servers, "pid_for", + return_value=None), \ + patch.object(make_voices.common, "pip_install", + return_value=1), \ + patch.object(make_voices, "_is_cloned", + return_value=True), \ + patch.object(make_voices, "_checkout", + return_value=Path("/co")), \ + patch.object(make_voices.common, "git_update", + return_value=0): + rc = make_voices.update() + self.assertEqual(rc, 1) -- cgit v1.2.3