admin: add backup/restore flow and structured request logging
This commit is contained in:
@@ -129,3 +129,29 @@ def test_login_rate_limit_lockout(client: TestClient):
|
||||
assert resp.status_code == 401
|
||||
locked = client.post("/api/login", json={"username": "admin", "password": "wrong-password"})
|
||||
assert locked.status_code == 429
|
||||
|
||||
|
||||
def test_backup_restore_dry_run_and_apply(client: TestClient):
|
||||
client.post("/api/setup", json={"username": "admin", "password": "123456789012"})
|
||||
client.post("/api/login", json={"username": "admin", "password": "123456789012"})
|
||||
client.post(
|
||||
"/api/links",
|
||||
data={
|
||||
"name": "Sonarr",
|
||||
"url": "https://sonarr.example.com",
|
||||
"description": "TV",
|
||||
"category": "Arr",
|
||||
"enabled": "true",
|
||||
},
|
||||
)
|
||||
backup_resp = client.get("/api/admin/backup")
|
||||
assert backup_resp.status_code == 200
|
||||
backup = backup_resp.json()
|
||||
assert isinstance(backup.get("users"), list)
|
||||
assert isinstance(backup.get("links"), list)
|
||||
dry = client.post("/api/admin/restore?dry_run=true", json={"data": backup, "confirm": False})
|
||||
assert dry.status_code == 200
|
||||
assert dry.json()["dry_run"] is True
|
||||
apply_resp = client.post("/api/admin/restore?dry_run=false", json={"data": backup, "confirm": True})
|
||||
assert apply_resp.status_code == 200
|
||||
assert apply_resp.json()["ok"] is True
|
||||
|
||||
Reference in New Issue
Block a user