import uuid from django.test import TestCase, RequestFactory from django.contrib.auth import get_user_model from unittest.mock import patch from modules.crm.serializers import ClientSerializer from modules.crm.views import ClientViewSet from modules.crm.models import Client class ClientViewSetTests(TestCase): def setUp(self): User = get_user_model() self.user = User.objects.create_user(username=f"user_{uuid.uuid4().hex[:6]}", email=f"user+{uuid.uuid4()}@example.test", password="pass") self.factory = RequestFactory() self.view = ClientViewSet() self.view.request = self.factory.post("/") self.view.request.user = self.user self.base_data = { "name": "View Client", "client_type": "legal", "tax_id": str(uuid.uuid4()), "email": f"client+{uuid.uuid4()}@example.test", "address": "Street 1", "city": "City", "postal_code": "00000", } @patch("modules.crm.views.ClientService.create_client") def test_perform_create_delegates_to_service(self, mock_create): # make serializer valid serializer = ClientSerializer(data=self.base_data, context={"request": self.view.request}) self.assertTrue(serializer.is_valid(), serializer.errors) mock_inst = Client(**self.base_data) mock_inst.pk = 1 mock_create.return_value = mock_inst self.view.request = self.factory.post("/") self.view.request.user = self.user # perform_create should call serializer.save() which delegates to service self.view.perform_create(serializer) mock_create.assert_called_once() @patch("modules.crm.views.ClientService.update_client") def test_perform_update_delegates_to_service(self, mock_update): client = Client.objects.create(**self.base_data) serializer = ClientSerializer(instance=client, data={"city": "UpdatedCity"}, partial=True, context={"request": self.view.request}) self.assertTrue(serializer.is_valid(), serializer.errors) mock_update.return_value = client self.view.request = self.factory.put("/") self.view.request.user = self.user serializer.instance = client self.view.perform_update(serializer) mock_update.assert_called_once() client.refresh_from_db() # serializer.perform_update causes serializer.save() which we delegated; check instance still exists self.assertIsNotNone(client.pk)