mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-03-01 02:03:22 +00:00
Don't update order when not enough stock
There's a user-facing change here. When you tried to update the quantity of a line item beyond available stock, two things used to happen: 1. A warning was displayed. 2. The item's quantity was updated to the highest possible. Unfortunately, the logic to update the line item was also reloading the page and the warning message disappeared before it could be acknowledged. The easiest fix was to skip the update request. And in my opinion, it's even better to let the user decide if they still want to update or cancel the update. Eventually, we want to replace all this custom Javascript logic with StimulusJS anyway. So let's not put too much effort into this. It was important though to resolve the flaky spec which made many builds fail.
This commit is contained in:
@@ -51,10 +51,10 @@ $(document).ready(function() {
|
||||
quantity = maxQuantity;
|
||||
save.parents('tr').find('input.line_item_quantity').val(maxQuantity);
|
||||
ofnAlert(t("js.admin.orders.quantity_adjusted"));
|
||||
} else {
|
||||
adjustItems(shipment_number, variant_id, quantity, true);
|
||||
}
|
||||
toggleItemEdit();
|
||||
|
||||
adjustItems(shipment_number, variant_id, quantity, true);
|
||||
return false;
|
||||
}
|
||||
$('a.save-item').click(handle_save_click);
|
||||
|
||||
@@ -339,34 +339,27 @@ describe '
|
||||
login_as_admin
|
||||
visit spree.edit_admin_order_path(order)
|
||||
|
||||
quantity = order.line_items.first.quantity
|
||||
max_quantity = 0
|
||||
item = order.line_items.first
|
||||
quantity = item.quantity
|
||||
max_quantity = quantity + item.variant.on_hand
|
||||
total = order.display_total
|
||||
|
||||
within("tr.stock-item", text: order.products.first.name) do
|
||||
find("a.edit-item").click
|
||||
expect(page).to have_input(:quantity)
|
||||
max_quantity = find("input[name='quantity']")["max"].to_i
|
||||
fill_in(:quantity, with: max_quantity + 1)
|
||||
find("a.save-item").click
|
||||
end
|
||||
|
||||
pending "Reload bug"
|
||||
# The following modal is displayed but disappears straight away because the
|
||||
# page is reloaded after the click on the save button. Somehow this happens
|
||||
# only the first time the page is loaded and after that this logic seems to
|
||||
# work fine.
|
||||
sleep 1
|
||||
within(".modal") do
|
||||
expect(page).to have_content "Quantity unchanged from previous amount"
|
||||
expect(page).to have_content "Insufficient stock available"
|
||||
click_on "OK"
|
||||
end
|
||||
|
||||
expect(page).to_not have_content "Loading..."
|
||||
within("tr.stock-item", text: order.products.first.name) do
|
||||
expect(page).to have_text(max_quantity.to_s)
|
||||
expect(page).to have_field :quantity, with: max_quantity.to_s
|
||||
end
|
||||
expect(order.reload.line_items.first.quantity).to eq(max_quantity)
|
||||
expect { item.reload }.to_not change { item.quantity }
|
||||
end
|
||||
|
||||
it "there are infinite items available (variant is on demand)" do
|
||||
|
||||
Reference in New Issue
Block a user