46 lines
1.7 KiB
Python
46 lines
1.7 KiB
Python
import uuid
|
|
from django.test import TestCase
|
|
from django.urls import reverse
|
|
from rest_framework.test import APIClient
|
|
from django.contrib.auth import get_user_model
|
|
from decimal import Decimal
|
|
from datetime import date
|
|
|
|
from modules.crm.models import Client
|
|
from modules.invoicing.models import Invoice
|
|
|
|
|
|
class InvoiceAPITests(TestCase):
|
|
def setUp(self):
|
|
self.api_client = APIClient()
|
|
User = get_user_model()
|
|
# Kreiraj test korisnika (ako treba autentikacija)
|
|
self.user = User.objects.create_user(
|
|
username=f"user_{uuid.uuid4().hex[:8]}",
|
|
email=f"user+{uuid.uuid4().hex[:8]}@example.test",
|
|
password="pass"
|
|
)
|
|
# Kreiraj jedinstvenog klijenta (email s uuid kako bismo izbjegli duplicate key)
|
|
self.client_obj = Client.objects.create(
|
|
name="API Test Client",
|
|
email=f"client+{uuid.uuid4()}@example.test"
|
|
)
|
|
# autentikacija ako je endpoint zaštićen
|
|
self.api_client.force_authenticate(user=self.user)
|
|
|
|
def test_api_creates_invoice_with_id(self):
|
|
url = reverse('invoice-list') # prilagodi ako je druga ruta
|
|
payload = {
|
|
"client": self.client_obj.id,
|
|
"due_date": date.today().isoformat(),
|
|
"items": [
|
|
{"description": "Test item", "quantity": "1.00", "unit_price": "10.00"}
|
|
]
|
|
}
|
|
|
|
response = self.api_client.post(url, payload, format='json')
|
|
assert response.status_code in (200, 201)
|
|
# provjeri da se faktura stvorila i da vraća id/kod
|
|
created = Invoice.objects.filter(client=self.client_obj).first()
|
|
assert created is not None
|
|
assert created.amount == Decimal("10.00") |