Exemple #1
0
    def test_create_order_with_extra_data_in_cart_modifier(self):
        MODIFIERS = [
            'shop.tests.order.MockCartModifierWithNothing',
            'shop.tests.order.MockCartModifierWithSimpleString',
            'shop.tests.order.MockCartModifierWithDictionaries'
        ]

        with SettingsOverride(SHOP_CART_MODIFIERS=MODIFIERS):
            self.cart.add_product(self.product)
            self.cart.update(self.request)
            self.cart.save()
            order = Order.objects.create_from_cart(self.cart, self.request)
            extra_order_fields = ExtraOrderPriceField.objects.filter(
                order=order)
            self.assertEqual(len(extra_order_fields), 3)
            self.assertEqual(extra_order_fields[0].data, None)
            self.assertEqual(extra_order_fields[1].data,
                             MockCartModifierWithSimpleString.stdstr)
            self.assertEqual(
                Decimal(extra_order_fields[2].data[0].get('rate')),
                Decimal(9.8))

            extra_order_fields = ExtraOrderItemPriceField.objects.filter(
                order_item__order=order)
            self.assertEqual(len(extra_order_fields), 3)
            self.assertEqual(extra_order_fields[0].data, None)
            self.assertEqual(extra_order_fields[1].data,
                             MockCartModifierWithSimpleString.unicodestr)
            self.assertEqual(
                Decimal(extra_order_fields[2].data.get('discount')),
                Decimal(0.2))
Exemple #2
0
    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
            # are extra order price fields
            e_cart_fields = self.cart.extra_price_fields
            e_order_fields = ExtraOrderPriceField.objects.filter(order=o)
            self.assertEqual(len(e_cart_fields), len(e_order_fields))
            
            # Check that totals match
            self.assertEqual(o.order_subtotal, self.cart.subtotal_price)
            self.assertEqual(o.order_total, self.cart.total_price)
    def test_02_enforcing_of_namespace_works(self):
        self.create_fixtures()

        MODIFIERS = ['shop.tests.payment.NamedMockPaymentBackend']
        with SettingsOverride(SHOP_PAYMENT_BACKENDS=MODIFIERS):
            self.assertRaises(NotImplementedError,
                              backends_pool.get_payment_backends_list)
Exemple #4
0
    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'))
Exemple #5
0
    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)
Exemple #6
0
 def test_must_be_logged_in_if_setting_is_true(self):
     with SettingsOverride(SHOP_FORCE_LOGIN=True):
         resp = self.client.get(reverse('flat'))
         self.assertEqual(resp.status_code, 302)
         self.assertTrue('accounts/login/' in resp._headers['location'][1])
         resp = self.client.get(reverse('flat_process'))
         self.assertEqual(resp.status_code, 302)
         self.assertTrue('accounts/login/' in resp._headers['location'][1])
Exemple #7
0
 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)
Exemple #8
0
 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)
Exemple #9
0
 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)
Exemple #10
0
 def test_get_backends_cache_works(self):
     MODIFIERS = ['shop.tests.payment.ValidMockPaymentBackend']
     with SettingsOverride(SHOP_PAYMENT_BACKENDS=MODIFIERS):
         backends_pool.use_cache = True
         list_ = backends_pool.get_payment_backends_list()
         self.assertEqual(len(list_), 1)
         list2 = backends_pool.get_payment_backends_list()
         self.assertEqual(len(list2), 1)
         self.assertEqual(list_, list2)
Exemple #11
0
 def test_get_backends_cache_works(self):
     MODIFIERS = ['shop.tests.shipping.ValidMockShippingBackend']
     backends_pool.use_cache = True
     with SettingsOverride(SHOP_SHIPPING_BACKENDS=MODIFIERS):
         list_ = backends_pool.get_shipping_backends_list()
         self.assertEqual(len(list_), 1)
         list2 = backends_pool.get_shipping_backends_list()
         self.assertEqual(len(list2), 1)
         self.assertEqual(list_, list2)
Exemple #12
0
 def test_07_get_backends_from_non_module(self):
     self.create_fixtures()
     MODIFIERS = ['shop.tests.IdontExist.IdontExistEither']
     with SettingsOverride(SHOP_PAYMENT_BACKENDS=MODIFIERS):
         raised = False
         try:
             backends_pool.get_payment_backends_list()
         except ImproperlyConfigured:
             raised = True
         self.assertEqual(raised, True)
Exemple #13
0
    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)
            self.cart.update()
            self.cart.save()

            self.assertEqual(len(self.cart.items.all()), 1)
            self.assertEqual(self.cart.items.all()[0].quantity, 2)
Exemple #14
0
 def test_09_get_backends_cache_works(self):
     self.create_fixtures()
     MODIFIERS = ['shop.tests.shipping.MockShippingBackend']
     backends_pool.USE_CACHE = True
     with SettingsOverride(SHOP_SHIPPING_BACKENDS=MODIFIERS):
         list = backends_pool.get_shipping_backends_list()
         self.assertEqual(len(list), 1)
         list2 = backends_pool.get_shipping_backends_list()
         self.assertEqual(len(list2), 1)
         self.assertEqual(list, list2)
Exemple #15
0
 def test_08_get_backends_from_non_class(self):
     self.create_fixtures()
     MODIFIERS = ['shop.tests.shipping.IdontExistEither']
     with SettingsOverride(SHOP_SHIPPING_BACKENDS=MODIFIERS):
         raised = False
         try:
             backends_pool.get_shipping_backends_list()
         except ImproperlyConfigured:
             raised = True
         self.assertEqual(raised, True)
Exemple #16
0
 def test_06_get_backends_from_non_path(self):
     self.create_fixtures()
     MODIFIERS = ['blob']
     with SettingsOverride(SHOP_SHIPPING_BACKENDS=MODIFIERS):
         raised = False
         try:
             backends_pool.get_shipping_backends_list()
         except ImproperlyConfigured:
             raised = True
         self.assertEqual(raised, True)
Exemple #17
0
 def test_09_get_backends_cache_works(self):
     self.create_fixtures()
     MODIFIERS = ['shop.tests.payment.MockPaymentBackend']
     with SettingsOverride(SHOP_PAYMENT_BACKENDS=MODIFIERS):
         backends_pool.USE_CACHE = True
         list = backends_pool.get_payment_backends_list()
         self.assertEqual(len(list), 1)
         list2 = backends_pool.get_payment_backends_list()
         self.assertEqual(len(list2), 1)
         self.assertEqual(list, list2)
Exemple #18
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)
Exemple #19
0
    def test_update_quantity_deletes(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()

            self.assertEqual(len(self.cart.items.all()), 1)
            self.cart.update_quantity(self.cart.items.all()[0].pk, 0)
            self.assertEqual(len(self.cart.items.all()), 0)
Exemple #20
0
    def test_add_same_object_twice_no_merge(self):
        with SettingsOverride(SHOP_CART_MODIFIERS=[]):
            self.assertEqual(self.cart.total_quantity, 0)
            self.cart.add_product(self.product, merge=False)
            self.cart.add_product(self.product, merge=False)
            self.cart.update()
            self.cart.save()

            self.assertEqual(len(self.cart.items.all()), 2)
            self.assertEqual(self.cart.items.all()[0].quantity, 1)
            self.assertEqual(self.cart.items.all()[1].quantity, 1)
Exemple #21
0
    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)
Exemple #22
0
    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.request)
            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)
Exemple #23
0
 def test_09_cart_item_should_use_specific_type_to_get_price(self):
     self.create_fixtures()
     base_product = BaseProduct.objects.create(
         unit_price=self.PRODUCT_PRICE)
     variation = base_product.productvariation_set.create(
         name="Variation 1")
     with SettingsOverride(SHOP_CART_MODIFIERS=[]):
         self.cart.add_product(variation)
         self.cart.update()
         self.cart.save()
         self.assertEqual(self.cart.subtotal_price, self.PRODUCT_PRICE)
Exemple #24
0
 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_01_no_options_yield_normal_price(self):
        self.create_fixtures()
        MODIFIERS = ['shop_simplevariations.cart_modifier.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)
Exemple #26
0
 def test_cart_item_should_use_specific_type_to_get_price(self):
     if SKIP_BASEPRODUCT_TEST:
         return
     base_product = BaseProduct.objects.create(
         unit_price=self.PRODUCT_PRICE)
     variation = base_product.productvariation_set.create(
         name="Variation 1", active=True)
     with SettingsOverride(SHOP_CART_MODIFIERS=[]):
         self.cart.add_product(variation)
         self.cart.update(self.request)
         self.cart.save()
         self.assertEqual(self.cart.subtotal_price, self.PRODUCT_PRICE)
Exemple #27
0
    def test_custom_queryset_is_used_when_passed_to_method(self):
        with SettingsOverride(SHOP_CART_MODIFIERS=[]):
            # first we add any product
            self.cart.add_product(self.product)

            # now we try to select a CartItem that does not exist yet. This
            # could be an item with a yet unused combination of variations.
            qs = CartItem.objects.filter(cart=self.cart, product=self.product,
                                         quantity=42)
            # although we add the same product and have merge=True, there
            # should be a new CartItem being created now.
            self.cart.add_product(self.product, queryset=qs)
            self.assertEqual(len(self.cart.items.all()), 2)
    def test_must_be_logged_in_if_setting_is_true(self):
        with SettingsOverride(SHOP_FORCE_LOGIN=True):
            # force creating of session
            # https://code.djangoproject.com/ticket/11475
            self.client.cookies[settings.SESSION_COOKIE_NAME] = '1'
            self.client.get(reverse('shop_welcome'))

            # save a non-empty cart in the session
            session = self.client.session
            session['cart_id'] = self.cart.pk
            session.save()

            resp = self.client.get(reverse('checkout_selection'))
            self.assertEqual(resp.status_code, 302)
            self.assertTrue('accounts/login/' in resp._headers['location'][1])
Exemple #29
0
    def test_10_add_shipping_costs_works(self):
        self.create_fixtures()

        class MockBackend(BaseShippingBackend):
            backend_name = "Fake"
            url_namespace = "fake"

        MODIFIERS = ['shop.tests.shipping.MockShippingBackend']
        backends_pool.USE_CACHE = True

        with SettingsOverride(SHOP_SHIPPING_BACKENDS=MODIFIERS):
            be = MockBackend()
            be.shop.add_shipping_costs(self.order, 'Test shipping',
                                       Decimal('-10'))
            self.assertEqual(self.order.shipping_costs, Decimal('-10'))
Exemple #30
0
    def test_05_one_object_two_modifiers_no_rebate(self):
        self.create_fixtures()
        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)