Example #1
0
def test_get_cart_from_request(monkeypatch, customer_user,
                               cart_request_factory):
    queryset = Cart.objects.all()
    token = uuid4()
    request = cart_request_factory(user=customer_user, token=token)
    user_cart = Cart(user=customer_user)
    mock_get_for_user = Mock(return_value=user_cart)
    monkeypatch.setattr('saleor.cart.utils.get_user_cart', mock_get_for_user)
    returned_cart = utils.get_cart_from_request(request, queryset)
    mock_get_for_user.assert_called_once_with(customer_user, queryset)
    assert returned_cart == user_cart

    assert list(returned_cart.discounts) == list(request.discounts)

    mock_get_for_user = Mock(return_value=None)
    monkeypatch.setattr('saleor.cart.utils.get_user_cart', mock_get_for_user)
    returned_cart = utils.get_cart_from_request(request, queryset)
    mock_get_for_user.assert_called_once_with(customer_user, queryset)
    assert not Cart.objects.filter(token=returned_cart.token).exists()

    anonymous_cart = Cart()
    mock_get_for_anonymous = Mock(return_value=anonymous_cart)
    monkeypatch.setattr('saleor.cart.utils.get_anonymous_cart_from_token',
                        mock_get_for_anonymous)
    request = cart_request_factory(user=None, token=token)
    returned_cart = utils.get_cart_from_request(request, queryset)
    mock_get_for_user.assert_called_once_with(customer_user, queryset)
    assert returned_cart == anonymous_cart

    mock_get_for_anonymous = Mock(return_value=None)
    monkeypatch.setattr('saleor.cart.utils.get_anonymous_cart_from_token',
                        mock_get_for_anonymous)
    returned_cart = utils.get_cart_from_request(request, queryset)
    assert not Cart.objects.filter(token=returned_cart.token).exists()
Example #2
0
def test_cart_repr():
    cart = Cart()

    assert repr(cart) == 'Cart(quantity=0)'

    cart.quantity = 1

    assert repr(cart) == 'Cart(quantity=1)'
Example #3
0
def test_get_user_open_cart(customer_user, opened_user_cart):

    assert Cart.get_user_open_cart(customer_user) == opened_user_cart

    cart = Cart.objects.create(user=customer_user)

    assert Cart.get_user_open_cart(customer_user) == cart
    assert Cart.objects.get(pk=opened_user_cart.pk).status == CartStatus.CANCELED
Example #4
0
def test_cart_repr():
    cart = Cart()

    assert repr(cart) == 'Cart(quantity=0)'

    cart.quantity = 1

    assert repr(cart) == 'Cart(quantity=1)'
Example #5
0
def test_get_user_open_cart(customer_user, opened_user_cart):

    assert Cart.get_user_open_cart(customer_user) == opened_user_cart

    cart = Cart.objects.create(user=customer_user)

    assert Cart.get_user_open_cart(customer_user) == cart
    assert Cart.objects.get(
        pk=opened_user_cart.pk).status == CartStatus.CANCELED
Example #6
0
def test_stock_allocation(billing_address, product_in_stock):
    variant = product_in_stock.variants.get()
    cart = Cart()
    cart.save()
    cart.add(variant, quantity=2)
    order = models.Order.objects.create(billing_address=billing_address)
    delivery_group = models.DeliveryGroup.objects.create(order=order)
    add_items_to_delivery_group(delivery_group, cart.lines.all())
    order_line = delivery_group.items.get()
    stock = order_line.stock
    assert stock.quantity_allocated == 2
Example #7
0
def test_cant_process_shipped_delivery_group(
        delivery_group, product_in_stock):
    delivery_group.ship()
    delivery_group.save()

    variant = product_in_stock.variants.get()
    cart = Cart()
    cart.save()
    cart.add(variant, quantity=2)

    with pytest.raises(TransitionNotAllowed):
        delivery_group.process(cart.lines.all())
Example #8
0
def test_process_new_delivery_group(billing_address, product_in_stock):
    variant = product_in_stock.variants.get()
    cart = Cart()
    cart.save()
    cart.add(variant, quantity=2)
    order = Order.objects.create(billing_address=billing_address)
    group = DeliveryGroup.objects.create(order=order)

    group.process(cart.lines.all())
    group.save()

    assert group.status == GroupStatus.NEW
    order_line = group.lines.get()
    stock = order_line.stock
    assert stock.quantity_allocated == 2
Example #9
0
def test_get_cart_permalink(client: Client, request_cart_with_item: Cart):
    url = reverse('cart:get-cart-permalink')
    variant = request_cart_with_item.lines.first().variant

    response = client.get(url, data={'was_expecting_csrf_token': 0})
    assert response.status_code == 404

    response = client.post(url, data={'was_expecting_csrf_token': 1})
    assert response.status_code == 200
    assert 'value="http://testserver/cart/get/{.pk}-1/"' \
           ''.format(variant) in response.content.decode('utf-8')

    request_cart_with_item.clear()
    response = client.post(url, data={'was_expecting_csrf_token': 1})
    assert response.status_code == 404
Example #10
0
def test_get_cart_from_request_authenticated_no_cart(django_user_model):
    token = Cart().token
    request = get_request(django_user_model,
                          authenticated=True,
                          cookie_token=token)
    user_cart = decorators.get_cart_from_request(request, create=True)
    assert user_cart.token == token
Example #11
0
def test_get_cart_from_request_authenticated(django_user_model):
    token = Cart().token
    request = get_request(django_user_model, authenticated=True,
                          cookie_token=token)
    cart = Cart.objects.create(user=request.user, status=Cart.OPEN, token=token)
    user_cart = decorators.get_cart_from_request(request)
    assert cart.token == user_cart.token
Example #12
0
def test_get_or_empty_db_cart(rf, monkeypatch):
    request = rf.get('/')
    empty_cart = Cart()
    monkeypatch.setattr(decorators, 'get_cart_from_request',
                        lambda req, cart_queryset: empty_cart)
    decorated_view = get_or_empty_db_cart()(lambda req, cart: cart)
    view_cart = decorated_view(request)
    assert view_cart.pk == empty_cart.pk
Example #13
0
def test_get_cart_from_request_anonymous(monkeypatch):
    request = Mock(user=AnonymousUser(), discounts=[])
    empty_cart = Cart()
    qs_mock = Mock(return_value=[empty_cart])
    qs_mock.get.return_value = empty_cart
    qs_mock.open.return_value = qs_mock
    monkeypatch.setattr(Cart.objects, 'anonymous', lambda: qs_mock)
    cart = decorators.get_cart_from_request(request)
    assert cart.pk == empty_cart.pk
Example #14
0
def test_get_or_create_db_cart(monkeypatch, django_user_model):
    empty_cart = Cart()
    request = get_request(django_user_model, authenticated=True,
                          cookie_token=empty_cart.token)
    monkeypatch.setattr(decorators, 'get_cart_from_request',
                        lambda r, create: empty_cart)
    decorated_view = decorators.get_or_create_db_cart(lambda r, c: c)
    response_cart = decorated_view(request)
    assert response_cart.token == empty_cart.token
Example #15
0
def test_get_cart_from_request_anonymous(monkeypatch):
    request = Mock(user=AnonymousUser(), discounts=[])
    empty_cart = Cart()
    qs_mock = Mock(return_value=[empty_cart])
    qs_mock.get.return_value = empty_cart
    qs_mock.open.return_value = qs_mock
    qs_mock.filter.return_value = qs_mock
    cart = decorators.get_cart_from_request(request, cart_queryset=qs_mock)
    assert cart.pk == empty_cart.pk
Example #16
0
def test_assign_anonymous_cart(authenticated, method_called,
                               django_user_model, monkeypatch):
    token = Cart().token
    request = get_request(django_user_model, authenticated=authenticated,
                          cookie_token=token)
    find_and_assign = Mock()
    monkeypatch.setattr(decorators, 'find_and_assign_cart', find_and_assign)
    decorated_view = decorators.assign_anonymous_cart(lambda req: Mock())
    decorated_view(request)
    assert find_and_assign.called is method_called
Example #17
0
def test_get_or_create_cart_from_request(cart_request_factory, monkeypatch,
                                         customer_user):
    token = uuid4()
    queryset = Cart.objects.all()
    request = cart_request_factory(user=customer_user, token=token)
    user_cart = Cart(user=customer_user)
    anonymous_cart = Cart()
    mock_get_for_user = Mock(return_value=user_cart)
    mock_get_for_anonymous = Mock(return_value=anonymous_cart)
    monkeypatch.setattr('saleor.cart.utils.get_or_create_user_cart',
                        mock_get_for_user)
    monkeypatch.setattr(
        'saleor.cart.utils.get_or_create_anonymous_cart_from_token',
        mock_get_for_anonymous)
    returned_cart = utils.get_or_create_cart_from_request(request, queryset)
    mock_get_for_user.assert_called_once_with(customer_user, queryset)
    assert returned_cart == user_cart

    request = cart_request_factory(user=None, token=token)
    returned_cart = utils.get_or_create_cart_from_request(request, queryset)
    mock_get_for_anonymous.assert_called_once_with(token, queryset)
    assert returned_cart == anonymous_cart
Example #18
0
def test_cant_process_shipped_delivery_group(delivery_group, product_in_stock):
    delivery_group.ship()
    delivery_group.save()

    variant = product_in_stock.variants.get()
    cart = Cart()
    cart.save()
    cart.add(variant, quantity=2)

    with pytest.raises(TransitionNotAllowed):
        delivery_group.process(cart.lines.all())
Example #19
0
def test_stock_allocation(billing_address, product_in_stock):
    variant = product_in_stock.variants.get()
    cart = Cart()
    cart.save()
    cart.add(variant, quantity=2)
    order = models.Order.objects.create(billing_address=billing_address)
    delivery_group = models.DeliveryGroup.objects.create(order=order)
    delivery_group.add_items_from_partition(cart)
    order_line = delivery_group.items.get()
    stock = order_line.stock
    assert stock.quantity_allocated == 2
Example #20
0
def get_cart_from_request(request, cart_queryset=Cart.objects.all()):
    """Get cart from database or return unsaved Cart
    :type cart_queryset: saleor.cart.models.CartQueryset
    :type request: django.http.HttpRequest
    :rtype: Cart
    """
    if request.user.is_authenticated():
        cart = get_user_cart(request.user, cart_queryset)
        user = request.user
    else:
        token = request.get_signed_cookie(COOKIE_NAME, default=None)
        cart = get_anonymous_cart_from_token(token, cart_queryset)
        user = None
    if cart is not None:
        return cart
    else:
        return Cart(user=user)
Example #21
0
def test_process_new_delivery_group(billing_address, product_in_stock):
    variant = product_in_stock.variants.get()
    cart = Cart()
    cart.save()
    cart.add(variant, quantity=2)
    order = Order.objects.create(billing_address=billing_address)
    group = DeliveryGroup.objects.create(order=order)

    group.process(cart.lines.all())
    group.save()

    assert group.status == GroupStatus.NEW
    order_line = group.lines.get()
    stock = order_line.stock
    assert stock.quantity_allocated == 2
Example #22
0
    decorated_view = decorators.get_or_create_db_cart(lambda r, c: c)
    response_cart = decorated_view(request)
    assert response_cart.token == empty_cart.token


def test_find_and_assign_cart(django_user_model):
    cart = Cart.objects.create(user=None, status=Cart.OPEN)
    request = get_request(django_user_model, authenticated=True,
                          cookie_token=cart.token)
    decorators.find_and_assign_cart(request, response=Mock())
    cart = Cart.objects.get(token=cart.token)
    assert cart.user == request.user


@pytest.mark.parametrize('token', [
    Cart().token, None
])
def test_find_and_assign_cart_cart_missing(token, django_user_model):
    request = get_request(django_user_model, authenticated=True,
                          cookie_token=token)
    decorators.find_and_assign_cart(request, response=Mock())
    assert Cart.objects.filter(user=request.user).exists() is False


def test_get_or_empty_db_cart(rf, monkeypatch):
    request = rf.get('/')
    empty_cart = Cart()
    monkeypatch.setattr(decorators, 'get_cart_from_request',
                        lambda req: empty_cart)
    decorated_view = get_or_empty_db_cart(lambda req, cart: cart)
    view_cart = decorated_view(request)
Example #23
0
    decorated_view = decorators.get_or_create_db_cart()(lambda r, c: c)
    response_cart = decorated_view(request)
    assert response_cart.token == empty_cart.token


def test_find_and_assign_cart(django_user_model):
    cart = Cart.objects.create(user=None, status=Cart.OPEN)
    request = get_request(django_user_model,
                          authenticated=True,
                          cookie_token=cart.token)
    decorators.find_and_assign_cart(request, response=Mock())
    cart = Cart.objects.get(token=cart.token)
    assert cart.user == request.user


@pytest.mark.parametrize('token', [Cart().token, None])
def test_find_and_assign_cart_cart_missing(token, django_user_model):
    request = get_request(django_user_model,
                          authenticated=True,
                          cookie_token=token)
    decorators.find_and_assign_cart(request, response=Mock())
    assert Cart.objects.filter(user=request.user).exists() is False


def test_get_or_empty_db_cart(rf, monkeypatch):
    request = rf.get('/')
    empty_cart = Cart()
    monkeypatch.setattr(decorators, 'get_cart_from_request',
                        lambda req, cart_queryset: empty_cart)
    decorated_view = get_or_empty_db_cart()(lambda req, cart: cart)
    view_cart = decorated_view(request)