fix(ui): reflect update availability and config changes; expand mobile player metadata
ci / api / api (push) Successful in 50s
ci / contract / contract (сгенерированный код совпадает с openapi.yaml) (push) Successful in 1m0s
ci / db / db (push) Successful in 58s
ci / mobile / mobile (Metro-бандл Android) (push) Successful in 1m27s
ci / docker / docker (образы собираются — их сервер собирает сам при обновлении) (push) Successful in 1m39s
ci / ts / ts (packages + web) (push) Successful in 2m40s
ci / api / api (push) Successful in 50s
ci / contract / contract (сгенерированный код совпадает с openapi.yaml) (push) Successful in 1m0s
ci / db / db (push) Successful in 58s
ci / mobile / mobile (Metro-бандл Android) (push) Successful in 1m27s
ci / docker / docker (образы собираются — их сервер собирает сам при обновлении) (push) Successful in 1m39s
ci / ts / ts (packages + web) (push) Successful in 2m40s
This commit is contained in:
1 parent
bc55528afd
commit
a6c9fd8a00
30 files changed
+833
-395
No files matched your search
@@ -33,8 +33,65 @@ class AgentTests(unittest.TestCase):
|
||||
(self.deploy / "config.local").write_text("", encoding="utf-8")
|
||||
(self.deploy / ".env").write_text("LOG_LEVEL=warn\nGITEA_TOKEN=top-secret\n", encoding="utf-8")
|
||||
self.agent = Agent(self.deploy, self.mailbox, self.private)
|
||||
self.running_commit = "0" * 40
|
||||
self.agent.installed_commit = lambda body: body.get("_running_commit", self.running_commit)
|
||||
self.agent.save("sources.json", [{"id": "origin", "name": "origin", "url": "https://example.org/o/pipu.git"}])
|
||||
|
||||
def test_unchanged_configuration_needs_no_restart_even_without_saved_baseline(self):
|
||||
self.assertFalse(self.agent.config()["restart_required"])
|
||||
with patch.object(self.agent, "command", return_value=""):
|
||||
result = self.agent.save_config({"revision": self.agent.revision(), "values": {"LOG_LEVEL": "debug"}})
|
||||
self.assertFalse(result["restart_required"], "LOG_LEVEL is overridden by .env")
|
||||
|
||||
def test_returning_to_applied_values_removes_pending_restart(self):
|
||||
self.assertFalse(self.agent.config()["restart_required"])
|
||||
with patch.object(self.agent, "command", return_value=""):
|
||||
changed = self.agent.save_config({"revision": self.agent.revision(), "values": {"TRAIN_HOUR": "6"}})
|
||||
self.assertTrue(changed["restart_required"])
|
||||
restored = self.agent.save_config({"revision": changed["revision"], "values": {"TRAIN_HOUR": None}})
|
||||
self.assertFalse(restored["restart_required"])
|
||||
|
||||
def test_explicit_default_value_does_not_require_a_restart(self):
|
||||
self.assertFalse(self.agent.config()["restart_required"])
|
||||
with patch.object(self.agent, "command", return_value=""):
|
||||
result = self.agent.save_config({"revision": self.agent.revision(), "values": {"TRAIN_HOUR": "3"}})
|
||||
self.assertFalse(result["restart_required"])
|
||||
|
||||
def test_update_check_and_start_both_reject_installed_main_commit(self):
|
||||
refs = {"refs/heads/main": self.running_commit}
|
||||
body = {"source_id": "origin", "channel": "main"}
|
||||
with patch.object(self.agent, "refs", return_value=refs), patch.object(self.agent, "start_job") as start:
|
||||
self.assertEqual("current", self.agent.handle("updates.get", body)["update_state"])
|
||||
with self.assertRaises(ManagementError) as error:
|
||||
self.agent.handle("updates.start", body)
|
||||
self.assertEqual("management.already_installed", error.exception.code)
|
||||
start.assert_not_called()
|
||||
|
||||
def test_check_distinguishes_missing_selection_and_changed_target(self):
|
||||
with patch.object(self.agent, "refs", return_value={"refs/heads/main": "a" * 40}), patch.object(self.agent, "start_job") as start:
|
||||
self.assertEqual("select_version", self.agent.handle("updates.get", {"channel": "version"})["update_state"])
|
||||
with self.assertRaises(ManagementError) as error:
|
||||
self.agent.handle("updates.start", {"channel": "main", "expected_commit": "b" * 40})
|
||||
self.assertEqual("management.target_changed", error.exception.code)
|
||||
start.assert_not_called()
|
||||
|
||||
def test_unknown_installed_commit_and_older_release_cannot_be_installed(self):
|
||||
with patch.object(self.agent, "refs", return_value={"refs/tags/v1.8.0": "a" * 40}), patch.object(self.agent, "start_job") as start:
|
||||
for body, state in [({"_running_commit": ""}, "unknown"), ({"_running_version": "1.9.0-1-gbc55528"}, "ahead")]:
|
||||
self.assertEqual(state, self.agent.handle("updates.get", body)["update_state"])
|
||||
with self.assertRaises(ManagementError):
|
||||
self.agent.handle("updates.start", body)
|
||||
start.assert_not_called()
|
||||
|
||||
def test_installed_identity_uses_running_build_and_resolves_legacy_describe(self):
|
||||
with patch.object(self.agent, "command", return_value="a" * 40) as command:
|
||||
self.assertEqual("b" * 40, Agent.installed_commit(self.agent, {"_running_commit": "b" * 40}))
|
||||
command.assert_not_called()
|
||||
self.assertEqual("a" * 40, Agent.installed_commit(self.agent, {"_running_version": "1.9.0-1-gbc55528"}))
|
||||
self.assertEqual("bc55528^{commit}", command.call_args.args[0][-1])
|
||||
self.assertEqual("a" * 40, Agent.installed_commit(self.agent, {"_running_version": "main-bc55528"}))
|
||||
self.assertEqual("", Agent.installed_commit(self.agent, {"_running_version": "0.0.0-dev"}))
|
||||
|
||||
def test_env_priority_and_secrets_never_returned(self):
|
||||
(self.deploy / "config.local").write_text("LOG_LEVEL=debug\nTRAIN_HOUR=5\n", encoding="utf-8")
|
||||
config = self.agent.config()
|
||||
|
||||
Reference in new issue
Block a user