You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

creator_tests.py 3.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. from decimal import Decimal as D
  2. from django.test import TestCase
  3. from django.test.utils import override_settings
  4. from mock import Mock
  5. from oscar.apps.basket.models import Basket
  6. from oscar.apps.order.models import Order
  7. from oscar_testsupport.factories import create_product
  8. from oscar.apps.order.utils import OrderCreator
  9. class TestOrderCreatorErrorCases(TestCase):
  10. def setUp(self):
  11. self.creator = OrderCreator()
  12. self.basket = Basket()
  13. def test_raises_exception_when_empty_basket_passed(self):
  14. with self.assertRaises(ValueError):
  15. self.creator.place_order(basket=self.basket)
  16. def test_raises_exception_if_duplicate_order_number_passed(self):
  17. self.basket.add_product(create_product(price=D('12.00')))
  18. self.creator.place_order(basket=self.basket, order_number='1234')
  19. with self.assertRaises(ValueError):
  20. self.creator.place_order(basket=self.basket, order_number='1234')
  21. class TestSuccessfulOrderCreation(TestCase):
  22. def setUp(self):
  23. self.creator = OrderCreator()
  24. self.basket = Basket.objects.create()
  25. def tearDown(self):
  26. Order.objects.all().delete()
  27. def test_creates_order_and_line_models(self):
  28. self.basket.add_product(create_product(price=D('12.00')))
  29. self.creator.place_order(basket=self.basket, order_number='1234')
  30. order = Order.objects.get(number='1234')
  31. lines = order.lines.all()
  32. self.assertEqual(1, len(lines))
  33. def test_sets_correct_order_status(self):
  34. self.basket.add_product(create_product(price=D('12.00')))
  35. self.creator.place_order(basket=self.basket, order_number='1234', status='Active')
  36. order = Order.objects.get(number='1234')
  37. self.assertEqual('Active', order.status)
  38. def test_defaults_to_using_free_shipping(self):
  39. self.basket.add_product(create_product(price=D('12.00')))
  40. self.creator.place_order(basket=self.basket, order_number='1234')
  41. order = Order.objects.get(number='1234')
  42. self.assertEqual(order.total_incl_tax, self.basket.total_incl_tax)
  43. self.assertEqual(order.total_excl_tax, self.basket.total_excl_tax)
  44. def test_defaults_to_setting_totals_to_basket_totals(self):
  45. self.basket.add_product(create_product(price=D('12.00')))
  46. method = Mock()
  47. method.is_discounted = False
  48. method.basket_charge_incl_tax = Mock(return_value=D('2.00'))
  49. method.basket_charge_excl_tax = Mock(return_value=D('2.00'))
  50. self.creator.place_order(basket=self.basket, order_number='1234', shipping_method=method)
  51. order = Order.objects.get(number='1234')
  52. self.assertEqual(order.total_incl_tax, self.basket.total_incl_tax + D('2.00'))
  53. self.assertEqual(order.total_excl_tax, self.basket.total_excl_tax + D('2.00'))
  54. def test_uses_default_order_status_from_settings(self):
  55. self.basket.add_product(create_product(price=D('12.00')))
  56. with override_settings(OSCAR_INITIAL_ORDER_STATUS='A'):
  57. self.creator.place_order(basket=self.basket, order_number='1234')
  58. order = Order.objects.get(number='1234')
  59. self.assertEqual('A', order.status)
  60. def test_uses_default_line_status_from_settings(self):
  61. self.basket.add_product(create_product(price=D('12.00')))
  62. with override_settings(OSCAR_INITIAL_LINE_STATUS='A'):
  63. self.creator.place_order(basket=self.basket, order_number='1234')
  64. order = Order.objects.get(number='1234')
  65. line = order.lines.all()[0]
  66. self.assertEqual('A', line.status)