def test_not_already_purchased_products(self): """ Test user can purchase products which have not been already purchased """ products = ProductFactory.create_batch( 3, stockrecords__partner=self.partner) qs = urllib.urlencode( { 'sku': [ product.stockrecords.first().partner_sku for product in products ] }, True) url = '{root}?{qs}'.format(root=self.path, qs=qs) with mock.patch.object(UserAlreadyPlacedOrder, 'user_already_placed_order', return_value=False): response = self.client.get(url) self.assertEqual(response.status_code, 303)
def test_add_multiple_products_and_use_voucher(self, usage): """ Verify the basket accepts multiple products and a single use voucher. """ products = ProductFactory.create_batch(3, stockrecords__partner=self.partner) voucher = factories.VoucherFactory(usage=usage) product_range = factories.RangeFactory(products=products) voucher.offers.add(factories.ConditionalOfferFactory( benefit=factories.BenefitFactory(range=product_range), condition=factories.ConditionFactory(range=product_range) )) qs = urllib.urlencode({ 'sku': [product.stockrecords.first().partner_sku for product in products], 'code': voucher.code }, True) url = '{root}?{qs}'.format(root=self.path, qs=qs) response = self.client.get(url) self.assertEqual(response.status_code, 303) basket = response.wsgi_request.basket self.assertEqual(basket.status, Basket.OPEN) self.assertTrue(basket.contains_voucher(voucher.code))
def setUp(self): super(BasketCalculateViewTests, self).setUp() self.products = ProductFactory.create_batch( 3, stockrecords__partner=self.partner) qs = urllib.urlencode( { 'sku': [ product.stockrecords.first().partner_sku for product in self.products ] }, True) self.path = reverse('api:v2:baskets:calculate') self.url = '{root}?{qs}'.format(root=self.path, qs=qs) self.range = factories.RangeFactory(includes_all_products=True) self.product_total = sum(product.stockrecords.first().price_excl_tax for product in self.products) self.user = self.create_user(is_staff=True) self.client.login(username=self.user.username, password=self.password)
def test_one_already_purchased_product(self): """ Test prepare_basket removes already purchased product and checkout for the rest of products """ order = create_order(site=self.site, user=self.user) products = ProductFactory.create_batch( 3, stockrecords__partner=self.partner) products.append(OrderLine.objects.get(order=order).product) qs = urllib.urlencode( { 'sku': [ product.stockrecords.first().partner_sku for product in products ] }, True) url = '{root}?{qs}'.format(root=self.path, qs=qs) response = self.client.get(url) basket = response.wsgi_request.basket self.assertEqual(response.status_code, 303) self.assertEqual(basket.lines.count(), len(products) - 1)
def test_with_both_unavailable_and_available_products(self): """ Verify the basket ignores unavailable products and continue with available products. """ products = ProductFactory.create_batch( 3, stockrecords__partner=self.partner) products[0].expires = pytz.utc.localize(datetime.datetime.min) products[0].save() self.assertFalse(Selector().strategy().fetch_for_product( products[0]).availability.is_available_to_buy) qs = urllib.urlencode( { 'sku': [ product.stockrecords.first().partner_sku for product in products ], }, True) url = '{root}?{qs}'.format(root=self.path, qs=qs) response = self.client.get(url) self.assertEqual(response.status_code, 303) basket = response.wsgi_request.basket self.assertEqual(basket.status, Basket.OPEN)