def test_contains_unavailable_variants(): missing_variant = Mock(check_quantity=Mock(side_effect=InsufficientStock(""))) checkout = MagicMock() checkout.__iter__ = Mock(return_value=iter([Mock(variant=missing_variant)])) assert utils.contains_unavailable_variants(checkout) variant = Mock(check_quantity=Mock()) checkout.__iter__ = Mock(return_value=iter([Mock(variant=variant)])) assert not utils.contains_unavailable_variants(checkout)
def test_contains_unavailable_variants(): missing_variant = Mock(check_quantity=Mock( side_effect=InsufficientStock(''))) cart = MagicMock() cart.lines.all.return_value = [Mock(variant=missing_variant)] assert utils.contains_unavailable_variants(cart) variant = Mock(check_quantity=Mock()) cart.lines.all.return_value = [Mock(variant=variant)] assert not utils.contains_unavailable_variants(cart)
def test_add_to_cart_form_when_insufficient_stock(): cart_lines = [] cart = Mock(add=lambda variant, quantity: cart_lines.append(variant), get_line=Mock(return_value=Mock(quantity=1))) form = forms.AddToCartForm(data={'quantity': 1}, cart=cart, product=Mock()) exception_mock = InsufficientStock( Mock(get_stock_quantity=Mock(return_value=4))) product_variant = Mock(check_quantity=Mock(side_effect=exception_mock)) form.get_variant = Mock(return_value=product_variant) assert not form.is_valid()
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_order_fulfill_warehouse_with_insufficient_stock_exception( mock_create_fulfillments, staff_api_client, order_with_lines, permission_manage_orders, warehouse_no_shipping_zone, ): order = order_with_lines query = ORDER_FULFILL_QUERY order_id = graphene.Node.to_global_id("Order", order.id) order_line = order.lines.first() order_line_id = graphene.Node.to_global_id("OrderLine", order_line.id) warehouse_id = graphene.Node.to_global_id("Warehouse", warehouse_no_shipping_zone.pk) variables = { "order": order_id, "input": { "lines": [{ "orderLineId": order_line_id, "stocks": [{ "quantity": 1, "warehouse": warehouse_id }], }] }, } error_context = { "order_line": order_line, "warehouse_pk": str(warehouse_no_shipping_zone.pk), } mock_create_fulfillments.side_effect = InsufficientStock( order_line.variant, error_context) response = staff_api_client.post_graphql( query, variables, permissions=[permission_manage_orders]) content = get_graphql_content(response) data = content["data"]["orderFulfill"] assert data["orderErrors"] error = data["orderErrors"][0] assert error["field"] == "stocks" assert error["code"] == OrderErrorCode.INSUFFICIENT_STOCK.name assert error["orderLine"] == order_line_id assert error["warehouse"] == warehouse_id