def test_product_with_empty_price(self): product_class = factories.ProductClassFactory(track_stock=False) product = factories.ProductFactory(product_class=product_class, stockrecords=[]) factories.StockRecordFactory(price_excl_tax=None, product=product) info = self.strategy.fetch_for_product(product) self.assertFalse(info.availability.is_available_to_buy)
def create_digital_product(self): product_class = factories.ProductClassFactory( requires_shipping=False, track_stock=False) product = factories.ProductFactory(product_class=product_class) factories.StockRecordFactory( num_in_stock=None, price_excl_tax=D('12.00'), product=product) return product
def add_product_to_basket(self, product=None): if product is None: product = factories.ProductFactory() factories.StockRecordFactory( num_in_stock=10, price_excl_tax=D('12.00'), product=product) detail_page = self.get(product.get_absolute_url()) form = detail_page.forms['add_to_basket_form'] form.submit()
def test_availability_does_not_require_price(self): # regression test for https://github.com/django-oscar/django-oscar/issues/2664 # The availability policy should be independent of price. product_class = factories.ProductClassFactory(track_stock=False) product = factories.ProductFactory(product_class=product_class, stockrecords=[]) factories.StockRecordFactory(price_excl_tax=None, product=product) info = self.strategy.fetch_for_product(product) self.assertTrue(info.availability.is_available_to_buy)
def add_product_to_basket(self, product=None, **kwargs): if product is None: product = factories.ProductFactory() factories.StockRecordFactory(num_in_stock=10, price=D('12.00'), product=product) detail_page = self.get(product.get_absolute_url(), user=kwargs.get('logged_in_user', self.user)) form = detail_page.forms['add_to_basket_form'] form.submit()
def create_line_models(obj, create, extracted, **kwargs): if not create: return if extracted: if not obj.basket.all_lines().exists(): product = factories.ProductFactory(stockrecords=None) factories.StockRecordFactory( product=product, price_currency=settings.OSCAR_DEFAULT_CURRENCY) obj.basket.add_product(product) for line in obj.basket.all_lines(): OrderCreator().create_line_models(obj, line)
def test_works_for_standalone_product(self): product = factories.ProductFactory() factories.StockRecordFactory(product=product) detail_page = self.get(product.get_absolute_url()) response = detail_page.forms['add_to_basket_form'].submit() self.assertIsRedirect(response) baskets = models.Basket.objects.all() self.assertEqual(1, len(baskets)) basket = baskets[0] self.assertEqual(1, basket.num_items)
def test_works_for_variant_product(self): parent = factories.ProductFactory() for x in range(3): variant = factories.ProductFactory(parent=parent) factories.StockRecordFactory(product=variant) detail_page = self.get(parent.get_absolute_url()) form = detail_page.forms['add_to_basket_form'] response = form.submit() self.assertIsRedirect(response) baskets = models.Basket.objects.all() self.assertEqual(1, len(baskets)) basket = baskets[0] self.assertEqual(1, basket.num_items)
def test_pricing_policy_unavailable_if_no_price_excl_tax(self): product = factories.ProductFactory(stockrecords=[]) factories.StockRecordFactory(price_excl_tax=None, product=product) info = strategy.US().fetch_for_product(product) self.assertFalse(info.price.exists)