bernini/order/tests.py

104 lines
4.1 KiB
Python

from django.contrib.auth.models import User
from django.test import TestCase, Client
from rest_framework import status
from rest_framework.utils import json
from order.models import SaleOrder, SaleOrderLine, Product
from order.serializers import SaleOrderSerializer
class OrderTests(TestCase):
def setUp(self) -> None:
self.product_1: Product = Product.objects.create(
name="Product 1", unit_price=10.0
)
self.product_2: Product = Product.objects.create(
name="Product 2", unit_price=20.0
)
self.product_3: Product = Product.objects.create(
name="Product 3", unit_price=30.0
)
self.product_4: Product = Product.objects.create(
name="Product 4", unit_price=40.0
)
self.order_1: SaleOrder = SaleOrder.objects.create(name="Order 1")
self.order_2: SaleOrder = SaleOrder.objects.create(name="Order 2")
self.line_1_1: SaleOrderLine = SaleOrderLine.objects.create(
name="Line 1/Order1", order=self.order_1, product=self.product_1
)
self.line_1_2: SaleOrderLine = SaleOrderLine.objects.create(
name="Line 2/Order 1",
quantity=3,
order=self.order_1,
product=self.product_2,
)
self.line_2_1: SaleOrderLine = SaleOrderLine.objects.create(
name="Line 1/Order2", order=self.order_2, product=self.product_3
)
self.line_2_2: SaleOrderLine = SaleOrderLine.objects.create(
name="Line 2/Order2", order=self.order_2, product=self.product_4
)
self.user_foo: User = User.objects.create(username="foo")
self.user_foo.set_password("foo")
self.user_foo.save()
self.user_bar = User.objects.create(username="bar", password="bar")
self.client = Client()
self.client.login(username="foo", password="foo")
def test_model_getters(self):
self.assertEqual(len(self.order_1.saleorderline_set.all()), 2)
self.assertEqual(self.order_1.total, 0.0)
self.assertEqual(self.order_1.amount_total, 70.0)
self.assertEqual(len(self.order_2.saleorderline_set.all()), 2)
self.assertEqual(self.order_2.total, 0.0)
self.assertEqual(self.order_2.amount_total, 70.0)
self.assertIsNotNone(self.line_1_1.product)
self.assertIsNotNone(self.line_1_2.product)
self.assertIsNotNone(self.line_2_1.product)
self.assertIsNotNone(self.line_2_2.product)
def test_model_sell(self):
self.assertIsNone(self.order_1.sold_at)
self.assertIsNone(self.order_1.sold_to)
self.order_1.sell(user=self.user_bar)
old_date = self.order_1.sold_at
old_user = self.order_1.sold_to
self.assertIsNotNone(self.order_1.sold_at)
self.assertIsNotNone(self.order_1.sold_to)
self.assertEqual(self.order_1.total, self.order_1.amount_total)
self.assertEqual(self.order_1.total, 70.0)
self.order_1.sell(user=self.user_bar)
self.assertEqual(self.order_1.sold_at, old_date)
self.assertEqual(self.order_1.sold_to, old_user)
def test_view_readonly(self):
response = self.client.patch(
path="/api/orders/1/",
data={"sold_at": "foo"},
content_type="application/json",
)
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
response = self.client.patch(
path="/api/orders/1/",
data={"sold_to": self.user_foo.id},
content_type="application/json",
)
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
def test_view_total(self):
response = self.client.get(path="/api/orders/1/total/")
self.assertEqual(json.loads(response.content.decode())["amount_total"], 70.0)
response = self.client.get(path="/api/orders/2/total/")
self.assertEqual(json.loads(response.content.decode())["amount_total"], 70.0)
def test_view_sell(self):
response = self.client.get(path="/api/orders/2/sold/")
self.order_2.refresh_from_db()
self.assertEqual(self.order_2.sold_to, self.user_foo)