Example #1
0
 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)
Example #2
0
 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))
Example #3
0
    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)
Example #4
0
 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)
Example #5
0
    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)