from decimal import Decimal from rest_framework.test import APITestCase as TestCase from shop.models import Customer, Product, ProductPrice, Tax from shop.utils import create_order, create_order_line_for_product class ShopModelsTest(TestCase): def setUp(self) -> None: self.tax = Tax.objects.create( code="IVA", value=21, ) self.create_products() def create_products(self): self.potatoes = Product.objects.create( sku="0000001", name="Patatas", stock=Decimal("100.00"), ) self.gasoline = Product.objects.create( sku="0000002", name="Gasolina", stock=Decimal("800.00"), ) self.usb_c = Product.objects.create( sku="0000003", name="Cable USB-C", stock=Decimal("5.00"), ) ProductPrice.objects.create( product=self.potatoes, price=Decimal("0.80"), tax=self.tax ) ProductPrice.objects.create( product=self.gasoline, price=Decimal("1.15"), tax=self.tax ) ProductPrice.objects.create( product=self.usb_c, price=Decimal("9.95"), tax=self.tax ) def test_create_order(self): self.customer = Customer.objects.create( first_name="Luke", last_name="Skywalker", vat_id="11111111H", address="Farm Skywalker", city="Desert", state="Mos-Eisley", zip="00001", country="Tatooine", ) order = create_order( customer=self.customer, billing_address=self.customer.address, billing_city=self.customer.city, billing_state=self.customer.state, billing_zip=self.customer.zip, billing_country=self.customer.country, ) l1 = create_order_line_for_product( self.potatoes, quantity=Decimal("1.5"), order=order, ) l2 = create_order_line_for_product( self.gasoline, quantity=Decimal("40"), order=order, ) l3 = create_order_line_for_product( self.usb_c, quantity=Decimal("1.00"), order=order, ) order.calculate_total_from_lines() assert order.total == l1.total + l2.total + l3.total assert order.base_total == l1.base_total + l2.base_total + l3.base_total