from django.test import TestCase, RequestFactory from django.contrib.auth import get_user_model from unittest.mock import patch from modules.invoicing.views import InvoiceTransactionEntryViewSet from modules.invoicing.serializers import InvoiceTransactionSerializer from modules.invoicing.models import InvoiceTransaction from modules.invoicing.models import Invoice from modules.crm.models import Client from datetime import date from decimal import Decimal class ViewsTests(TestCase): def setUp(self): User = get_user_model() self.user = User.objects.create_user(username="u1", email="u1@example.com", password="pass") self.client = Client.objects.create(name="Client Views") self.invoice = Invoice.objects.create( invoice_number="INV-TEST-0001", creator=self.user, client=self.client, amount=Decimal("10.00"), due_date=date.today() ) self.factory = RequestFactory() self.viewset = InvoiceTransactionEntryViewSet() @patch("modules.invoicing.services.InvoiceService.create_invoice_entry") def test_perform_create_calls_service(self, mock_create_invoice_entry): # simuliramo serializer.validated_data i poziv perform_create serializer = InvoiceTransactionSerializer(data={ "invoice": self.invoice.id, "invoice_number": self.invoice.invoice_number, "amount": "5.00", "is_active": True }, context={"request": self.factory.get("/")}) serializer.is_valid(raise_exception=True) # Poziv perform_create koji bi trebao delegirati na servis self.viewset.request = self.factory.post("/") self.viewset.request.user = self.user # Ako kod poziva InvoiceService.create_invoice_entry, mock se aktivira. self.viewset.perform_create(serializer) mock_create_invoice_entry.assert_called()