def test_orderfromcart(self): """ Test creating an order from a cart. """ # Create product p = self.make_test_product() p.save() # Create customer c = self.make_test_customer() c.save() # Create cart cart = self.make_test_cart() cart.coupon_code = "testme" cart.customer = c cart.save() # Add product to cart cart.add_item(product=p, quantity=5) # To order o = Order.from_cart(cart) # Update discounts etcetera o.update() self.assertEqual(len(o.get_items()), 1) self.assertEqual(o.get_items()[0].product, p) self.assertEqual(o.get_items()[0].quantity, 5) self.assertEqual(o.get_total_items(), 5) self.assertEqual(o.coupon_code, cart.coupon_code) self.assertEqual(o.customer, cart.customer) # Confirm the order - this should delete the cart o.confirm() # This should have deleted the cart - but all else should remain self.assertRaises(Cart.DoesNotExist, Cart.objects.get, pk=cart.pk) self.assertEqual(len(o.get_items()), 1) self.assertEqual(o.get_items()[0].product, p) self.assertEqual(o.get_items()[0].quantity, 5) self.assertEqual(o.get_total_items(), 5) self.assertEqual(o.coupon_code, cart.coupon_code) self.assertEqual(o.customer, cart.customer)
def test_amountcartdiscount(self): """ Test an amount discount on a cart and test whether it is properly converted to a discount on an order. """ # Create discount discount = self.make_test_discount() discount.order_amount = Decimal('2.00') discount.save() # Create product p = self.make_test_product(price=Decimal('10.00')) p.save() # Create customer c = self.make_test_customer() c.save() # Create cart cart = self.make_test_cart() # cart.coupon_code = 'testme' cart.customer = c cart.save() # Add product to cart cart.add_item(product=p, quantity=5) # Check cart discounts self.assertEqual(cart.get_order_discount(), Decimal('2.00')) self.assertEqual(cart.get_price(), Decimal('48.00')) # To order order = Order.from_cart(cart) # Update discounts etcetera order.update() # Check order discounts self.assertEqual(order.get_order_discount(), Decimal('2.00')) self.assertEqual(order.get_price(), Decimal('48.00')) self.assertEqual(order.discounts.all()[0], discount)
def create_order(self): """ Create an Order object from the Cart""" cart = Cart.from_request(self.request) assert cart.pk, 'Cart not persistent' assert cart.customer, 'No customer for Cart' assert cart.customer.get_address(), 'No address for customer' assert cart.get_items(), 'No items in Cart' order = Order.from_cart(cart) # Don't assume transactions here - clean up after ourselves manually try: order.update() order.save() # Double-check whether stock is available order.check_stock() # Delete old potential errors for this cart # Make sure the current order is excluded, as well as orders # for which a payment has been initiated. old_orders = Order.objects.filter(cart=cart, payment_cluster__isnull=True).exclude(pk=order.pk) logger.debug(u'Deleting old %d orders for cart %s', old_orders.count(), cart) old_orders.delete() except: # Delete the order if something went wrong - as to prevent # double order numbers if order.pk: order.delete() raise return order
def test_ordervariation(self): """ Test converting a cart item with variation to an order. """ # Create product p = self.make_test_product() p.save() v = self.make_test_productvariation(p) v.save() p2 = self.make_test_product(slug="cheese") p2.save() # Create cart cart = self.make_test_cart() cart.save() # Add product to cart cart.add_item(product=p, variation=v) # Added a bogus product cart.add_item(product=p2) # Create customer c = self.make_test_customer() c.save() cart.customer = c # To order o = Order.from_cart(cart) # Update discounts etcetera o.update() self.assertEqual(len(o.get_items()), 2) self.assert_(o.get_items().get(product=p)) self.assert_(o.get_items().get(variation=v))