feat: strengthen backup and mobile workflows
ci / gitleaks (push) Successful in 1m19s
ci / docker (push) Successful in 5m48s

This commit is contained in:
2026-09-16 21:12:52 +08:00
parent 6f38190c92
commit 6c234d7d82
64 changed files with 5059 additions and 635 deletions
+5 -3
View File
@@ -121,7 +121,7 @@ def test_export_and_restore_preserve_task_recurrence(client):
exported = client.get("/api/v1/export").json()
assert exported["recurrences"][0]["task_id"] == task["id"]
restored = client.post("/api/v1/restore?mode=replace", json=exported)
restored = client.post("/api/v1/restore?mode=merge", json=exported)
assert restored.status_code == 200
restored_task = client.get("/api/v1/tasks", params={"q": "每周整理"}).json()["items"][0]
recurrence = client.get(f"/api/v1/tasks/{restored_task['id']}/recurrence").json()
@@ -599,9 +599,11 @@ def test_ticktick_preview_import_dedupe_and_json_restore(client):
export = client.get("/api/v1/export").json()
assert export["version"] == 1 and export["tasks"][0]["external_id"] == "ext-1"
client.delete(f"/api/v1/tasks/{export['tasks'][0]['id']}")
restored = client.post("/api/v1/restore", params={"mode": "replace"}, json=export)
restored = client.post("/api/v1/restore", params={"mode": "merge"}, json=export)
assert restored.status_code == 200
assert len(client.get("/api/v1/tasks").json()["items"]) == 1
# Legacy merge is non-destructive and does not resurrect a soft-deleted
# task whose external ID already exists.
assert len(client.get("/api/v1/tasks").json()["items"]) == 0
assert client.post("/api/v1/restore", json={"version": 999}).status_code == 422