Files
state-corp-backend/tests/apps/core/test_mixins.py
Aleksandr Meshchriakov 697ecb7d1c
Some checks failed
CI/CD Pipeline / Code Quality Checks (push) Failing after 3m50s
CI/CD Pipeline / Run Tests (push) Successful in 3m57s
CI/CD Pipeline / Build Docker Images (push) Has been skipped
CI/CD Pipeline / Push to Gitea Registry (push) Has been skipped
CI/CD Pipeline / Deploy to Server (push) Has been skipped
Implement exchange imports and frontend reporting APIs
2026-04-07 16:31:04 +02:00

112 lines
3.8 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""Тесты для Model Mixins."""
from django.test import TestCase
from apps.core.mixins import (
OrderableMixin,
SoftDeleteMixin,
StatusMixin,
)
class TimestampMixinTest(TestCase):
"""Тесты для TimestampMixin."""
def test_created_at_auto_set(self):
"""Проверка автоматической установки created_at."""
# Используем BackgroundJob как пример модели с TimestampMixin
from apps.core.models import BackgroundJob
job = BackgroundJob.objects.create(
task_id="test-task-1",
task_name="test.task",
)
self.assertIsNotNone(job.created_at)
self.assertIsNotNone(job.updated_at)
def test_updated_at_auto_update(self):
"""Проверка автоматического обновления updated_at."""
from apps.core.models import BackgroundJob
job = BackgroundJob.objects.create(
task_id="test-task-2",
task_name="test.task",
)
original_updated = job.updated_at
# Обновляем запись
job.progress = 50
job.save()
job.refresh_from_db()
self.assertGreaterEqual(job.updated_at, original_updated)
class UUIDPrimaryKeyMixinTest(TestCase):
"""Тесты для UUIDPrimaryKeyMixin."""
def test_uuid_auto_generated(self):
"""Проверка автоматической генерации UUID."""
from apps.core.models import BackgroundJob
job = BackgroundJob.objects.create(
task_id="test-task-3",
task_name="test.task",
)
self.assertIsNotNone(job.id)
# Проверяем что ID похож на UUID (строка 32+ символа с дефисами)
self.assertEqual(len(str(job.id)), 36)
def test_uuid_unique(self):
"""Проверка уникальности UUID."""
from apps.core.models import BackgroundJob
job1 = BackgroundJob.objects.create(
task_id="test-task-4a",
task_name="test.task",
)
job2 = BackgroundJob.objects.create(
task_id="test-task-4b",
task_name="test.task",
)
self.assertNotEqual(job1.id, job2.id)
class SoftDeleteMixinTest(TestCase):
"""Тесты для SoftDeleteMixin."""
def test_soft_delete_mixin_fields(self):
"""Проверка наличия полей is_deleted и deleted_at."""
# Проверяем что поля определены в миксине
field_names = [f.name for f in SoftDeleteMixin._meta.get_fields()]
self.assertIn("is_deleted", field_names)
self.assertIn("deleted_at", field_names)
def test_soft_delete_queryset_methods(self):
"""Проверка методов SoftDeleteQuerySet."""
from apps.core.mixins import SoftDeleteQuerySet
# Проверяем что методы определены
self.assertTrue(hasattr(SoftDeleteQuerySet, "alive"))
self.assertTrue(hasattr(SoftDeleteQuerySet, "dead"))
self.assertTrue(hasattr(SoftDeleteQuerySet, "hard_delete"))
class StatusMixinTest(TestCase):
"""Тесты для StatusMixin."""
def test_status_choices(self):
"""Проверка наличия статусов."""
self.assertEqual(StatusMixin.Status.DRAFT, "draft")
self.assertEqual(StatusMixin.Status.ACTIVE, "active")
self.assertEqual(StatusMixin.Status.INACTIVE, "inactive")
self.assertEqual(StatusMixin.Status.ARCHIVED, "archived")
class OrderableMixinTest(TestCase):
"""Тесты для OrderableMixin."""
def test_orderable_mixin_has_order_field(self):
"""Проверка наличия поля order."""
self.assertTrue(hasattr(OrderableMixin, "order"))