83 lines
2.6 KiB
Python
83 lines
2.6 KiB
Python
"""
|
|
Tests für /api/settings — Lesen und Schreiben der Verbindungseinstellungen.
|
|
"""
|
|
import pytest
|
|
import tempfile
|
|
import pathlib
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_settings_get_returns_200(client):
|
|
c, _ = client
|
|
resp = await c.get("/api/settings")
|
|
assert resp.status == 200
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_settings_get_schema(client):
|
|
c, _ = client
|
|
data = await (await c.get("/api/settings")).json()
|
|
for key in ("printer_ip", "mqtt_port", "username", "password", "device_id", "mode_id"):
|
|
assert key in data
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_settings_get_empty_when_unconfigured(client):
|
|
"""Frische Bridge ohne Zugangsdaten → printer_ip und device_id leer."""
|
|
c, _ = client
|
|
data = await (await c.get("/api/settings")).json()
|
|
assert data["printer_ip"] == ""
|
|
assert data["device_id"] == ""
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_settings_get_returns_configured_values(client_configured):
|
|
"""Bridge mit Zugangsdaten → Werte korrekt zurückgegeben."""
|
|
c, _ = client_configured
|
|
data = await (await c.get("/api/settings")).json()
|
|
assert data["printer_ip"] == "192.168.1.100"
|
|
assert data["device_id"] == "abc123deadbeef"
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_settings_post_writes_env(client):
|
|
"""POST /api/settings schreibt Werte in .env-Datei."""
|
|
c, bridge = client
|
|
|
|
with tempfile.TemporaryDirectory() as tmpdir:
|
|
env_path = pathlib.Path(tmpdir) / ".env"
|
|
env_path.write_text("")
|
|
bridge._find_env_path = lambda: env_path
|
|
|
|
resp = await c.post("/api/settings", json={
|
|
"printer_ip": "10.0.0.5",
|
|
"mqtt_port": 9883,
|
|
"username": "userABCD",
|
|
"password": "secret123",
|
|
"device_id": "deadbeef01234567",
|
|
"mode_id": "20030",
|
|
})
|
|
assert resp.status == 200
|
|
|
|
content = env_path.read_text()
|
|
assert "PRINTER_IP=10.0.0.5" in content
|
|
assert "MQTT_USERNAME=userABCD" in content
|
|
assert "DEVICE_ID=deadbeef01234567" in content
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_settings_post_preserves_existing_keys(client):
|
|
"""POST darf unbekannte Keys in .env nicht löschen (z.B. GITEA_TOKEN)."""
|
|
c, bridge = client
|
|
|
|
with tempfile.TemporaryDirectory() as tmpdir:
|
|
env_path = pathlib.Path(tmpdir) / ".env"
|
|
env_path.write_text("GITEA_TOKEN=mytoken\nPRINTER_IP=old\n")
|
|
bridge._find_env_path = lambda: env_path
|
|
|
|
await c.post("/api/settings", json={"printer_ip": "10.0.0.99"})
|
|
|
|
content = env_path.read_text()
|
|
assert "GITEA_TOKEN=mytoken" in content
|
|
assert "PRINTER_IP=10.0.0.99" in content
|