Example #1
0
    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)
Example #2
0
    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)
Example #3
0
    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
Example #4
0
    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))