Some checks failed
CI/CD Pipeline / Code Quality Checks (push) Failing after 3m10s
CI/CD Pipeline / Run Tests (push) Successful in 3m35s
CI/CD Pipeline / Telegram Notify Success (push) Has been skipped
CI/CD Pipeline / Code Quality Checks (pull_request) Failing after 2m26s
CI/CD Pipeline / Run Tests (pull_request) Successful in 2m46s
CI/CD Pipeline / Telegram Notify Success (pull_request) Has been skipped
97 lines
3.5 KiB
Python
97 lines
3.5 KiB
Python
"""Tests for core admin configurations."""
|
|
|
|
from datetime import timedelta
|
|
from unittest.mock import patch
|
|
|
|
from apps.core.admin import BackgroundJobAdmin
|
|
from apps.core.models import BackgroundJob
|
|
from django.contrib.admin.sites import AdminSite
|
|
from django.contrib.messages.storage.fallback import FallbackStorage
|
|
from django.test import RequestFactory, TestCase
|
|
from django.utils import timezone
|
|
|
|
from tests.apps.user.factories import UserFactory
|
|
from tests.utils.fixtures import fake
|
|
|
|
|
|
class CoreAdminTest(TestCase):
|
|
def setUp(self):
|
|
self.site = AdminSite()
|
|
self.admin = BackgroundJobAdmin(BackgroundJob, self.site)
|
|
self.user = UserFactory.create_superuser()
|
|
self.factory = RequestFactory()
|
|
|
|
def _request(self):
|
|
request = self.factory.get("/")
|
|
request.user = self.user
|
|
request.session = {}
|
|
request._messages = FallbackStorage(request)
|
|
return request
|
|
|
|
def test_task_name_short(self):
|
|
job = BackgroundJob.objects.create(
|
|
task_id=fake.uuid4(),
|
|
task_name="apps.parsers.tasks.parse_industrial_production",
|
|
)
|
|
self.assertEqual(self.admin.task_name_short(job), "parse_industrial_production")
|
|
job_short = BackgroundJob.objects.create(
|
|
task_id=fake.uuid4(),
|
|
task_name="short.task",
|
|
)
|
|
self.assertEqual(self.admin.task_name_short(job_short), "short.task")
|
|
|
|
def test_status_badge_and_progress(self):
|
|
job = BackgroundJob.objects.create(
|
|
task_id=fake.uuid4(),
|
|
task_name="test.task",
|
|
status="success",
|
|
progress=100,
|
|
)
|
|
badge = self.admin.status_badge(job)
|
|
bar = self.admin.progress_bar(job)
|
|
self.assertIn("span", str(badge))
|
|
self.assertIn("100%", str(bar))
|
|
|
|
def test_duration_display(self):
|
|
job = BackgroundJob.objects.create(
|
|
task_id=fake.uuid4(),
|
|
task_name="test.task",
|
|
)
|
|
self.assertEqual(self.admin.duration_display(job), "-")
|
|
job.started_at = timezone.now()
|
|
job.completed_at = job.started_at + timedelta(seconds=30)
|
|
job.save(update_fields=["started_at", "completed_at"])
|
|
self.assertIn("сек", self.admin.duration_display(job))
|
|
job.completed_at = job.started_at + timedelta(seconds=90)
|
|
job.save(update_fields=["started_at", "completed_at"])
|
|
self.assertIn("мин", self.admin.duration_display(job))
|
|
|
|
def test_permissions(self):
|
|
request = self._request()
|
|
self.assertFalse(self.admin.has_add_permission(request))
|
|
self.assertFalse(self.admin.has_change_permission(request))
|
|
|
|
def test_revoke_jobs_action_no_active(self):
|
|
BackgroundJob.objects.create(
|
|
task_id=fake.uuid4(),
|
|
task_name="test.task",
|
|
status="success",
|
|
)
|
|
request = self._request()
|
|
qs = BackgroundJob.objects.all()
|
|
self.admin.revoke_jobs(request, qs)
|
|
|
|
def test_revoke_jobs_action_pending(self):
|
|
job = BackgroundJob.objects.create(
|
|
task_id=fake.uuid4(),
|
|
task_name="test.task",
|
|
status="pending",
|
|
)
|
|
request = self._request()
|
|
qs = BackgroundJob.objects.all()
|
|
with patch("celery.current_app.control.revoke") as revoke_mock:
|
|
self.admin.revoke_jobs(request, qs)
|
|
revoke_mock.assert_called_once_with(job.task_id, terminate=True)
|
|
job.refresh_from_db()
|
|
self.assertEqual(job.status, "revoked")
|