def setUp(self): """Create a basket with things in it """ request = RequestFactory().get('/') request.session = {} self.bid = bid = basket_id(request) self.item = BasketItemFactory(basket_id=bid) BasketItemFactory(basket_id=bid) self.address = address = AddressFactory() self.rate1 = ShippingRate.objects.create( name='98d17c43-7e20-42bd-b603-a4c83c829c5a', rate=99, carrier='8717ca67-4691-4dff-96ec-c43cccd15241', description='313037e1-644a-4570-808a-f9ba82ecfb34', basket_id=bid, ) self.rate2 = ShippingRate.objects.create( name='8e721550-594c-482b-b512-54dc1744dff8', rate=97, carrier='4f4cca35-1a7a-47ec-ab38-a9918e0c04af', description='eacb446d-eb17-4ea7-82c1-ac2f62a53a7d', basket_id=bid, destination=address, ) self.rate3 = ShippingRate.objects.create( name='72991859-dc0b-463e-821a-bf8b04aaed2c', rate=95, carrier='0aa3c318-b045-4a96-a456-69b4cc71d46a', description='78b03c47-b20f-4f91-8161-47340367fb34', destination=address, )
def remove_basket_discount(request): bid = basket_id(request) try: discount = Discount.objects.get(basket_id=bid, order=None) discount.delete() return JsonResponse({ 'success': True, 'code': 'DELETED', 'reason': 'Removed the discount associated with this basket', }) except Discount.DoesNotExist: # this is fine, nothing to delete then pass return JsonResponse({ 'success': True, 'code': 'NO_DISCOUNT', 'reason': 'No discount associated with this basket currently exists', }) except Exception as e: return JsonResponse({ 'success': False, 'code': 'UNEXPECTED_ERROR', 'reason': 'Some other unexpected error occured: ' + e, })
def test_post_checkout_billing(self): """ Test using an alternate shipping address in the checkout view """ country = CountryFactory() request = RequestFactory().post( reverse_lazy('longclaw_checkout_view'), { 'shipping-name': 'bob', 'shipping-line_1': 'blah blah', 'shipping-postcode': 'ytxx 23x', 'shipping-city': 'London', 'shipping-country': country.pk, 'billing-name': 'john', 'billing-line_1': 'somewhere', 'billing-postcode': 'lmewrewr', 'billing-city': 'London', 'billing-country': country.pk, 'email': '*****@*****.**', 'different_billing_address': True } ) request.session = {} bid = basket_id(request) BasketItemFactory(basket_id=bid) response = CheckoutView.as_view()(request) self.assertEqual(response.status_code, 302)
def get_shipping_cost_kwargs(request, country=None): country_code = request.query_params.get('country_code', None) if country: if country_code is not None: raise utils.InvalidShippingCountry( "Cannot specify country and country_code") country_code = country destination = request.query_params.get('destination', None) if destination: try: destination = models.Address.objects.get(pk=destination) except models.Address.DoesNotExist: raise utils.InvalidShippingDestination("Address not found") elif not country_code: raise utils.InvalidShippingCountry("No country code supplied") if not country_code: country_code = destination.country.pk bid = basket_id(request) option = request.query_params.get('shipping_rate_name', 'standard') settings = Configuration.for_site(request.site) return dict(country_code=country_code, destination=destination, basket_id=bid, settings=settings, name=option)
def setUp(self): """Create a basket with things in it """ request = RequestFactory().get('/') request.session = {} bid = basket_id(request) self.item = BasketItemFactory(basket_id=bid) BasketItemFactory(basket_id=bid)
def setUp(self): self.shipping_address = AddressFactory() self.billing_address = AddressFactory() self.email = "*****@*****.**" self.request = RequestFactory().get('/') self.request.session = {} self.request.site = Site.find_for_request(self.request) self.basket_id = basket_id(self.request) BasketItemFactory(basket_id=self.basket_id)
def test_get_shipping_cost_kwargs_only_country(self): request = RequestFactory().get('/') api_request = upgrade_to_api_request(request) result = get_shipping_cost_kwargs(api_request, country=self.country.pk) self.assertEqual(result['country_code'], self.country.pk) self.assertEqual(result['destination'], None) self.assertEqual(result['basket_id'], basket_id(api_request)) self.assertEqual(result['settings'], Configuration.for_site(api_request.site)) self.assertEqual(result['name'], 'standard')
def test_get_shipping_cost_kwargs_with_destination(self): destination = AddressFactory() request = RequestFactory().get('/', {'destination': destination.pk}) api_request = upgrade_to_api_request(request) result = get_shipping_cost_kwargs(api_request) self.assertEqual(result['country_code'], destination.country.pk) self.assertEqual(result['destination'], destination) self.assertEqual(result['basket_id'], basket_id(api_request)) self.assertEqual(result['settings'], Configuration.for_site(api_request.site)) self.assertEqual(result['name'], 'standard')
def item_count(self, request, variant_id=None): """ Get quantity of a single item in the basket """ bid = utils.basket_id(request) item = ProductVariant.objects.get(id=variant_id) try: count = BasketItem.objects.get(basket_id=bid, variant=item).quantity except BasketItem.DoesNotExist: count = 0 return Response(data={"quantity": count}, status=status.HTTP_200_OK)
def test_get_shipping_cost_kwargs_only_country_known_iso(self): request = RequestFactory().get('/') api_request = upgrade_to_api_request(request) country = Country.objects.create(iso='ZZ', name_official='foo', name='foo') result = get_shipping_cost_kwargs(api_request, country=country.pk) self.assertEqual(result['country_code'], 'ZZ') self.assertEqual(result['destination'], None) self.assertEqual(result['basket_id'], basket_id(api_request)) self.assertEqual(result['settings'], Configuration.for_site(api_request.site)) self.assertEqual(result['name'], 'standard')
def test_post_checkout_invalid(self): """ Test posting an invalid form. This should return a 200 response - rerendering the form page with the errors """ request = RequestFactory().post( reverse_lazy('longclaw_checkout_view') ) request.session = {} bid = basket_id(request) BasketItemFactory(basket_id=bid) response = CheckoutView.as_view()(request) self.assertEqual(response.status_code, 200)
def test_get_shipping_cost_kwargs_country_code_and_shipping_rate_name( self): request = RequestFactory().get('/', { 'country_code': 'US', 'shipping_rate_name': 'foo' }) api_request = upgrade_to_api_request(request) result = get_shipping_cost_kwargs(api_request) self.assertEqual(result['country_code'], 'US') self.assertEqual(result['destination'], None) self.assertEqual(result['basket_id'], basket_id(api_request)) self.assertEqual(result['settings'], Configuration.for_site(api_request.site)) self.assertEqual(result['name'], 'foo')
def get_context_data(self, **kwargs): context = super(CheckoutView, self).get_context_data(**kwargs) items, _ = get_basket_items(self.request) total_price = sum(item.total() for item in items) discount = Discount.objects.filter(basket_id=basket_id(self.request), order=None).last() discount_total_price, discount_total_saved = discount_total( total_price, discount) site = getattr(self.request, 'site', None) context['checkout_form'] = self.checkout_form(self.request.POST or None) context['shipping_form'] = self.shipping_address_form( self.request.POST or None, prefix='shipping', site=site) context['billing_form'] = self.billing_address_form(self.request.POST or None, prefix='billing', site=site) context['basket'] = items default_shipping_rate = ShippingRate.objects.first().rate total_price = sum(item.total() for item in items) discount = Discount.objects.filter(basket_id=basket_id(self.request), order=None).last() discount_total_price, discount_total_saved = discount_total( total_price + default_shipping_rate, discount) context['total_price'] = total_price context['discount'] = discount context['discount_total_price'] = round(discount_total_price, 2) context['discount_total_saved'] = round(discount_total_saved, 2) context['default_shipping_rate'] = round(default_shipping_rate, 2) context['discount_plus_shipping'] = round( discount_total_price + default_shipping_rate, 2) context['total_plus_shipping'] = round( total_price + default_shipping_rate, 2) return context
def destroy(self, request, variant_id=None): """ Remove an item from the basket """ variant = ProductVariant.objects.get(id=variant_id) quantity = int(request.data.get("quantity", 1)) try: item = BasketItem.objects.get(basket_id=utils.basket_id(request), variant=variant) item.decrease_quantity(quantity) except BasketItem.DoesNotExist: pass serializer = BasketItemSerializer(self.get_queryset(request), many=True) return Response(data=serializer.data, status=status.HTTP_200_OK)
def setUp(self): self.addresses = { 'shipping_name': '', 'shipping_address_line1': '', 'shipping_address_city': '', 'shipping_address_zip': '', 'shipping_address_country': '', 'billing_name': '', 'billing_address_line1': '', 'billing_address_city': '', 'billing_address_zip': '', 'billing_address_country': '' } self.email = "*****@*****.**" self.request = RequestFactory().get('/') self.request.session = {} self.basket_id = basket_id(self.request)
def setUp(self): self.country = CountryFactory() self.address = AddressFactory() self.address_data = { 'name': 'JANE DOE', 'line_1': '1600 Pennsylvania Ave NW', 'city': 'DC', 'postcode': '20500', 'country': self.country.pk, } request = RequestFactory().get('/') request.session = {} self.bid = bid = basket_id(request) self.item = BasketItemFactory(basket_id=bid) BasketItemFactory(basket_id=bid) self.ratedAddress = address = AddressFactory() self.rate1 = ShippingRate.objects.create( name='98d17c43-7e20-42bd-b603-a4c83c829c5a', rate=99, carrier='8717ca67-4691-4dff-96ec-c43cccd15241', description='313037e1-644a-4570-808a-f9ba82ecfb34', basket_id=bid, ) self.rate2 = ShippingRate.objects.create( name='8e721550-594c-482b-b512-54dc1744dff8', rate=97, carrier='4f4cca35-1a7a-47ec-ab38-a9918e0c04af', description='eacb446d-eb17-4ea7-82c1-ac2f62a53a7d', basket_id=bid, destination=address, ) self.rate3 = ShippingRate.objects.create( name='72991859-dc0b-463e-821a-bf8b04aaed2c', rate=95, carrier='0aa3c318-b045-4a96-a456-69b4cc71d46a', description='78b03c47-b20f-4f91-8161-47340367fb34', destination=address, )
def test_post_checkout(self): """ Test correctly posting to the checkout view """ country = CountryFactory() request = RequestFactory().post( reverse_lazy('longclaw_checkout_view'), { 'shipping-name': 'bob', 'shipping-line_1': 'blah blah', 'shipping-postcode': 'ytxx 23x', 'shipping-city': 'London', 'shipping-country': country.pk, 'email': '*****@*****.**' } ) request.session = {} bid = basket_id(request) BasketItemFactory(basket_id=bid) response = CheckoutView.as_view()(request) self.assertEqual(response.status_code, 302)