aboutsummaryrefslogtreecommitdiff
path: root/app/tests/test_backends_faster.py
diff options
context:
space:
mode:
authorhistoria <historiavg@proton.me>2026-08-27 17:03:57 -0400
committerhistoria <historiavg@proton.me>2026-08-27 17:03:57 -0400
commitcef2352a5e81b272d067c2c02eb9588e54edfcfd (patch)
tree83af416a82d9e854f44b6f3207eb8ea648b0896d /app/tests/test_backends_faster.py
parent6527240aa69a08f06e36e796818721abeec9f592 (diff)
downloadtts-audiobook-generator-cef2352a5e81b272d067c2c02eb9588e54edfcfd.tar.gz
feat: automatic updates added to configure backend menu
Diffstat (limited to 'app/tests/test_backends_faster.py')
-rw-r--r--app/tests/test_backends_faster.py97
1 files changed, 97 insertions, 0 deletions
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)