62 lines
2.5 KiB
Python
62 lines
2.5 KiB
Python
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) |