Beispiel #1
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
Beispiel #2
0
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
Beispiel #3
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
Beispiel #4
0
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
Beispiel #5
0
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)
Beispiel #6
0
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')
Beispiel #7
0
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')
Beispiel #8
0
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
Beispiel #9
0
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
Beispiel #10
0
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)
Beispiel #11
0
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
Beispiel #12
0
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
Beispiel #13
0
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
Beispiel #14
0
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
Beispiel #15
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()
Beispiel #16
0
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
Beispiel #17
0
def cart_with_item(cart, product):
    variant = product.variants.get()
    add_variant_to_cart(cart, variant, 3)
    cart.save()
    return cart
Beispiel #18
0
def request_cart_with_item(product, request_cart):
    variant = product.variants.get()
    add_variant_to_cart(request_cart, variant)
    return request_cart
Beispiel #19
0
def request_cart_with_item(product, request_cart):
    variant = product.variants.get()
    add_variant_to_cart(request_cart, variant)
    return request_cart
Beispiel #20
0
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()
Beispiel #21
0
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)
Beispiel #22
0
def test_adding_invalid_quantity(cart, product):
    variant = product.variants.get()
    with pytest.raises(ValueError):
        add_variant_to_cart(cart, variant, -1)
Beispiel #23
0
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
Beispiel #24
0
def cart_with_item(cart, product):
    variant = product.variants.get()
    add_variant_to_cart(cart, variant, 3)
    cart.save()
    return cart
Beispiel #25
0
def test_adding_zero_quantity(cart, product):
    variant = product.variants.get()
    add_variant_to_cart(cart, variant, 0)
    assert len(cart) == 0
Beispiel #26
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