feat(main): main
This commit is contained in:
82
api/tests/test_backups.py
Normal file
82
api/tests/test_backups.py
Normal file
@@ -0,0 +1,82 @@
|
||||
import json
|
||||
from pathlib import Path
|
||||
|
||||
import pytest
|
||||
|
||||
from core.models import AppUser, BackupSchedule, Library, MediaSource, MediaItem
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def admin_user(db):
|
||||
return AppUser.objects.create_superuser("backup_admin", "backup@example.com", "secret-pass-123")
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_backup_schedule_requires_admin(client):
|
||||
response = client.get("/api/backups/settings")
|
||||
assert response.status_code == 401
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_backup_schedule_get_and_update(client, admin_user):
|
||||
client.login(username="backup_admin", password="secret-pass-123")
|
||||
|
||||
response = client.get("/api/backups/settings")
|
||||
assert response.status_code == 200
|
||||
|
||||
payload = {
|
||||
"enabled": True,
|
||||
"frequency": "weekly",
|
||||
"minute": 30,
|
||||
"hour": 3,
|
||||
"day_of_week": 6,
|
||||
"day_of_month": 1,
|
||||
"retention_count": 5,
|
||||
}
|
||||
update = client.put(
|
||||
"/api/backups/settings",
|
||||
data=json.dumps(payload),
|
||||
content_type="application/json",
|
||||
)
|
||||
assert update.status_code == 200
|
||||
|
||||
schedule = BackupSchedule.get_solo()
|
||||
assert schedule.enabled is True
|
||||
assert schedule.frequency == "weekly"
|
||||
assert schedule.retention_count == 5
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_backup_now_writes_json_and_strips_cached_paths(client, admin_user, settings, tmp_path):
|
||||
settings.BACKUP_ROOT = str(tmp_path)
|
||||
client.login(username="backup_admin", password="secret-pass-123")
|
||||
|
||||
library = Library.objects.create(owner_user=admin_user, name="Backup Lib")
|
||||
source = MediaSource.objects.create(
|
||||
library=library,
|
||||
name="YT",
|
||||
source_type="youtube_playlist",
|
||||
uri="https://example.com/list",
|
||||
)
|
||||
MediaItem.objects.create(
|
||||
media_source=source,
|
||||
title="Cached Item",
|
||||
item_kind="movie",
|
||||
runtime_seconds=60,
|
||||
file_path="https://youtube.com/watch?v=abc",
|
||||
cached_file_path="/tmp/pytv_cache/abc.mp4",
|
||||
)
|
||||
|
||||
resp = client.post("/api/backups/run")
|
||||
assert resp.status_code == 200
|
||||
filename = resp.json()["filename"]
|
||||
|
||||
backup_path = Path(settings.BACKUP_ROOT) / filename
|
||||
assert backup_path.exists()
|
||||
|
||||
payload = json.loads(backup_path.read_text(encoding="utf-8"))
|
||||
media_entries = [x for x in payload["items"] if x["model"] == "core.mediaitem"]
|
||||
assert media_entries
|
||||
assert media_entries[0]["fields"]["cached_file_path"] is None
|
||||
|
||||
|
||||
Reference in New Issue
Block a user