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()
def test_cart_repr(): cart = Cart() assert repr(cart) == 'Cart(quantity=0)' cart.quantity = 1 assert repr(cart) == 'Cart(quantity=1)'
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
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
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
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())
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
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
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
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
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
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
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
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
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
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
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())
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
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)
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)
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)