56 lines
2.7 KiB
Python
56 lines
2.7 KiB
Python
from django.test import TestCase, RequestFactory
|
|
from django.contrib.auth import get_user_model
|
|
from unittest.mock import patch
|
|
|
|
from modules.task_management.views import TaskViewSet
|
|
from modules.task_management.serializers import TaskSerializer
|
|
from modules.task_management.models import Task
|
|
from modules.fleet.models import Vehicle
|
|
|
|
|
|
class TaskViewSetTests(TestCase):
|
|
def setUp(self):
|
|
User = get_user_model()
|
|
self.user = User.objects.create_user(username="u1", email="u1@example.test", password="pass")
|
|
self.factory = RequestFactory()
|
|
self.view = TaskViewSet()
|
|
self.view.request = self.factory.post("/")
|
|
self.view.request.user = self.user
|
|
self.vehicle = Vehicle.objects.create(registration_number="ZG-TV-01", asset_type='crane')
|
|
|
|
@patch("modules.task_management.views.TaskService.create_task_entry")
|
|
def test_perform_create_calls_service(self, mock_create):
|
|
data = {"title": "Task from view", "description": "", "status": "aktivan", "vehicle": str(self.vehicle.id)}
|
|
serializer = TaskSerializer(data=data, context={"request": self.view.request})
|
|
assert serializer.is_valid(), serializer.errors
|
|
|
|
# Call perform_create, which should delegate to TaskService.create_task_entry
|
|
self.view.perform_create(serializer)
|
|
mock_create.assert_called_once()
|
|
args, kwargs = mock_create.call_args
|
|
assert "data" in kwargs and kwargs["user"] == self.user
|
|
|
|
@patch("modules.task_management.views.TaskService.update_task_entry")
|
|
def test_perform_update_calls_service_and_saves(self, mock_update):
|
|
# Create an instance and use serializer to update
|
|
task = Task.objects.create(title="Old", description="", assigned_to=self.user)
|
|
data = {"title": "Updated", "description": "new", "status": "aktivan"}
|
|
serializer = TaskSerializer(instance=task, data=data, partial=True, context={"request": self.view.request})
|
|
assert serializer.is_valid(), serializer.errors
|
|
|
|
# attach view.request and instance then call perform_update
|
|
self.view.request = self.factory.put("/")
|
|
self.view.request.user = self.user
|
|
serializer.instance = task
|
|
|
|
self.view.perform_update(serializer)
|
|
mock_update.assert_called_once_with(instance=task, data=serializer.validated_data, user=self.view.request.user)
|
|
# confirm instance saved with new title
|
|
task.refresh_from_db()
|
|
assert task.title == "Updated"
|
|
|
|
def test_perform_destroy_soft_deletes(self):
|
|
task = Task.objects.create(title="ToDelete", description="", assigned_to=self.user)
|
|
self.view.perform_destroy(task)
|
|
task.refresh_from_db()
|
|
assert task.is_active is False |