예제 #1
0
    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,
        )
예제 #2
0
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,
        })
예제 #3
0
 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)
예제 #4
0
파일: api.py 프로젝트: zumbrother/longclaw
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)
예제 #5
0
 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)
예제 #6
0
 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)
예제 #7
0
 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')
예제 #8
0
 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')
예제 #9
0
 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)
예제 #10
0
 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')
예제 #11
0
 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)
예제 #12
0
 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')
예제 #13
0
    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
예제 #14
0
파일: api.py 프로젝트: bmoe872/longclaw
    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)
예제 #15
0
    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)
예제 #16
0
    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,
        )
예제 #17
0
 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)