feat(user): users/me and admin user-management contract fields
This commit is contained in:
@@ -1,10 +1,16 @@
|
||||
"""Tests for user serializers"""
|
||||
|
||||
from datetime import datetime, timedelta
|
||||
|
||||
from apps.core.models import BackgroundJob, JobStatus
|
||||
from apps.user.serializers import (
|
||||
CurrentUserProfileSerializer,
|
||||
CurrentUserSerializer,
|
||||
LoginSerializer,
|
||||
PasswordChangeSerializer,
|
||||
ProfileUpdateSerializer,
|
||||
TokenSerializer,
|
||||
UserManagementSerializer,
|
||||
UserRegistrationSerializer,
|
||||
UserSerializer,
|
||||
UserUpdateSerializer,
|
||||
@@ -124,6 +130,93 @@ class UserSerializerTest(TestCase):
|
||||
self.assertIn(field_name, serializer.Meta.read_only_fields)
|
||||
|
||||
|
||||
class CurrentUserProfileSerializerTest(TestCase):
|
||||
"""Tests for current user profile serializer"""
|
||||
|
||||
def setUp(self):
|
||||
self.user = UserFactory.create_user()
|
||||
self.profile = ProfileFactory.create_profile(
|
||||
user=self.user,
|
||||
first_name="Ivan",
|
||||
mid_name=None,
|
||||
last_name="Petrov",
|
||||
)
|
||||
|
||||
def test_middle_name_falls_back_to_empty_string(self):
|
||||
serializer = CurrentUserProfileSerializer(self.profile)
|
||||
|
||||
self.assertEqual(serializer.data["middle_name"], "")
|
||||
|
||||
|
||||
class CurrentUserSerializerTest(TestCase):
|
||||
"""Tests for current user serializer fields."""
|
||||
|
||||
def setUp(self):
|
||||
self.user = UserFactory.create_user()
|
||||
|
||||
def test_current_user_contains_is_active(self):
|
||||
serializer = CurrentUserSerializer(self.user)
|
||||
|
||||
self.assertIn("is_active", serializer.data)
|
||||
self.assertEqual(serializer.data["is_active"], self.user.is_active)
|
||||
|
||||
|
||||
class UserManagementSerializerTest(TestCase):
|
||||
"""Tests for user management serializer."""
|
||||
|
||||
def setUp(self):
|
||||
self.user = UserFactory.create_user()
|
||||
self.user.profile.first_name = None
|
||||
self.user.profile.mid_name = None
|
||||
self.user.profile.last_name = None
|
||||
self.user.profile.save()
|
||||
|
||||
def test_profile_fields_fallback_to_empty_string(self):
|
||||
serializer = UserManagementSerializer(self.user)
|
||||
|
||||
self.assertEqual(serializer.data["first_name"], "")
|
||||
self.assertEqual(serializer.data["middle_name"], "")
|
||||
self.assertEqual(serializer.data["last_name"], "")
|
||||
|
||||
def test_metric_fields_are_derived_from_latest_job(self):
|
||||
now = datetime(2026, 4, 14, 10, 0, 0)
|
||||
latest_job = BackgroundJob.objects.create(
|
||||
task_id="admin-management-latest",
|
||||
task_name="apps.forms.process",
|
||||
user_id=self.user.id,
|
||||
status=JobStatus.SUCCESS,
|
||||
progress=100,
|
||||
progress_message="Готово",
|
||||
result={"processed": 10},
|
||||
started_at=now,
|
||||
completed_at=now + timedelta(minutes=3),
|
||||
created_at=now,
|
||||
updated_at=now + timedelta(minutes=3),
|
||||
)
|
||||
BackgroundJob.objects.create(
|
||||
task_id="admin-management-old",
|
||||
task_name="apps.forms.process",
|
||||
user_id=self.user.id,
|
||||
status=JobStatus.FAILURE,
|
||||
progress=100,
|
||||
progress_message="Ошибка",
|
||||
error="old-error",
|
||||
started_at=now - timedelta(minutes=15),
|
||||
completed_at=now - timedelta(minutes=10),
|
||||
created_at=now - timedelta(minutes=15),
|
||||
updated_at=now - timedelta(minutes=10),
|
||||
)
|
||||
self.user.latest_job = latest_job
|
||||
|
||||
serializer = UserManagementSerializer(self.user)
|
||||
|
||||
self.assertEqual(serializer.data["progress_message"], "Готово")
|
||||
self.assertEqual(serializer.data["result"], {"processed": 10})
|
||||
self.assertIsNone(serializer.data["error"])
|
||||
self.assertEqual(serializer.data["is_successful"], True)
|
||||
self.assertEqual(serializer.data["duration"], 180.0)
|
||||
|
||||
|
||||
class UserUpdateSerializerTest(TestCase):
|
||||
"""Tests for UserUpdateSerializer"""
|
||||
|
||||
|
||||
Reference in New Issue
Block a user