This commit is contained in:
40
backend/modules/invoicing/tests/test_services.py
Normal file
40
backend/modules/invoicing/tests/test_services.py
Normal file
@@ -0,0 +1,40 @@
|
||||
from django.test import TestCase
|
||||
from django.contrib.auth import get_user_model
|
||||
from datetime import date
|
||||
from decimal import Decimal
|
||||
|
||||
from modules.crm.models import Client
|
||||
from modules.invoicing.models import Invoice, InvoiceItem
|
||||
from modules.invoicing.services import InvoiceService
|
||||
|
||||
|
||||
class InvoiceServiceTests(TestCase):
|
||||
def setUp(self):
|
||||
User = get_user_model()
|
||||
self.creator = User.objects.create_user(username="creator", email="c@example.com", password="pass")
|
||||
self.client = Client.objects.create(name="Test Client")
|
||||
|
||||
def test_create_full_invoice_creates_invoice_and_items(self):
|
||||
items = [
|
||||
{"description": "Item A", "quantity": Decimal("2.00"), "unit_price": Decimal("10.00")},
|
||||
{"description": "Item B", "quantity": Decimal("1.00"), "unit_price": Decimal("5.50")},
|
||||
]
|
||||
validated_data = {
|
||||
"client": self.client,
|
||||
"due_date": date.today(),
|
||||
"items": items,
|
||||
}
|
||||
|
||||
invoice = InvoiceService.create_full_invoice(user=self.creator, **validated_data)
|
||||
|
||||
# Basic assertions
|
||||
self.assertIsInstance(invoice, Invoice)
|
||||
self.assertEqual(invoice.creator, self.creator)
|
||||
self.assertEqual(invoice.client, self.client)
|
||||
self.assertEqual(invoice.items.count(), 2)
|
||||
|
||||
# Total should be 2*10 + 1*5.5 = 25.5
|
||||
self.assertEqual(invoice.amount, Decimal("25.50"))
|
||||
item_descriptions = [i.description for i in invoice.items.all()]
|
||||
self.assertIn("Item A", item_descriptions)
|
||||
self.assertIn("Item B", item_descriptions)
|
||||
Reference in New Issue
Block a user