|
|
@@ -1,13 +1,16 @@
|
|
1
|
|
-from decimal import Decimal
|
|
|
1
|
+from decimal import Decimal as D
|
|
2
|
2
|
import hashlib
|
|
3
|
3
|
|
|
4
|
4
|
from django.test import TestCase
|
|
5
|
5
|
from django.conf import settings
|
|
|
6
|
+from mock import Mock
|
|
6
|
7
|
|
|
7
|
8
|
from oscar.apps.address.models import Country
|
|
8
|
9
|
from oscar.apps.basket.models import Basket
|
|
9
|
10
|
from oscar.apps.order.models import ShippingAddress, Order, Line, ShippingEvent, ShippingEventType, ShippingEventQuantity
|
|
10
|
|
-from oscar.test.helpers import create_order
|
|
|
11
|
+from oscar.test.helpers import create_order, create_product
|
|
|
12
|
+from oscar.apps.order.utils import OrderCreator
|
|
|
13
|
+from oscar.apps.shipping.methods import Free
|
|
11
|
14
|
|
|
12
|
15
|
ORDER_PLACED = 'order_placed'
|
|
13
|
16
|
|
|
|
@@ -134,4 +137,54 @@ class ShippingEventQuantityTest(TestCase):
|
|
134
|
137
|
event_quantity = ShippingEventQuantity.objects.create(event=event, line=self.line)
|
|
135
|
138
|
self.assertEquals(self.line.quantity, event_quantity.quantity)
|
|
136
|
139
|
|
|
137
|
|
-
|
|
|
140
|
+
|
|
|
141
|
+class OrderCreatorTests(TestCase):
|
|
|
142
|
+
|
|
|
143
|
+ def setUp(self):
|
|
|
144
|
+ self.creator = OrderCreator()
|
|
|
145
|
+ self.basket = Basket.objects.create()
|
|
|
146
|
+
|
|
|
147
|
+ def tearDown(self):
|
|
|
148
|
+ Order.objects.all().delete()
|
|
|
149
|
+
|
|
|
150
|
+ def test_exception_raised_when_empty_basket_passed(self):
|
|
|
151
|
+ with self.assertRaises(ValueError):
|
|
|
152
|
+ self.creator.place_order(basket=self.basket)
|
|
|
153
|
+
|
|
|
154
|
+ def test_order_models_are_created(self):
|
|
|
155
|
+ self.basket.add_product(create_product(price=D('12.00')))
|
|
|
156
|
+ self.creator.place_order(basket=self.basket, order_number='1234')
|
|
|
157
|
+ order = Order.objects.get(number='1234')
|
|
|
158
|
+ lines = order.lines.all()
|
|
|
159
|
+ self.assertEqual(1, len(lines))
|
|
|
160
|
+
|
|
|
161
|
+ def test_status_is_saved_if_passed(self):
|
|
|
162
|
+ self.basket.add_product(create_product(price=D('12.00')))
|
|
|
163
|
+ self.creator.place_order(basket=self.basket, order_number='1234', status='Active')
|
|
|
164
|
+ order = Order.objects.get(number='1234')
|
|
|
165
|
+ self.assertEqual('Active', order.status)
|
|
|
166
|
+
|
|
|
167
|
+ def test_shipping_is_free_by_default(self):
|
|
|
168
|
+ self.basket.add_product(create_product(price=D('12.00')))
|
|
|
169
|
+ self.creator.place_order(basket=self.basket, order_number='1234')
|
|
|
170
|
+ order = Order.objects.get(number='1234')
|
|
|
171
|
+ self.assertEqual(order.total_incl_tax, self.basket.total_incl_tax)
|
|
|
172
|
+ self.assertEqual(order.total_excl_tax, self.basket.total_excl_tax)
|
|
|
173
|
+
|
|
|
174
|
+ def test_basket_totals_are_used_by_default(self):
|
|
|
175
|
+ self.basket.add_product(create_product(price=D('12.00')))
|
|
|
176
|
+ method = Mock()
|
|
|
177
|
+ method.basket_charge_incl_tax = Mock(return_value=D('2.00'))
|
|
|
178
|
+ method.basket_charge_excl_tax = Mock(return_value=D('2.00'))
|
|
|
179
|
+
|
|
|
180
|
+ self.creator.place_order(basket=self.basket, order_number='1234', shipping_method=method)
|
|
|
181
|
+ order = Order.objects.get(number='1234')
|
|
|
182
|
+ self.assertEqual(order.total_incl_tax, self.basket.total_incl_tax + D('2.00'))
|
|
|
183
|
+ self.assertEqual(order.total_excl_tax, self.basket.total_excl_tax + D('2.00'))
|
|
|
184
|
+
|
|
|
185
|
+ def test_exception_raised_if_duplicate_number_passed(self):
|
|
|
186
|
+ self.basket.add_product(create_product(price=D('12.00')))
|
|
|
187
|
+ self.creator.place_order(basket=self.basket, order_number='1234')
|
|
|
188
|
+ with self.assertRaises(ValueError):
|
|
|
189
|
+ self.creator.place_order(basket=self.basket, order_number='1234')
|
|
|
190
|
+
|