Changeset View
Changeset View
Standalone View
Standalone View
looper/tests/test_orders.py
| import datetime | from decimal import Decimal | ||||
| from unittest import mock | from unittest import mock | ||||
| import datetime | |||||
| import django.utils.timezone | import django.utils.timezone | ||||
| from . import AbstractLooperTestCase | from . import AbstractLooperTestCase | ||||
| from ..exceptions import IncorrectStatusError | |||||
| from looper.money import Money | |||||
| from looper.taxes import TaxType | |||||
| class OrdersTest(AbstractLooperTestCase): | class OrdersTest(AbstractLooperTestCase): | ||||
| def test_create_from_subscription(self): | def test_create_from_subscription(self): | ||||
| subscription = self.create_subscription() | subscription = self.create_subscription() | ||||
| order = subscription.generate_order() | order = subscription.generate_order() | ||||
| self.assertEqual('created', order.status) | self.assertEqual('created', order.status) | ||||
| self.assertEqual('Blender Development Fund Membership / Gold', order.name) | self.assertEqual('Blender Development Fund Membership / Gold', order.name) | ||||
| ▲ Show 20 Lines • Show All 139 Lines • ▼ Show 20 Lines | def test_subscription_inactive_order_fulfilled(self): | ||||
| subscription.save() | subscription.save() | ||||
| order.status = 'fulfilled' | order.status = 'fulfilled' | ||||
| order.save() | order.save() | ||||
| subscription.refresh_from_db() | subscription.refresh_from_db() | ||||
| order.refresh_from_db() | order.refresh_from_db() | ||||
| self.assertEqual('fulfilled', order.status) | self.assertEqual('fulfilled', order.status) | ||||
| self.assertEqual('on-hold', subscription.status) | self.assertEqual('on-hold', subscription.status) | ||||
| def test_update_not_allowed_if_paid(self): | |||||
| subscription = self.create_subscription() | |||||
| order = subscription.generate_order() | |||||
| order.status = 'paid' | |||||
| order.save() | |||||
| with self.assertRaises(IncorrectStatusError): | |||||
| order.update() | |||||
| def test_update_not_allowed_if_cancelled(self): | |||||
| subscription = self.create_subscription() | |||||
| order = subscription.generate_order() | |||||
| order.status = 'cancelled' | |||||
| order.save() | |||||
| with self.assertRaises(IncorrectStatusError): | |||||
| order.update() | |||||
| def test_update_not_allowed_if_fulfilled(self): | |||||
| subscription = self.create_subscription() | |||||
| order = subscription.generate_order() | |||||
| order.status = 'fulfilled' | |||||
| order.save() | |||||
| with self.assertRaises(IncorrectStatusError): | |||||
| order.update() | |||||
| def test_update_updates_order_price_and_tax_fields_reverse_charge_subtracts_tax(self): | |||||
| subscription = self.create_subscription() | |||||
| order = subscription.generate_order() | |||||
| self.assertEqual(order.price, subscription.price) | |||||
| subscription.tax_type = TaxType.VAT_REVERSE_CHARGE.value | |||||
| subscription.tax_rate = Decimal(19) | |||||
| subscription.save() | |||||
| order.update() | |||||
| order.refresh_from_db() | |||||
| self.assertNotEqual(order.price, subscription.price) | |||||
| self.assertEqual(subscription.price, Money('EUR', 2500)) | |||||
| self.assertEqual(order.price, Money('EUR', 2025)) | |||||
| self.assertEqual(order.tax_type, TaxType.VAT_REVERSE_CHARGE.value) | |||||
| self.assertEqual(order.tax_rate, 19) | |||||