本文整理汇总了Python中shop.models.cartmodel.Cart.save方法的典型用法代码示例。如果您正苦于以下问题:Python Cart.save方法的具体用法?Python Cart.save怎么用?Python Cart.save使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类shop.models.cartmodel.Cart
的用法示例。
在下文中一共展示了Cart.save方法的14个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: CheckoutCartToOrderTestCase
# 需要导入模块: from shop.models.cartmodel import Cart [as 别名]
# 或者: from shop.models.cartmodel.Cart import save [as 别名]
class CheckoutCartToOrderTestCase(TestCase):
def setUp(self):
self.user = User.objects.create(username="test", email="[email protected]", first_name="Test", last_name="Toto")
self.request = Mock()
setattr(self.request, "user", self.user)
setattr(self.request, "session", {})
setattr(self.request, "method", "GET")
self.cart = Cart()
self.cart.user = self.user
self.cart.save()
def test_order_created(self):
view = CheckoutSelectionView(request=self.request)
res = view.create_order_object_from_cart()
self.assertEqual(res.order_total, Decimal("0"))
def test_processing_signal(self):
view = CheckoutSelectionView(request=self.request)
order_from_signal = []
def receiver(sender, order=None, **kwargs):
order_from_signal.append(order)
processing.connect(receiver)
res = view.create_order_object_from_cart()
self.assertIs(res, order_from_signal[0])
示例2: get_or_create_cart
# 需要导入模块: from shop.models.cartmodel import Cart [as 别名]
# 或者: from shop.models.cartmodel.Cart import save [as 别名]
def get_or_create_cart(request, save=False):
"""
Return cart for current visitor.
For a logged in user, try to get the cart from the database. If it's not there or it's empty,
use the cart from the session.
If the user is not logged in use the cart from the session.
If there is no cart object in the database or session, create one.
If ``save`` is True, cart object will be explicitly saved.
"""
cart = None
if not hasattr(request, '_cart'):
is_logged_in = request.user and not isinstance(request.user, AnonymousUser)
if is_logged_in:
# if we are authenticated
session_cart = get_cart_from_session(request)
if session_cart and session_cart.user == request.user:
# and the session cart already belongs to us, we are done
cart = session_cart
elif session_cart and session_cart.total_quantity > 0 and session_cart.user != request.user:
# if it does not belong to us yet
database_cart = get_cart_from_database(request)
if database_cart:
# and there already is a cart that belongs to us in the database
# delete the old database cart
database_cart.delete()
database_cart = None
# save the user to the new one from the session
session_cart.user = request.user
session_cart.save()
cart = session_cart
else:
# if there is no session_cart, or it's empty, use the database cart
cart = get_cart_from_database(request)
if cart:
# and save it to the session
request.session['cart_id'] = cart.id
else:
# not authenticated? cart might be in session
cart = get_cart_from_session(request)
if not cart:
# in case it's our first visit and no cart was created yet
if is_logged_in:
cart = Cart(user=request.user)
elif getattr(request, 'session', None) is not None:
cart = Cart()
if save and not cart.pk:
cart.save()
request.session['cart_id'] = cart.id
setattr(request, '_cart', cart)
cart = getattr(request, '_cart') # There we *must* have a cart
return cart
示例3: CheckoutCartToOrderTestCase
# 需要导入模块: from shop.models.cartmodel import Cart [as 别名]
# 或者: from shop.models.cartmodel.Cart import save [as 别名]
class CheckoutCartToOrderTestCase(TestCase):
def setUp(self):
self.user = User.objects.create(username="test",
email="[email protected]",
first_name="Test",
last_name="Toto")
self.request = Mock()
setattr(self.request, 'user', self.user)
setattr(self.request, 'session', {})
setattr(self.request, 'method', 'GET')
self.product = Product(name='pizza', slug='pizza', unit_price='1.45')
self.product.save()
self.cart = Cart()
self.cart.user = self.user
self.cart.save()
def test_order_created(self):
view = CheckoutSelectionView(request=self.request)
res = view.create_order_object_from_cart()
self.assertEqual(res.order_total, Decimal('0'))
def test_orders_are_created_and_cleaned_up(self):
view = CheckoutSelectionView(request=self.request)
# create a new order with pk 1
old_order = view.create_order_object_from_cart()
# create order with pk 2 so sqlite doesn't reuse pk 1
Order.objects.create()
# then create a different new order, from a different cart with pk 3
# order pk 1 should be deleted here
self.cart.add_product(self.product)
new_order = view.create_order_object_from_cart()
self.assertFalse(Order.objects.filter(pk=old_order.pk).exists()) # check it was deleted
self.assertNotEqual(old_order.order_total, new_order.order_total)
def test_processing_signal(self):
view = CheckoutSelectionView(request=self.request)
order_from_signal = []
def receiver(sender, order=None, **kwargs):
order_from_signal.append(order)
processing.connect(receiver)
res = view.create_order_object_from_cart()
self.assertIs(res, order_from_signal[0])
示例4: CheckoutCartToOrderTestCase
# 需要导入模块: from shop.models.cartmodel import Cart [as 别名]
# 或者: from shop.models.cartmodel.Cart import save [as 别名]
class CheckoutCartToOrderTestCase(TestCase):
def setUp(self):
self.user = User.objects.create(username="test",
email="[email protected]",
first_name="Test",
last_name="Toto")
self.request = Mock()
setattr(self.request, 'user', self.user)
setattr(self.request, 'session', {})
setattr(self.request, 'method', 'GET')
self.cart = Cart()
self.cart.user = self.user
self.cart.save()
def test_order_created(self):
view = CheckoutSelectionView(request=self.request)
res = view.create_order_object_from_cart()
self.assertEqual(res.order_total, Decimal('0'))
示例5: get_or_create_cart
# 需要导入模块: from shop.models.cartmodel import Cart [as 别名]
# 或者: from shop.models.cartmodel.Cart import save [as 别名]
def get_or_create_cart(request, save=False):
"""
Return cart for current visitor.
Let's inspect the request for user or session, then either find a
matching cart and return it or build a new one.
If ``save`` is True, cart object will be explicitely saved.
"""
cart = None
if not hasattr(request, '_cart'):
if request.user and not isinstance(request.user, AnonymousUser):
# There is a logged in user
cart = Cart.objects.filter(user=request.user) # a list
if not cart: # if list is empty
cart = Cart(user=request.user)
else:
cart = cart[0] # Get the first one from the list
else:
session = getattr(request, 'session', None)
if session != None:
# There is a session
cart_id = session.get('cart_id')
if cart_id:
try:
cart = Cart.objects.get(pk=cart_id)
except Cart.DoesNotExist:
cart = None
if not cart:
cart = Cart()
if save and not cart.pk:
cart.save()
request.session['cart_id'] = cart.id
setattr(request, '_cart', cart)
cart = getattr(request, '_cart') # There we *must* have a cart
return cart
示例6: OrderConversionTestCase
# 需要导入模块: from shop.models.cartmodel import Cart [as 别名]
# 或者: from shop.models.cartmodel.Cart import save [as 别名]
class OrderConversionTestCase(TestCase):
PRODUCT_PRICE = Decimal('100')
TEN_PERCENT = Decimal(10) / Decimal(100)
def create_fixtures(self):
cart_modifiers_pool.USE_CACHE=False
self.user = User.objects.create(username="test",
email="[email protected]",
first_name="Test",
last_name = "Toto")
self.product = Product()
self.product.name = "TestPrduct"
self.product.slug = "TestPrduct"
self.product.short_description = "TestPrduct"
self.product.long_description = "TestPrduct"
self.product.active = True
self.product.unit_price = self.PRODUCT_PRICE
self.product.save()
self.cart = Cart()
self.cart.user = self.user
self.cart.save()
self.client = Client()
self.client.user = self.user
self.client.save()
self.country = Country.objects.create(name='CH')
self.address = Address()
self.address.client = self.client
self.address.address = 'address'
self.address.address2 = 'address2'
self.address.zip_code = '1234'
self.address.state = 'ZH'
self.address.country = self.country
self.address.is_billing = True
self.address.is_shipping = True
self.address.save()
self.address2 = Address()
self.address2.client = self.client
self.address2.address = '2address'
self.address2.address2 = '2address2'
self.address2.zip_code = '21234'
self.address2.state = '2ZH'
self.address2.country = self.country
self.address2.is_billing = True
self.address2.is_shipping = False
self.address2.save()
def test_01_create_order_from_simple_cart(self):
'''
Let's make sure that all the info is copied over properly when using
Order.objects.create_from_cart()
'''
self.create_fixtures()
self.cart.add_product(self.product)
self.cart.update()
self.cart.save()
o = Order.objects.create_from_cart(self.cart)
self.assertNotEqual(o, None)
ois = OrderItem.objects.filter(order=o)
cis = CartItem.objects.filter(cart=self.cart)
self.assertEqual(len(ois), len(cis))
self.assertEqual(o.order_subtotal, self.cart.subtotal_price)
self.assertEqual(o.order_total, self.cart.total_price)
def test_02_create_order_from_taxed_cart(self):
'''
This time assert that everything is consistent with a tax cart modifier
'''
self.create_fixtures()
MODIFIERS = ['shop.cart.modifiers.tax_modifiers.TenPercentTaxModifier']
with SettingsOverride(SHOP_PRICE_MODIFIERS=MODIFIERS):
self.cart.add_product(self.product)
self.cart.update()
self.cart.save()
o = Order.objects.create_from_cart(self.cart,)
# Must not return None, obviously
self.assertNotEqual(o, None)
# Compare all the OrderItems to all CartItems (length)
ois = OrderItem.objects.filter(order=o)
cis = CartItem.objects.filter(cart=self.cart)
self.assertEqual(len(ois), len(cis))
# Assert that there are as many extra_cart_price_fields than there
#.........这里部分代码省略.........
示例7: CartTestCase
# 需要导入模块: from shop.models.cartmodel import Cart [as 别名]
# 或者: from shop.models.cartmodel.Cart import save [as 别名]
class CartTestCase(TestCase):
PRODUCT_PRICE = Decimal('100')
TEN_PERCENT = Decimal(10) / Decimal(100)
def create_fixtures(self):
cart_modifiers_pool.USE_CACHE=False
self.user = User.objects.create(username="test", email="[email protected]")
self.product = Product()
self.product.name = "TestPrduct"
self.product.slug = "TestPrduct"
self.product.short_description = "TestPrduct"
self.product.long_description = "TestPrduct"
self.product.active = True
self.product.unit_price = self.PRODUCT_PRICE
self.product.save()
self.cart = Cart()
self.cart.user = self.user
self.cart.save()
def test_01_empty_cart_costs_0(self):
self.create_fixtures()
with SettingsOverride(SHOP_CART_MODIFIERS=[]):
self.cart.update()
self.assertEqual(self.cart.subtotal_price, Decimal('0.0'))
self.assertEqual(self.cart.total_price, Decimal('0.0'))
def test_02_one_object_no_modifiers(self):
self.create_fixtures()
with SettingsOverride(SHOP_CART_MODIFIERS=[]):
self.cart.add_product(self.product)
self.cart.save()
self.cart.update()
self.cart.save()
self.assertEqual(self.cart.subtotal_price, self.PRODUCT_PRICE)
self.assertEqual(self.cart.total_price, self.PRODUCT_PRICE)
def test_03_two_objects_no_modifier(self):
self.create_fixtures()
with SettingsOverride(SHOP_CART_MODIFIERS=[]):
# We add two objects now :)
self.cart.add_product(self.product,2)
self.cart.update()
self.cart.save()
self.assertEqual(self.cart.subtotal_price, self.PRODUCT_PRICE*2)
self.assertEqual(self.cart.total_price, self.PRODUCT_PRICE*2)
def test_04_one_object_simple_modifier(self):
self.create_fixtures()
MODIFIERS = ['shop.cart.modifiers.tax_modifiers.TenPercentTaxModifier']
with SettingsOverride(SHOP_CART_MODIFIERS=MODIFIERS):
self.cart.add_product(self.product)
self.cart.update()
self.cart.save()
self.assertEqual(self.cart.subtotal_price, self.PRODUCT_PRICE)
self.assertEqual(self.cart.total_price, (self.TEN_PERCENT*self.PRODUCT_PRICE)+self.PRODUCT_PRICE)
def test_05_one_object_two_modifiers_no_rebate(self):
self.create_fixtures()
MODIFIERS = ['shop.cart.modifiers.tax_modifiers.TenPercentTaxModifier',
'shop.cart.modifiers.rebate_modifiers.BulkRebateModifier']
with SettingsOverride(SHOP_CART_MODIFIERS=MODIFIERS):
self.cart.add_product(self.product)
self.cart.update()
self.cart.save()
self.assertEqual(self.cart.subtotal_price, self.PRODUCT_PRICE)
self.assertEqual(self.cart.total_price, (self.TEN_PERCENT*self.PRODUCT_PRICE)+self.PRODUCT_PRICE)
def test_06_one_object_two_modifiers_with_rebate(self):
self.create_fixtures()
MODIFIERS = ['shop.cart.modifiers.tax_modifiers.TenPercentTaxModifier',
'shop.cart.modifiers.rebate_modifiers.BulkRebateModifier']
with SettingsOverride(SHOP_CART_MODIFIERS=MODIFIERS):
# We add 6 objects now :)
self.cart.add_product(self.product,6)
self.cart.update()
self.cart.save()
#subtotal is 600 - 10% = 540
sub_should_be = (6*self.PRODUCT_PRICE) - (self.TEN_PERCENT*(6*self.PRODUCT_PRICE))
total_should_be = sub_should_be + (self.TEN_PERCENT*sub_should_be)
self.assertEqual(self.cart.subtotal_price, sub_should_be)
self.assertEqual(self.cart.total_price, total_should_be)
def test_07_add_same_object_twice(self):
self.create_fixtures()
with SettingsOverride(SHOP_CART_MODIFIERS=[]):
self.cart.add_product(self.product)
self.cart.add_product(self.product)
#.........这里部分代码省略.........
示例8: CartModifiersTestCase
# 需要导入模块: from shop.models.cartmodel import Cart [as 别名]
# 或者: from shop.models.cartmodel.Cart import save [as 别名]
class CartModifiersTestCase(TestCase):
PRODUCT_PRICE = Decimal('100')
def setUp(self):
cart_modifiers_pool.USE_CACHE = False
self.user = User.objects.create(username="test",
email="[email protected]")
self.product = Product()
self.product.name = "TestPrduct"
self.product.slug = "TestPrduct"
self.product.short_description = "TestPrduct"
self.product.long_description = "TestPrduct"
self.product.active = True
self.product.unit_price = self.PRODUCT_PRICE
self.product.save()
self.cart = Cart()
self.cart.user = self.user
self.cart.save()
def test_01_cart_modifier_pool_loads_modifiers_properly(self):
"""
Let's add a price modifier to the settings, then load it,
then call a method on it to make sure it works.
"""
MODIFIERS = [
'shop.cart.modifiers.tax_modifiers.TenPercentGlobalTaxModifier']
with SettingsOverride(SHOP_CART_MODIFIERS=MODIFIERS):
thelist = modifiers_pool.cart_modifiers_pool.get_modifiers_list()
self.assertEqual(len(thelist), 1)
instance = thelist[0]
self.assertTrue(hasattr(instance, 'TAX_PERCENTAGE'))
def test_02_cart_modifiers_pool_handles_wrong_path(self):
MODIFIERS = ['shop2.cart.modifiers.tax_modifiers'] # wrong path
with SettingsOverride(SHOP_CART_MODIFIERS=MODIFIERS):
raised = False
try:
modifiers_pool.cart_modifiers_pool.get_modifiers_list()
except:
raised = True
self.assertTrue(raised)
def test_03_cart_modifiers_pool_handles_wrong_module(self):
MODIFIERS = ['shop.cart.modifiers.tax_modifiers.IdontExist']
with SettingsOverride(SHOP_CART_MODIFIERS=MODIFIERS):
raised = False
try:
modifiers_pool.cart_modifiers_pool.get_modifiers_list()
except ImproperlyConfigured:
raised = True
self.assertTrue(raised)
def test_03_cart_modifiers_pool_handles_not_a_path(self):
MODIFIERS = ['shop']
with SettingsOverride(SHOP_CART_MODIFIERS=MODIFIERS):
raised = False
try:
modifiers_pool.cart_modifiers_pool.get_modifiers_list()
except ImproperlyConfigured:
raised = True
self.assertTrue(raised)
def test_state_is_passed_around_properly(self):
MODIFIERS = ['shop.tests.cart_modifiers.CarModifierUsingStatePassing']
with SettingsOverride(SHOP_CART_MODIFIERS=MODIFIERS):
self.cart.add_product(self.product)
self.cart.save()
self.cart.update() # This should raise if the state isn't passed
示例9: CartTestCase
# 需要导入模块: from shop.models.cartmodel import Cart [as 别名]
# 或者: from shop.models.cartmodel.Cart import save [as 别名]
class CartTestCase(TestCase):
PRODUCT_PRICE = Decimal('100')
TEN_PERCENT = Decimal(10) / Decimal(100)
def setUp(self):
cart_modifiers_pool.USE_CACHE=False
self.user = User.objects.create(username="test", email="[email protected]")
self.product = Product()
self.product.name = "TestPrduct"
self.product.slug = "TestPrduct"
self.product.short_description = "TestPrduct"
self.product.long_description = "TestPrduct"
self.product.active = True
self.product.unit_price = self.PRODUCT_PRICE
self.product.save()
self.cart = Cart()
self.cart.user = self.user
self.cart.save()
def test_empty_cart_costs_0_quantity_0(self):
with SettingsOverride(SHOP_CART_MODIFIERS=[]):
self.cart.update()
self.assertEqual(self.cart.subtotal_price, Decimal('0.0'))
self.assertEqual(self.cart.total_price, Decimal('0.0'))
self.assertEqual(self.cart.total_quantity, 0)
def test_one_object_no_modifiers(self):
with SettingsOverride(SHOP_CART_MODIFIERS=[]):
self.cart.add_product(self.product)
self.cart.save()
self.cart.update()
self.cart.save()
self.assertEqual(self.cart.subtotal_price, self.PRODUCT_PRICE)
self.assertEqual(self.cart.total_price, self.PRODUCT_PRICE)
self.assertEqual(self.cart.total_quantity, 1)
def test_two_objects_no_modifier(self):
with SettingsOverride(SHOP_CART_MODIFIERS=[]):
# We add two objects now :)
self.cart.add_product(self.product,2)
self.cart.update()
self.cart.save()
self.assertEqual(self.cart.subtotal_price, self.PRODUCT_PRICE*2)
self.assertEqual(self.cart.total_price, self.PRODUCT_PRICE*2)
self.assertEqual(self.cart.total_quantity, 2)
def test_one_object_simple_modifier(self):
MODIFIERS = ['shop.cart.modifiers.tax_modifiers.TenPercentGlobalTaxModifier']
with SettingsOverride(SHOP_CART_MODIFIERS=MODIFIERS):
self.cart.add_product(self.product)
self.cart.update()
self.cart.save()
self.assertEqual(self.cart.subtotal_price, self.PRODUCT_PRICE)
self.assertEqual(self.cart.total_price, (self.TEN_PERCENT*self.PRODUCT_PRICE)+self.PRODUCT_PRICE)
def test_one_object_two_modifiers_no_rebate(self):
MODIFIERS = ['shop.cart.modifiers.tax_modifiers.TenPercentGlobalTaxModifier',
'shop.cart.modifiers.rebate_modifiers.BulkRebateModifier']
with SettingsOverride(SHOP_CART_MODIFIERS=MODIFIERS):
self.cart.add_product(self.product)
self.cart.update()
self.cart.save()
self.assertEqual(self.cart.subtotal_price, self.PRODUCT_PRICE)
self.assertEqual(self.cart.total_price, (self.TEN_PERCENT*self.PRODUCT_PRICE)+self.PRODUCT_PRICE)
def test_one_object_two_modifiers_with_rebate(self):
MODIFIERS = ['shop.cart.modifiers.tax_modifiers.TenPercentGlobalTaxModifier',
'shop.cart.modifiers.rebate_modifiers.BulkRebateModifier']
with SettingsOverride(SHOP_CART_MODIFIERS=MODIFIERS):
# We add 6 objects now :)
self.cart.add_product(self.product,6)
self.cart.update()
self.cart.save()
#subtotal is 600 - 10% = 540
sub_should_be = (6*self.PRODUCT_PRICE) - (self.TEN_PERCENT*(6*self.PRODUCT_PRICE))
total_should_be = sub_should_be + (self.TEN_PERCENT*sub_should_be)
self.assertEqual(self.cart.subtotal_price, sub_should_be)
self.assertEqual(self.cart.total_price, total_should_be)
def test_add_same_object_twice(self):
with SettingsOverride(SHOP_CART_MODIFIERS=[]):
self.assertEqual(self.cart.total_quantity, 0)
self.cart.add_product(self.product)
self.cart.add_product(self.product)
self.cart.update()
self.cart.save()
#.........这里部分代码省略.........
示例10: ProductOptionsTestCase
# 需要导入模块: from shop.models.cartmodel import Cart [as 别名]
# 或者: from shop.models.cartmodel.Cart import save [as 别名]
class ProductOptionsTestCase(TestCase):
PRODUCT_PRICE = Decimal("100")
AWESOME_OPTION_PRICE = Decimal("50") # The price of awesome?
TEN_PERCENT = Decimal(10) / Decimal(100)
def create_fixtures(self):
cart_modifiers_pool.USE_CACHE = False
self.user = User.objects.create(username="test", email="[email protected]", first_name="Test", last_name="Toto")
self.product = Product()
self.product.name = "TestPrduct"
self.product.slug = "TestPrduct"
self.product.short_description = "TestPrduct"
self.product.long_description = "TestPrduct"
self.product.active = True
self.product.unit_price = self.PRODUCT_PRICE
self.product.save()
self.ogroup = OptionGroup()
self.ogroup.product = self.product
self.ogroup.name = "Test group"
self.ogroup.save()
self.option = Option()
self.option.group = self.ogroup
self.option.name = "Awesome"
self.option.price = self.AWESOME_OPTION_PRICE
self.option.save()
self.cart = Cart()
self.cart.user = self.user
self.cart.save()
self.cartitem = CartItem()
self.cartitem.cart = self.cart
self.cartitem.quantity = 1
self.cartitem.product = self.product
self.cartitem.save()
def test_01_no_options_yield_normal_price(self):
self.create_fixtures()
MODIFIERS = ["shop.cart.modifiers.product_options.ProductOptionsModifier"]
with SettingsOverride(SHOP_CART_MODIFIERS=MODIFIERS):
# No need to add a product there is already on in the fixtures
self.cart.update()
self.cart.save()
sub_should_be = 1 * self.PRODUCT_PRICE
total_should_be = sub_should_be
self.assertEqual(self.cart.subtotal_price, sub_should_be)
self.assertEqual(self.cart.total_price, total_should_be)
def test_02_awesome_option_increases_price_by_its_value(self):
self.create_fixtures()
c_item_option = CartItemOption()
c_item_option.option = self.option
c_item_option.cartitem = self.cartitem
c_item_option.save()
MODIFIERS = ["shop.cart.modifiers.product_options.ProductOptionsModifier"]
with SettingsOverride(SHOP_CART_MODIFIERS=MODIFIERS):
self.cart.update()
self.cart.save()
sub_should_be = (1 * self.PRODUCT_PRICE) + (1 * self.AWESOME_OPTION_PRICE)
total_should_be = sub_should_be
self.assertEqual(self.cart.subtotal_price, sub_should_be)
self.assertEqual(self.cart.total_price, total_should_be)
示例11: OrderConversionTestCase
# 需要导入模块: from shop.models.cartmodel import Cart [as 别名]
# 或者: from shop.models.cartmodel.Cart import save [as 别名]
class OrderConversionTestCase(TestCase):
PRODUCT_PRICE = Decimal('100')
TEN_PERCENT = Decimal(10) / Decimal(100)
def setUp(self):
cart_modifiers_pool.USE_CACHE = False
self.user = User.objects.create(username="test",
email="[email protected]",
first_name="Test",
last_name="Toto")
self.product = Product()
self.product.name = "TestPrduct"
self.product.slug = "TestPrduct"
self.product.short_description = "TestPrduct"
self.product.long_description = "TestPrduct"
self.product.active = True
self.product.unit_price = self.PRODUCT_PRICE
self.product.save()
self.cart = Cart()
self.cart.user = self.user
self.cart.save()
#self.client.user = self.user
#self.client.save()
self.country = Country.objects.create(name='CH')
self.address = Address()
self.address.name = 'Test Toto'
self.address.address = 'address'
self.address.address2 = 'address2'
self.address.zip_code = '1234'
self.address.state = 'ZH'
self.address.country = self.country
self.address.is_billing = True
self.address.is_shipping = True
self.address.save()
self.address2 = Address()
self.address2.name = 'Test Toto'
self.address2.address = '2address'
self.address2.address2 = '2address2'
self.address2.zip_code = '21234'
self.address2.state = '2ZH'
self.address2.country = self.country
self.address2.is_billing = True
self.address2.is_shipping = False
self.address2.save()
def test_create_order_from_simple_cart(self):
"""
Let's make sure that all the info is copied over properly when using
Order.objects.create_from_cart()
"""
self.cart.add_product(self.product)
self.cart.update()
self.cart.save()
o = Order.objects.create_from_cart(self.cart)
self.assertNotEqual(o, None)
ois = OrderItem.objects.filter(order=o)
cis = CartItem.objects.filter(cart=self.cart)
self.assertEqual(len(ois), len(cis))
self.assertEqual(ois[0].line_subtotal, self.PRODUCT_PRICE)
self.assertEqual(ois[0].line_total, self.PRODUCT_PRICE)
self.assertEqual(o.order_subtotal, self.cart.subtotal_price)
self.assertEqual(o.order_total, self.cart.total_price)
def test_create_order_order_items_proper_product_name(self):
baseproduct = BaseProduct.objects.create(
name="Table",
unit_price=self.PRODUCT_PRICE
)
variation = ProductVariation.objects.create(
baseproduct=baseproduct,
name="white"
)
self.cart.add_product(variation)
self.cart.update()
self.cart.save()
o = Order.objects.create_from_cart(self.cart)
ois = OrderItem.objects.filter(order=o)
self.assertEqual(ois[0].product_name, "Table - white")
def test_create_order_from_taxed_cart(self):
"""
This time assert that everything is consistent with a tax cart modifier
"""
MODIFIERS = [
'shop.cart.modifiers.tax_modifiers.TenPercentGlobalTaxModifier']
with SettingsOverride(SHOP_CART_MODIFIERS=MODIFIERS):
#.........这里部分代码省略.........
示例12: OrderConversionTestCase
# 需要导入模块: from shop.models.cartmodel import Cart [as 别名]
# 或者: from shop.models.cartmodel.Cart import save [as 别名]
class OrderConversionTestCase(TestCase):
PRODUCT_PRICE = Decimal("100")
TEN_PERCENT = Decimal(10) / Decimal(100)
def setUp(self):
cart_modifiers_pool.USE_CACHE = False
self.user = User.objects.create(username="test", email="[email protected]", first_name="Test", last_name="Toto")
self.product = Product()
self.product.name = "TestPrduct"
self.product.slug = "TestPrduct"
self.product.short_description = "TestPrduct"
self.product.long_description = "TestPrduct"
self.product.active = True
self.product.unit_price = self.PRODUCT_PRICE
self.product.save()
self.cart = Cart()
self.cart.user = self.user
self.cart.save()
# self.client.user = self.user
# self.client.save()
self.country = Country.objects.create(name="CH")
self.address = Address()
self.address.name = "Test Toto"
self.address.address = "address"
self.address.address2 = "address2"
self.address.zip_code = "1234"
self.address.state = "ZH"
self.address.country = self.country
self.address.is_billing = True
self.address.is_shipping = True
self.address.save()
self.address2 = Address()
self.address2.name = "Test Toto"
self.address2.address = "2address"
self.address2.address2 = "2address2"
self.address2.zip_code = "21234"
self.address2.state = "2ZH"
self.address2.country = self.country
self.address2.is_billing = True
self.address2.is_shipping = False
self.address2.save()
def test_create_order_from_simple_cart(self):
"""
Let's make sure that all the info is copied over properly when using
Order.objects.create_from_cart()
"""
self.cart.add_product(self.product)
self.cart.update()
self.cart.save()
o = Order.objects.create_from_cart(self.cart)
self.assertNotEqual(o, None)
ois = OrderItem.objects.filter(order=o)
cis = CartItem.objects.filter(cart=self.cart)
self.assertEqual(len(ois), len(cis))
self.assertEqual(ois[0].line_subtotal, self.PRODUCT_PRICE)
self.assertEqual(ois[0].line_total, self.PRODUCT_PRICE)
self.assertEqual(o.order_subtotal, self.cart.subtotal_price)
self.assertEqual(o.order_total, self.cart.total_price)
def test_create_order_from_taxed_cart(self):
"""
This time assert that everything is consistent with a tax cart modifier
"""
MODIFIERS = ["shop.cart.modifiers.tax_modifiers.TenPercentGlobalTaxModifier"]
with SettingsOverride(SHOP_CART_MODIFIERS=MODIFIERS):
self.cart.add_product(self.product)
self.cart.update()
self.cart.save()
o = Order.objects.create_from_cart(self.cart)
# Must not return None, obviously
self.assertNotEqual(o, None)
# Compare all the OrderItems to all CartItems (length)
ois = OrderItem.objects.filter(order=o)
cis = CartItem.objects.filter(cart=self.cart)
self.assertEqual(len(ois), len(cis))
self.assertEqual(ois[0].line_subtotal, self.PRODUCT_PRICE)
self.assertEqual(ois[0].line_total, self.PRODUCT_PRICE)
# Assert that there are as many extra_cart_price_fields than there
#.........这里部分代码省略.........
示例13: get_or_create_cart
# 需要导入模块: from shop.models.cartmodel import Cart [as 别名]
# 或者: from shop.models.cartmodel.Cart import save [as 别名]
def get_or_create_cart(request, save=False):
"""
Return cart for current visitor.
For a logged in user, try to get the cart from the database. If it's not there or it's empty,
use the cart from the session.
If the user is not logged in use the cart from the session.
If there is no cart object in the database or session, create one.
If ``save`` is True, cart object will be explicitly saved.
"""
cart = None
if not hasattr(request, '_cart'):
is_logged_in = request.user and not isinstance(request.user, AnonymousUser)
if is_logged_in:
# if we are authenticated
session_cart = get_cart_from_session(request)
if session_cart and session_cart.user == request.user:
# and the session cart already belongs to us, we are done
cart = session_cart
elif session_cart and session_cart.total_quantity > 0 and session_cart.user != request.user:
# if it does not belong to us yet
database_cart = get_cart_from_database(request)
if database_cart:
# and there already is a cart that belongs to us in the database
# delete the old database cart
database_cart.delete()
# save the user to the new one from the session
session_cart.user = request.user
session_cart.save()
cart = session_cart
"""
Hook by pb
In this part, we try to delete user's own products that user put in cart before log in
"""
try:
session_cart_items = CartItem.objects.filter(cart_id=cart.id)
except CartItem.DoesNotExist:
session_cart_items = None
if session_cart_items:
for item in session_cart_items:
if item.product_id:
pdt = Product.objects.get(pk=item.product_id)
# if video is mine
if pdt.user == request.user:
item.delete()
messages.add_message(request, messages.ERROR,
_("Your cart is modified."), extra_tags='alert-warning')
if request.user.is_authenticated():
try:
orders_user = Order.objects.filter(user_id=request.user.id)
print "try: orders_user: " + str(orders_user)
except Order.DoesNotExist:
orders_user = None
if orders_user:
session_cart_items = CartItem.objects.filter(cart_id=cart.id)
product_in_orderitem = OrderItem.objects.filter(order_id__in=orders_user).values('product_id').distinct()
both_products_session_orders = CartItem.objects.filter(cart_id=cart.id, product_id__in=product_in_orderitem)
for item in both_products_session_orders:
if item.product_id:
pdt = Product.objects.get(pk=item.product_id)
item.delete()
messages.add_message(request, messages.ERROR,
_("Your cart is modified because you still bought a or few videos."), extra_tags='alert-warning')
"""
End hook by pb
"""
else:
# if there is no session_cart, or it's empty, use the database cart
cart = get_cart_from_database(request)
if cart:
# and save it to the session
request.session['cart_id'] = cart.pk
else:
# not authenticated? cart might be in session
cart = get_cart_from_session(request)
if not cart:
# in case it's our first visit and no cart was created yet
if is_logged_in:
cart = Cart(user=request.user)
elif getattr(request, 'session', None) is not None:
cart = Cart()
if save and not cart.pk:
cart.save()
request.session['cart_id'] = cart.pk
setattr(request, '_cart', cart)
cart = getattr(request, '_cart') # There we *must* have a cart
return cart
示例14: CartTestCase
# 需要导入模块: from shop.models.cartmodel import Cart [as 别名]
# 或者: from shop.models.cartmodel.Cart import save [as 别名]
class CartTestCase(TestCase):
PRODUCT_PRICE = Decimal('100')
TEN_PERCENT = Decimal(10) / Decimal(100)
def setUp(self):
cart_modifiers_pool.USE_CACHE=False
self.user = User.objects.create(username="test", email="[email protected]")
self.product = Product()
self.product.name = "TestPrduct"
self.product.slug = "TestPrduct"
self.product.short_description = "TestPrduct"
self.product.long_description = "TestPrduct"
self.product.active = True
self.product.unit_price = self.PRODUCT_PRICE
self.product.save()
self.cart = Cart()
self.cart.user = self.user
self.cart.save()
def test_empty_cart_costs_0_quantity_0(self):
with SettingsOverride(SHOP_CART_MODIFIERS=[]):
self.cart.update()
self.assertEqual(self.cart.subtotal_price, Decimal('0.0'))
self.assertEqual(self.cart.total_price, Decimal('0.0'))
self.assertEqual(self.cart.total_quantity, 0)
def test_one_object_no_modifiers(self):
with SettingsOverride(SHOP_CART_MODIFIERS=[]):
self.cart.add_product(self.product)
self.cart.save()
self.cart.update()
self.cart.save()
self.assertEqual(self.cart.subtotal_price, self.PRODUCT_PRICE)
self.assertEqual(self.cart.total_price, self.PRODUCT_PRICE)
self.assertEqual(self.cart.total_quantity, 1)
def test_two_objects_no_modifier(self):
with SettingsOverride(SHOP_CART_MODIFIERS=[]):
# We add two objects now :)
self.cart.add_product(self.product,2)
self.cart.update()
self.cart.save()
self.assertEqual(self.cart.subtotal_price, self.PRODUCT_PRICE*2)
self.assertEqual(self.cart.total_price, self.PRODUCT_PRICE*2)
self.assertEqual(self.cart.total_quantity, 2)
def test_one_object_simple_modifier(self):
MODIFIERS = ['shop.cart.modifiers.tax_modifiers.TenPercentGlobalTaxModifier']
with SettingsOverride(SHOP_CART_MODIFIERS=MODIFIERS):
self.cart.add_product(self.product)
self.cart.update()
self.cart.save()
self.assertEqual(self.cart.subtotal_price, self.PRODUCT_PRICE)
self.assertEqual(self.cart.total_price, (self.TEN_PERCENT*self.PRODUCT_PRICE)+self.PRODUCT_PRICE)
def test_one_object_two_modifiers_no_rebate(self):
MODIFIERS = ['shop.cart.modifiers.tax_modifiers.TenPercentGlobalTaxModifier',
'shop.cart.modifiers.rebate_modifiers.BulkRebateModifier']
with SettingsOverride(SHOP_CART_MODIFIERS=MODIFIERS):
self.cart.add_product(self.product)
self.cart.update()
self.cart.save()
self.assertEqual(self.cart.subtotal_price, self.PRODUCT_PRICE)
self.assertEqual(self.cart.total_price, (self.TEN_PERCENT*self.PRODUCT_PRICE)+self.PRODUCT_PRICE)
def test_one_object_two_modifiers_with_rebate(self):
MODIFIERS = ['shop.cart.modifiers.tax_modifiers.TenPercentGlobalTaxModifier',
'shop.cart.modifiers.rebate_modifiers.BulkRebateModifier']
with SettingsOverride(SHOP_CART_MODIFIERS=MODIFIERS):
# We add 6 objects now :)
self.cart.add_product(self.product,6)
self.cart.update()
self.cart.save()
#subtotal is 600 - 10% = 540
sub_should_be = (6*self.PRODUCT_PRICE) - (self.TEN_PERCENT*(6*self.PRODUCT_PRICE))
total_should_be = sub_should_be + (self.TEN_PERCENT*sub_should_be)
self.assertEqual(self.cart.subtotal_price, sub_should_be)
self.assertEqual(self.cart.total_price, total_should_be)
def test_add_same_object_twice(self):
with SettingsOverride(SHOP_CART_MODIFIERS=[]):
self.assertEqual(self.cart.total_quantity, 0)
self.cart.add_product(self.product)
self.cart.add_product(self.product)
self.cart.update()
self.cart.save()
#.........这里部分代码省略.........