46 lines
1.9 KiB
Python
46 lines
1.9 KiB
Python
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() |