def test_summed_up_order_discounts_and_vouchers2(self): """Tests the price of the discount/voucher within an order. We have 2 discounts ('Summer' is able to sum up) and 1 voucher (able to sum up) We expect 'Special offer 1' discount to be applied as it's value is bigger than value of summed up 'Summer' discount and Voucher """ tax = Tax.objects.create(rate=19) Discount.objects.create(name="Summer", active=True, value=10.0, type=DISCOUNT_TYPE_ABSOLUTE, tax=tax, sums_up=True) discount_value = 25.0 Discount.objects.create(name="Special offer 1", active=True, value=discount_value, type=DISCOUNT_TYPE_ABSOLUTE, tax=tax, sums_up=False) # vouchers from lfs.voucher.models import VoucherGroup, Voucher from lfs.voucher.settings import ABSOLUTE user = User.objects.get(username="******") self.vg = VoucherGroup.objects.create( name="xmas", creator=user ) voucher_value = 12.0 self.v1 = Voucher.objects.create( number="AAAA", group=self.vg, creator=user, start_date=datetime.date.today() + datetime.timedelta(days=-10), end_date=datetime.date.today() + datetime.timedelta(days=10), effective_from=0, kind_of=ABSOLUTE, value=voucher_value, sums_up=True, limit=2, tax=tax ) self.request.session['voucher'] = 'AAAA' order = add_order(self.request) voucher_value * (tax.rate / (100.0 + tax.rate)) all_product_names = list(order.items.values_list('product_name', flat=True)) # voucher value is biggest one self.assertTrue("Summer" not in all_product_names) self.assertTrue("Special offer 1" in all_product_names) self.assertEqual(order.voucher_price, 0)
def test_summed_up_order_discounts(self): """Tests the price of the discount within an order. """ self.tax = Tax.objects.create(rate=19) Discount.objects.create(name="Summer", active=True, value=10.0, type=DISCOUNT_TYPE_ABSOLUTE, tax=self.tax, sums_up=True) discount_value = 11.0 Discount.objects.create(name="Special offer 1", active=True, value=discount_value, type=DISCOUNT_TYPE_ABSOLUTE, tax=self.tax, sums_up=False) order = add_order(self.request) tax_value = discount_value * (self.tax.rate / (100.0 + self.tax.rate)) all_product_names = list( order.items.values_list('product_name', flat=True)) self.assertTrue("Summer" not in all_product_names) self.assertTrue("Special offer 1" in all_product_names) for order_item in order.items.all(): if order_item.product_name == "Special offer 1": self.assertEqual("%.2f" % order_item.price_net, "%.2f" % (-discount_value + tax_value)) self.assertEqual("%.2f" % order_item.product_price_net, "%.2f" % (-discount_value + tax_value))
def test_summed_up_order_discounts(self): """Tests the price of the discount within an order. """ self.tax = Tax.objects.create(rate=19) Discount.objects.create(name="Summer", active=True, value=10.0, type=DISCOUNT_TYPE_ABSOLUTE, tax=self.tax, sums_up=True) discount_value = 11.0 Discount.objects.create(name="Special offer 1", active=True, value=discount_value, type=DISCOUNT_TYPE_ABSOLUTE, tax=self.tax, sums_up=False) order = add_order(self.request) tax_value = discount_value * (self.tax.rate / (100.0 + self.tax.rate)) all_product_names = list(order.items.values_list('product_name', flat=True)) self.assertTrue("Summer" not in all_product_names) self.assertTrue("Special offer 1" in all_product_names) for order_item in order.items.all(): if order_item.product_name == "Special offer 1": self.assertEqual("%.2f" % order_item.price_net, "%.2f" % (-discount_value + tax_value)) self.assertEqual("%.2f" % order_item.product_price_net, "%.2f" % (-discount_value + tax_value))
def process_payment(request): """ Processes the payment depending on the selected payment method. Returns a dictionary with the success state, the next url and a optional error message. """ from lfs.core.utils import import_symbol from lfs.order.utils import add_order from lfs.cart.utils import get_cart payment_method = get_selected_payment_method(request) if payment_method.module: payment_class = import_symbol(payment_method.module) payment_instance = payment_class(request) create_order_time = payment_instance.get_create_order_time() if create_order_time == PM_ORDER_IMMEDIATELY: order = add_order(request) if order is None: return {'accepted': True, 'next_url': reverse("lfs_shop_view")} payment_instance.order = order result = payment_instance.process() if result.get("order_state"): order.state = result.get("order_state") order.save() order_submitted.send(sender=order, request=request) else: cart = get_cart(request) payment_instance.cart = cart result = payment_instance.process() if result["accepted"]: if create_order_time == PM_ORDER_ACCEPTED: order = add_order(request) if result.get("order_state"): order.state = result.get("order_state") order.save() order_submitted.send(sender=order, request=request) return result else: order = add_order(request) order_submitted.send(sender=order, request=request) return { "accepted": True, "next_url": reverse("lfs_thank_you"), }
def test_order_discount_price(self): """Tests the price of the discount within an order. """ order = add_order(self.request) for order_item in order.items.all(): if order_item.product_name == "Summer": self.assertEqual("%.2f" % order_item.price_net, "-8.40") self.assertEqual("%.2f" % order_item.product_price_net, "-8.40")
def test_add_order(self): """Tests the general adding of an order via the add_order method """ order = add_order(self.request) self.assertEqual(order.state, SUBMITTED) self.assertEqual("%.2f" % order.price, "9.80") self.assertEqual("%.2f" % order.tax, "1.56") self.assertEqual(order.shipping_method.name, "Standard") self.assertEqual(order.shipping_price, 1.0) self.assertEqual("%.2f" % order.shipping_tax, "0.16") self.assertEqual(order.payment_method.name, "Direct Debit") self.assertEqual(order.payment_price, 0.0) self.assertEqual(order.payment_tax, 0.0) self.assertEqual(order.shipping_firstname, "John") self.assertEqual(order.shipping_lastname, "Doe") self.assertEqual(order.shipping_line1, "Street 42") self.assertEqual(order.shipping_line2, None) self.assertEqual(order.shipping_city, "Gotham City") self.assertEqual(order.shipping_code, "2342") self.assertEqual(order.shipping_phone, "555-111111") self.assertEqual(order.shipping_company_name, "Doe Ltd.") self.assertEqual(order.invoice_firstname, "Jane") self.assertEqual(order.invoice_lastname, "Doe") self.assertEqual(order.invoice_line1, "Street 43") self.assertEqual(order.invoice_line2, None) self.assertEqual(order.invoice_city, "Smallville") self.assertEqual(order.invoice_code, "2443") self.assertEqual(order.invoice_phone, "666-111111") self.assertEqual(order.invoice_company_name, "Doe Ltd.") # Items self.assertEqual(len(order.items.all()), 2) item = order.items.all().order_by('id')[0] self.assertEqual(item.product_amount, 2) self.assertEqual(item.product_sku, "sku-1") self.assertEqual(item.product_name, "Product 1") self.assertEqual("%.2f" % item.product_price_gross, "1.10") self.assertEqual("%.2f" % item.product_price_net, "0.92") self.assertEqual("%.2f" % item.product_tax, "0.18") item = order.items.all().order_by('id')[1] self.assertEqual(item.product_amount, 3) self.assertEqual(item.product_sku, "sku-2") self.assertEqual(item.product_name, "Product 2") self.assertEqual("%.2f" % item.product_price_gross, "2.20") self.assertEqual("%.2f" % item.product_price_net, "1.85") self.assertEqual("%.2f" % item.product_tax, "0.35") # The cart should be deleted after the order has been created cart = cart_utils.get_cart(self.request) self.assertEqual(cart, None)
def test_summed_up_order_discounts_and_vouchers2(self): """Tests the price of the discount/voucher within an order. We have 2 discounts ('Summer' is able to sum up) and 1 voucher (able to sum up) We expect 'Special offer 1' discount to be applied as it's value is bigger than value of summed up 'Summer' discount and Voucher """ tax = Tax.objects.create(rate=19) Discount.objects.create(name="Summer", active=True, value=10.0, type=DISCOUNT_TYPE_ABSOLUTE, tax=tax, sums_up=True) discount_value = 25.0 Discount.objects.create(name="Special offer 1", active=True, value=discount_value, type=DISCOUNT_TYPE_ABSOLUTE, tax=tax, sums_up=False) # vouchers from lfs.voucher.models import VoucherGroup, Voucher from lfs.voucher.settings import ABSOLUTE user = User.objects.get(username="******") self.vg = VoucherGroup.objects.create(name="xmas", creator=user) voucher_value = 12.0 self.v1 = Voucher.objects.create( number="AAAA", group=self.vg, creator=user, start_date=datetime.date.today() + datetime.timedelta(days=-10), end_date=datetime.date.today() + datetime.timedelta(days=10), effective_from=0, kind_of=ABSOLUTE, value=voucher_value, sums_up=True, limit=2, tax=tax) self.request.session['voucher'] = 'AAAA' order = add_order(self.request) voucher_value * (tax.rate / (100.0 + tax.rate)) all_product_names = list( order.items.values_list('product_name', flat=True)) # voucher value is biggest one self.assertTrue("Summer" not in all_product_names) self.assertTrue("Special offer 1" in all_product_names) self.assertEqual(order.voucher_price, 0)
def test_add_order(self): """Tests the general adding of an order via the add_order method """ # check we have 2 addresses before the order self.assertEqual(4, Address.objects.count()) order = add_order(self.request) # adding an order should deep copy our addresses above self.assertEqual(6, Address.objects.count()) self.assertEqual(order.state, SUBMITTED) self.assertEqual("%.2f" % order.price, "9.80") self.assertEqual("%.2f" % order.tax, "1.56") self.assertEqual(order.shipping_method.name, "Standard") self.assertEqual(order.shipping_price, 1.0) self.assertEqual("%.2f" % order.shipping_tax, "0.16") self.assertEqual(order.payment_method.name, "Direct Debit") self.assertEqual(order.payment_price, 0.0) self.assertEqual(order.payment_tax, 0.0) self.assertEqual(order.shipping_address.firstname, "John") self.assertEqual(order.shipping_address.lastname, "Doe") self.assertEqual(order.shipping_address.line1, "Street 42") self.assertEqual(order.shipping_address.line2, None) self.assertEqual(order.shipping_address.city, "Gotham City") self.assertEqual(order.shipping_address.zip_code, "2342") self.assertEqual(order.shipping_address.phone, "555-111111") self.assertEqual(order.shipping_address.company_name, "Doe Ltd.") self.assertEqual(order.invoice_address.firstname, "Jane") self.assertEqual(order.invoice_address.lastname, "Doe") self.assertEqual(order.invoice_address.line1, "Street 43") self.assertEqual(order.invoice_address.line2, None) self.assertEqual(order.invoice_address.city, "Smallville") self.assertEqual(order.invoice_address.zip_code, "2443") self.assertEqual(order.invoice_address.phone, "666-111111") self.assertEqual(order.invoice_address.company_name, "Doe Ltd.") # Items self.assertEqual(len(order.items.all()), 2) item = order.items.all().order_by('id')[0] self.assertEqual(item.product_amount, 2) self.assertEqual(item.product_sku, "sku-1") self.assertEqual(item.product_name, "Product 1") self.assertEqual("%.2f" % item.product_price_gross, "1.10") self.assertEqual("%.2f" % item.product_price_net, "0.92") self.assertEqual("%.2f" % item.product_tax, "0.18") item = order.items.all().order_by('id')[1] self.assertEqual(item.product_amount, 3) self.assertEqual(item.product_sku, "sku-2") self.assertEqual(item.product_name, "Product 2") self.assertEqual("%.2f" % item.product_price_gross, "2.20") self.assertEqual("%.2f" % item.product_price_net, "1.85") self.assertEqual("%.2f" % item.product_tax, "0.35") # The cart should be deleted after the order has been created cart = cart_utils.get_cart(self.request) self.assertEqual(cart, None) # delivery time should of the selected shipping method should be saved with order self.assertTrue(order.delivery_time is not None)