def cart_with_voucher(cart, product, voucher): variant = product.variants.get() add_variant_to_cart(cart, variant, 3) cart.voucher_code = voucher.code cart.discount_amount = Money('20.00', 'USD') cart.save() return cart
def test_remove_unavailable_variants(cart, product): variant = product.variants.get() add_variant_to_cart(cart, variant) variant.quantity = 0 variant.save() utils.remove_unavailable_variants(cart) assert len(cart) == 0
def cart_with_voucher(cart, product, voucher): variant = product.variants.get() add_variant_to_cart(cart, variant, 3) cart.voucher_code = voucher.code cart.discount_amount = Money('20.00', 'USD') cart.save() return cart
def test_adding_same_variant(cart, product, taxes): variant = product.variants.get() add_variant_to_cart(cart, variant, 1) add_variant_to_cart(cart, variant, 2) assert len(cart) == 1 assert cart.quantity == 3 cart_total = TaxedMoney(net=Money('24.39', 'USD'), gross=Money(30, 'USD')) assert cart.get_subtotal(taxes=taxes) == cart_total
def test_create_order_insufficient_stock(request_cart, customer_user, product_without_shipping): variant = product_without_shipping.variants.get() add_variant_to_cart(request_cart, variant, 10, check_quantity=False) request_cart.user = customer_user request_cart.billing_address = customer_user.default_billing_address request_cart.save() with pytest.raises(InsufficientStock): create_order(request_cart, 'tracking_code', discounts=None, taxes=None)
def test_view_checkout_shipping_method_without_shipping( request_cart, product_without_shipping, client): variant = product_without_shipping.variants.get() add_variant_to_cart(request_cart, variant) url = reverse('checkout:shipping-method') response = client.get(url) assert response.status_code == 302 assert get_redirect_location(response) == reverse('checkout:summary')
def test_view_checkout_shipping_method_without_shipping( request_cart, product_without_shipping, client): variant = product_without_shipping.variants.get() add_variant_to_cart(request_cart, variant) url = reverse('checkout:shipping-method') response = client.get(url) assert response.status_code == 302 assert get_redirect_location(response) == reverse('checkout:summary')
def test_view_invalid_add_to_cart(client, product, request_cart): variant = product.variants.get() add_variant_to_cart(request_cart, variant, 2) response = client.post( reverse('product:add-to-cart', kwargs={ 'slug': product.get_slug(), 'product_id': product.pk }), {}) assert response.status_code == 200 assert request_cart.quantity == 2
def test_replace_cart_line_form(cart, product): variant = product.variants.get() initial_quantity = 1 replaced_quantity = 4 add_variant_to_cart(cart, variant, initial_quantity) data = {'quantity': replaced_quantity} form = forms.ReplaceCartLineForm(data=data, cart=cart, variant=variant) assert form.is_valid() form.save() assert cart.quantity == replaced_quantity
def test_create_order_insufficient_stock( request_cart, customer_user, product_without_shipping): variant = product_without_shipping.variants.get() add_variant_to_cart(request_cart, variant, 10, check_quantity=False) request_cart.user = customer_user request_cart.billing_address = customer_user.default_billing_address request_cart.save() with pytest.raises(InsufficientStock): create_order( request_cart, 'tracking_code', discounts=None, taxes=None)
def test_view_invalid_add_to_cart(client, product, request_cart): variant = product.variants.get() add_variant_to_cart(request_cart, variant, 2) response = client.post( reverse( 'product:add-to-cart', kwargs={ 'slug': product.get_slug(), 'product_id': product.pk}), {}) assert response.status_code == 200 assert request_cart.quantity == 2
def test_replace_cartline_form_when_insufficient_stock(monkeypatch, cart, product): variant = product.variants.get() initial_quantity = 1 replaced_quantity = 4 add_variant_to_cart(cart, variant, initial_quantity) exception_mock = InsufficientStock(Mock(quantity_available=2)) monkeypatch.setattr('saleor.product.models.ProductVariant.check_quantity', Mock(side_effect=exception_mock)) data = {'quantity': replaced_quantity} form = forms.ReplaceCartLineForm(data=data, cart=cart, variant=variant) assert not form.is_valid() with pytest.raises(KeyError): form.save() assert cart.quantity == initial_quantity
def test_replace_cartline_form_when_insufficient_stock( monkeypatch, cart, product): variant = product.variants.get() initial_quantity = 1 replaced_quantity = 4 add_variant_to_cart(cart, variant, initial_quantity) exception_mock = InsufficientStock( Mock(quantity_available=2)) monkeypatch.setattr( 'saleor.product.models.ProductVariant.check_quantity', Mock(side_effect=exception_mock)) data = {'quantity': replaced_quantity} form = forms.ReplaceCartLineForm(data=data, cart=cart, variant=variant) assert not form.is_valid() with pytest.raises(KeyError): form.save() assert cart.quantity == initial_quantity
def test_check_product_availability_and_warn(monkeypatch, cart, product): variant = product.variants.get() add_variant_to_cart(cart, variant) monkeypatch.setattr('django.contrib.messages.warning', Mock(warning=Mock())) monkeypatch.setattr('saleor.checkout.utils.contains_unavailable_variants', Mock(return_value=False)) utils.check_product_availability_and_warn(MagicMock(), cart) assert len(cart) == 1 monkeypatch.setattr('saleor.checkout.utils.contains_unavailable_variants', Mock(return_value=True)) monkeypatch.setattr( 'saleor.checkout.utils.remove_unavailable_variants', lambda c: add_variant_to_cart(cart, variant, 0, replace=True)) utils.check_product_availability_and_warn(MagicMock(), cart) assert len(cart) == 0
def test_add_to_cart_form(cart, product): variant = product.variants.get() add_variant_to_cart(cart, variant, 3) data = {'quantity': 1} form = forms.AddToCartForm(data=data, cart=cart, product=product) form.get_variant = Mock(return_value=variant) assert form.is_valid() form.save() assert cart.lines.count() == 1 assert cart.lines.filter(variant=variant).exists() with pytest.raises(NotImplementedError): data = {'quantity': 1} form = forms.AddToCartForm(data=data, cart=cart, product=product) form.is_valid() data = {} form = forms.AddToCartForm(data=data, cart=cart, product=product) assert not form.is_valid()
def test_check_product_availability_and_warn( monkeypatch, cart, product): variant = product.variants.get() add_variant_to_cart(cart, variant) monkeypatch.setattr( 'django.contrib.messages.warning', Mock(warning=Mock())) monkeypatch.setattr( 'saleor.checkout.utils.contains_unavailable_variants', Mock(return_value=False)) utils.check_product_availability_and_warn(MagicMock(), cart) assert len(cart) == 1 monkeypatch.setattr( 'saleor.checkout.utils.contains_unavailable_variants', Mock(return_value=True)) monkeypatch.setattr( 'saleor.checkout.utils.remove_unavailable_variants', lambda c: add_variant_to_cart(cart, variant, 0, replace=True)) utils.check_product_availability_and_warn(MagicMock(), cart) assert len(cart) == 0
def cart_with_item(cart, product): variant = product.variants.get() add_variant_to_cart(cart, variant, 3) cart.save() return cart
def request_cart_with_item(product, request_cart): variant = product.variants.get() add_variant_to_cart(request_cart, variant) return request_cart
def request_cart_with_item(product, request_cart): variant = product.variants.get() add_variant_to_cart(request_cart, variant) return request_cart
def test_shipping_detection(cart, product): assert not cart.is_shipping_required() variant = product.variants.get() add_variant_to_cart(cart, variant, replace=True) assert cart.is_shipping_required()
def test_getting_line(cart, product): variant = product.variants.get() assert cart.get_line(variant) is None add_variant_to_cart(cart, variant) assert cart.lines.get() == cart.get_line(variant)
def test_adding_invalid_quantity(cart, product): variant = product.variants.get() with pytest.raises(ValueError): add_variant_to_cart(cart, variant, -1)
def test_replacing_same_variant(cart, product): variant = product.variants.get() add_variant_to_cart(cart, variant, 1, replace=True) add_variant_to_cart(cart, variant, 2, replace=True) assert len(cart) == 1 assert cart.quantity == 2
def cart_with_item(cart, product): variant = product.variants.get() add_variant_to_cart(cart, variant, 3) cart.save() return cart
def test_adding_zero_quantity(cart, product): variant = product.variants.get() add_variant_to_cart(cart, variant, 0) assert len(cart) == 0
def test_adding_without_checking(cart, product): variant = product.variants.get() add_variant_to_cart(cart, variant, 1000, check_quantity=False) assert len(cart) == 1