Files
embycovers/tests/test_self_update.py
T
2026-06-08 21:58:16 +12:00

73 lines
2.5 KiB
Python

from services import self_update
def test_is_local_client_accepts_private_and_loopback_addresses():
assert self_update.is_local_client("127.0.0.1")
assert self_update.is_local_client("10.0.0.124")
assert self_update.is_local_client("192.168.1.20")
assert self_update.is_local_client("::1")
assert self_update.is_local_client("::ffff:10.0.0.124")
def test_is_local_client_rejects_public_and_empty_hosts():
assert not self_update.is_local_client("")
assert not self_update.is_local_client(None)
assert not self_update.is_local_client("8.8.8.8")
assert not self_update.is_local_client("example.com")
def test_status_payload_reports_missing_configuration(tmp_path, monkeypatch):
monkeypatch.setattr(self_update, "is_paramiko_available", lambda: True)
status = self_update.status_payload(
{
"deploy_nas_host": "",
"deploy_nas_user": "",
"deploy_nas_password": "",
"deploy_remote_app_dir": "",
},
"10.0.0.124",
)
assert status["allowed"] is True
assert status["configured"] is False
assert status["available"] is False
assert status["transport"] == "paramiko"
assert status["transport_ready"] is True
assert "Set a NAS host and NAS user first." in (status["reason"] or "")
def test_status_payload_available_when_local_and_configured(monkeypatch):
monkeypatch.setattr(self_update, "is_paramiko_available", lambda: True)
status = self_update.status_payload(
{
"deploy_nas_host": "MATT-NAS",
"deploy_nas_user": "ssh",
"deploy_nas_password": "secret",
"deploy_remote_app_dir": "/share/Docker/homelabtoolkit",
},
"10.0.0.124",
)
assert status["allowed"] is True
assert status["configured"] is True
assert status["transport"] == "paramiko"
assert status["transport_ready"] is True
assert status["password_configured"] is True
assert status["available"] is True
def test_render_remote_compose_uses_deploy_settings():
rendered = self_update.render_remote_compose(
{
"deploy_remote_app_dir": "/share/Docker/custom-toolkit",
"deploy_music_host_path": "/share/Movies/Music",
}
)
assert "/share/Docker/custom-toolkit/output:/app/output" in rendered
assert "/share/Docker/custom-toolkit/cache:/app/cache" in rendered
assert "/share/Movies/Music:/music" in rendered
assert "/share/Music:/music" not in rendered