diff --git a/task_app/serializers.py b/task_app/serializers.py index a9bfc8e..a31d21f 100644 --- a/task_app/serializers.py +++ b/task_app/serializers.py @@ -18,7 +18,7 @@ class TaskSerializer(serializers.ModelSerializer): subtasks = SubTaskSerializer(many=True, read_only=True) def get_assignees(self, obj): - return obj.assigned_tasks.all().values('user_id') + return list(obj.assigned_tasks.all().values('user_id')) class Meta: model = Task diff --git a/task_app/tests/cache_tests.py b/task_app/tests/test_cache.py similarity index 100% rename from task_app/tests/cache_tests.py rename to task_app/tests/test_cache.py diff --git a/task_app/tests/models_tests.py b/task_app/tests/test_models.py similarity index 82% rename from task_app/tests/models_tests.py rename to task_app/tests/test_models.py index 7a41d54..6037f2a 100644 --- a/task_app/tests/models_tests.py +++ b/task_app/tests/test_models.py @@ -3,6 +3,7 @@ from django.test import TestCase from django.contrib.auth import get_user_model from task_app.models import Task, SubTask, AssignedTask from task_app.choices import TaskCategory, TaskPriority, TaskStatus +from datetime import date User = get_user_model() @@ -11,6 +12,7 @@ class TaskModelTests(TestCase): def setUp(self): user = User.objects.create(first_name="Test", last_name="User", email="test@example.com") self.user = user + self.test_date = date(2025, 1, 1) def test_task_creation(self): task = Task.objects.create( @@ -19,17 +21,17 @@ class TaskModelTests(TestCase): category=TaskCategory.TECHNICAL_TASK, priority=TaskPriority.LOW, status=TaskStatus.TODO, - date="2025-01-01", + date=self.test_date, creator=self.user ) self.assertTrue(isinstance(task, Task)) - self.assertEqual(str(task), 'Test Task') + self.assertEqual(str(task), 'Test Task 1') self.assertIsNotNone(task.id) self.assertEqual(task.creator, self.user) self.assertIsNotNone(task.created_at) def test_subtask_creation(self): - task = Task.objects.create(title='Parent Task', creator=self.user) + task = Task.objects.create(title='Parent Task', creator=self.user, date=self.test_date) subtask = SubTask.objects.create(task=task, title='Test SubTask') self.assertTrue(isinstance(subtask, SubTask)) self.assertEqual(str(subtask), 'Parent Task - Test SubTask') @@ -38,21 +40,21 @@ class TaskModelTests(TestCase): self.assertEqual(subtask.status, False) def test_assigned_task_creation(self): - task = Task.objects.create(title='Assigned Task', creator=self.user) - assigned_user = User.objects.create(username='assigneduser') + task = Task.objects.create(title='Assigned Task', creator=self.user, date=self.test_date) + assigned_user = User.objects.create(email='assigned@example.com') assigned_task = AssignedTask.objects.create(user=assigned_user, task=task) self.assertTrue(isinstance(assigned_task, AssignedTask)) - self.assertEqual(str(assigned_task), 'assigneduser - Assigned Task') + self.assertEqual(str(assigned_task), 'assigned@example.com - Assigned Task') self.assertEqual(assigned_task.user, assigned_user) self.assertEqual(assigned_task.task, task) def test_task_default_uuid(self): - task = Task.objects.create(title='UUID Task', creator=self.user) + task = Task.objects.create(title='UUID Task', creator=self.user, date=self.test_date) self.assertTrue(isinstance(task.id, uuid.UUID)) - task2 = Task.objects.create(title='Another UUID Task', creator=self.user) + task2 = Task.objects.create(title='Another UUID Task', creator=self.user, date=self.test_date) self.assertNotEqual(task.id, task2.id) def test_subtask_default_status(self): - task = Task.objects.create(title='Task with Subtask', creator=self.user) + task = Task.objects.create(title='Task with Subtask', creator=self.user, date=self.test_date) subtask = SubTask.objects.create(task=task, title='Default Status Subtask') self.assertFalse(subtask.status) \ No newline at end of file diff --git a/task_app/tests/test_serializers.py b/task_app/tests/test_serializers.py new file mode 100644 index 0000000..9f1f8c6 --- /dev/null +++ b/task_app/tests/test_serializers.py @@ -0,0 +1,79 @@ +import uuid +from django.test import TestCase +from django.contrib.auth import get_user_model +from task_app.models import Task, SubTask, AssignedTask +from task_app.serializers import TaskSerializer, SubTaskSerializer, AssignedTaskSerializer +from task_app.choices import TaskCategory, TaskPriority, TaskStatus +from datetime import date + +User = get_user_model() + +class SerializerTests(TestCase): + + def setUp(self): + user = User.objects.create(first_name="Test", last_name="User", email="test@example.com") + self.user = user + self.test_date = date(2025, 1, 1) + + self.task = Task.objects.create( + title="Test Task 1", + description="Description 1", + category=TaskCategory.TECHNICAL_TASK, + priority=TaskPriority.LOW, + status=TaskStatus.TODO, + date=self.test_date, + creator=self.user + ) + self.subtask1 = SubTask.objects.create(task=self.task, title='SubTask 1', status=True) + self.subtask2 = SubTask.objects.create(task=self.task, title='SubTask 2', status=False) + self.assigned_user = User.objects.create(email='assigned@example.com') + self.assigned_task = AssignedTask.objects.create(user=self.assigned_user, task=self.task) + + def test_subtask_serializer(self): + serializer = SubTaskSerializer(self.subtask1) + expected_data = {'id': str(self.subtask1.id), 'title': 'SubTask 1', 'status': True} + self.assertEqual(serializer.data, expected_data) + + def test_assigned_task_serializer(self): + serializer = AssignedTaskSerializer(self.assigned_task) + expected_data = {'user_id': self.assigned_user.id} + self.assertEqual(serializer.data, expected_data) + + def test_task_serializer(self): + serializer = TaskSerializer(self.task) + expected_data = { + 'id': str(self.task.id), + 'title': 'Test Task 1', + 'description': 'Description 1', + 'category': 'Technical Task', + 'priority': 'low', + 'status': 'todo', + 'date': '2025-01-01', + 'creator': self.user.id, + 'created_at': self.task.created_at.isoformat().replace('+00:00', 'Z'), + 'subtasks': [ + {'id': str(self.subtask1.id), 'title': 'SubTask 1', 'status': True}, + {'id': str(self.subtask2.id), 'title': 'SubTask 2', 'status': False} + ], + 'assignees': [{'user_id': self.assigned_user.id}] + } + self.assertEqual(serializer.data, expected_data) + + def test_task_serializer_create_validation(self): + data = { + 'title': 'New Task', + 'category': 'INVALID', + 'priority': TaskPriority.LOW, + 'status': TaskStatus.TODO, + 'date': '2025-04-20', + 'creator': self.user.id + } + serializer = TaskSerializer(data=data) + self.assertFalse(serializer.is_valid()) + self.assertIn('category', serializer.errors) + + def test_task_serializer_update_validation(self): + data = {'priority': 'WRONG'} + serializer = TaskSerializer(self.task, data=data, partial=True) + self.assertFalse(serializer.is_valid()) + self.assertIn('priority', serializer.errors) \ No newline at end of file