113 lines
3.3 KiB
Python
113 lines
3.3 KiB
Python
from __future__ import annotations
|
|
|
|
import pytest
|
|
from django.contrib.auth.models import Group
|
|
from django.urls import reverse
|
|
|
|
|
|
@pytest.fixture
|
|
def cid_manager_user(db, django_user_model):
|
|
user = django_user_model.objects.create_user(
|
|
username="cid_manager",
|
|
email="cid_manager@example.com",
|
|
password="password123",
|
|
)
|
|
group, _ = Group.objects.get_or_create(name="cid_user_manager")
|
|
user.groups.add(group)
|
|
return user
|
|
|
|
|
|
@pytest.mark.django_db
|
|
def test_media_cleanup_requires_login(client):
|
|
response = client.get(reverse("media_cleanup"))
|
|
assert response.status_code == 302
|
|
|
|
|
|
@pytest.mark.django_db
|
|
def test_media_cleanup_requires_manager_group(client, django_user_model):
|
|
user = django_user_model.objects.create_user(
|
|
username="regular_user",
|
|
email="regular@example.com",
|
|
password="password123",
|
|
)
|
|
client.force_login(user)
|
|
|
|
response = client.get(reverse("media_cleanup"))
|
|
assert response.status_code == 403
|
|
|
|
|
|
@pytest.mark.django_db
|
|
def test_media_cleanup_page_for_manager(client, cid_manager_user):
|
|
client.force_login(cid_manager_user)
|
|
|
|
response = client.get(reverse("media_cleanup"))
|
|
assert response.status_code == 200
|
|
assert b"Unused Media Cleanup" in response.content
|
|
assert b"Cleanup in progress" in response.content
|
|
|
|
|
|
@pytest.mark.django_db
|
|
def test_media_cleanup_preview_uses_dry_run(client, cid_manager_user, monkeypatch):
|
|
client.force_login(cid_manager_user)
|
|
|
|
captured = {}
|
|
|
|
def fake_call_command(name, **kwargs):
|
|
captured["name"] = name
|
|
captured["kwargs"] = kwargs
|
|
kwargs["stdout"].write("preview ok")
|
|
|
|
monkeypatch.setattr("rad.views.call_command", fake_call_command)
|
|
|
|
response = client.post(
|
|
reverse("media_cleanup"),
|
|
{
|
|
"action": "preview",
|
|
"minimum_file_age": "30",
|
|
"remove_empty_dirs": "on",
|
|
"exclude": "thumbnails/*\ncache/*",
|
|
},
|
|
HTTP_HX_REQUEST="true",
|
|
)
|
|
|
|
assert response.status_code == 200
|
|
assert captured["name"] == "cleanup_unused_media"
|
|
assert captured["kwargs"]["dry_run"] is True
|
|
assert captured["kwargs"]["no_input"] is True
|
|
assert captured["kwargs"]["interactive"] is False
|
|
assert captured["kwargs"]["minimum_file_age"] == 30
|
|
assert captured["kwargs"]["remove_empty_dirs"] is True
|
|
assert captured["kwargs"]["exclude"] == ["thumbnails/*", "cache/*"]
|
|
assert b"preview ok" in response.content
|
|
|
|
|
|
@pytest.mark.django_db
|
|
def test_media_cleanup_live_run_disables_dry_run(client, cid_manager_user, monkeypatch):
|
|
client.force_login(cid_manager_user)
|
|
|
|
captured = {}
|
|
|
|
def fake_call_command(name, **kwargs):
|
|
captured["name"] = name
|
|
captured["kwargs"] = kwargs
|
|
kwargs["stdout"].write("cleanup ok")
|
|
|
|
monkeypatch.setattr("rad.views.call_command", fake_call_command)
|
|
|
|
response = client.post(
|
|
reverse("media_cleanup"),
|
|
{
|
|
"action": "cleanup",
|
|
"minimum_file_age": "0",
|
|
},
|
|
HTTP_HX_REQUEST="true",
|
|
)
|
|
|
|
assert response.status_code == 200
|
|
assert captured["name"] == "cleanup_unused_media"
|
|
assert captured["kwargs"]["dry_run"] is False
|
|
assert captured["kwargs"]["interactive"] is False
|
|
assert b"cleanup ok" in response.content
|
|
assert b"Recovered space" in response.content
|
|
assert b"removed" in response.content
|