From cf8d9c6d07b74ec30ed920ade6e1d3b639ab9702 Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Bellet Date: Wed, 15 Feb 2023 11:38:04 +0100 Subject: [PATCH 1/3] Improve spec when deleting all items of an order - Order1 has two line items - Check other Order2 does not change its state - Prepare context for the second spec: delete one line item of an order that does not trigger any order cancellation --- .../admin/bulk_order_management_spec.rb | 50 +++++++++++-------- 1 file changed, 30 insertions(+), 20 deletions(-) diff --git a/spec/system/admin/bulk_order_management_spec.rb b/spec/system/admin/bulk_order_management_spec.rb index 6118c66674..536d8cf98b 100644 --- a/spec/system/admin/bulk_order_management_spec.rb +++ b/spec/system/admin/bulk_order_management_spec.rb @@ -720,6 +720,7 @@ describe ' completed_at: Time.zone.now ) } let!(:li1) { create(:line_item_with_shipment, order: o1 ) } + let!(:li11) { create(:line_item_with_shipment, order: o1 ) } let!(:li2) { create(:line_item_with_shipment, order: o2 ) } before :each do @@ -753,27 +754,36 @@ describe ' end context "performing actions" do - it "deletes selected items" do - expect(page).to have_selector "tr#li_#{li1.id}" - expect(page).to have_selector "tr#li_#{li2.id}" - within("tr#li_#{li2.id} td.bulk") do - check "bulk" - end - - find("div#bulk-actions-dropdown").click - find("div#bulk-actions-dropdown div.menu_item", text: "Delete Selected" ).click - - expect(page).to have_content "This operation will result in one or more empty orders, which will be cancelled. Do you wish to proceed?" - - expect do - within(".modal") do - check("send_cancellation_email") - click_on("OK") - end + context "deletes selected items" do + it "displays a confirmation dialog when deleting one or more items leads to order cancelation" do expect(page).to have_selector "tr#li_#{li1.id}" - expect(page).to have_no_selector "tr#li_#{li2.id}" - expect(o2.reload.state).to eq("canceled") - end.to have_enqueued_mail(Spree::OrderMailer, :cancel_email) + expect(page).to have_selector "tr#li_#{li11.id}" + within("tr#li_#{li1.id} td.bulk") do + check "bulk" + end + within("tr#li_#{li11.id} td.bulk") do + check "bulk" + end + + find("div#bulk-actions-dropdown").click + find("div#bulk-actions-dropdown div.menu_item", text: "Delete Selected" ).click + + expect(page).to have_content "This operation will result in one or more empty orders, which will be cancelled. Do you wish to proceed?" + + expect do + within(".modal") do + check("send_cancellation_email") + click_on("OK") + end + # order 1 should be canceled + expect(page).to have_no_selector "tr#li_#{li1.id}" + expect(page).to have_no_selector "tr#li_#{li11.id}" + expect(o1.reload.state).to eq("canceled") + # order 2 should not be canceled + expect(page).to have_selector "tr#li_#{li2.id}" + expect(o2.reload.state).to eq("complete") + end.to have_enqueued_mail(Spree::OrderMailer, :cancel_email) + end end end From e5ca8b0ee1009c49d69edc0fb670b563b6c51521 Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Bellet Date: Wed, 15 Feb 2023 11:49:53 +0100 Subject: [PATCH 2/3] Delete selected line items even if does not lead to order cancellation --- .../controllers/line_items_controller.js.coffee | 2 ++ spec/system/admin/bulk_order_management_spec.rb | 17 +++++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/app/assets/javascripts/admin/line_items/controllers/line_items_controller.js.coffee b/app/assets/javascripts/admin/line_items/controllers/line_items_controller.js.coffee index d2dc108464..fabceb33bc 100644 --- a/app/assets/javascripts/admin/line_items/controllers/line_items_controller.js.coffee +++ b/app/assets/javascripts/admin/line_items/controllers/line_items_controller.js.coffee @@ -150,6 +150,8 @@ angular.module("admin.lineItems").controller 'LineItemsCtrl', ($scope, $timeout, else Promise.all(LineItems.delete(item) for item in items).then(-> $scope.refreshData()) , "js.admin.deleting_item_will_cancel_order") + else + Promise.all(LineItems.delete(item) for item in lineItemsToDelete).then(-> $scope.refreshData()) $scope.allBoxesChecked = -> checkedCount = $scope.filteredLineItems.reduce (count,lineItem) -> diff --git a/spec/system/admin/bulk_order_management_spec.rb b/spec/system/admin/bulk_order_management_spec.rb index 536d8cf98b..7a13b77ec8 100644 --- a/spec/system/admin/bulk_order_management_spec.rb +++ b/spec/system/admin/bulk_order_management_spec.rb @@ -784,6 +784,23 @@ describe ' expect(o2.reload.state).to eq("complete") end.to have_enqueued_mail(Spree::OrderMailer, :cancel_email) end + + it "deletes one line item and do not show any popup if it does not lead to order cancelation" do + expect(page).to have_selector "tr#li_#{li1.id}" + within("tr#li_#{li1.id} td.bulk") do + check "bulk" + end + + find("div#bulk-actions-dropdown").click + find("div#bulk-actions-dropdown div.menu_item", text: "Delete Selected" ).click + + expect(page).to have_content "Loading orders" + + expect(page).to have_no_selector ".modal" + expect(page).to have_no_selector "tr#li_#{li1.id}" + expect(page).to have_selector "tr#li_#{li11.id}" + expect(o1.reload.state).to eq("complete") + end end end From c83dac58a3409e9f623913689b9d2cedc66287a9 Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Bellet Date: Mon, 27 Feb 2023 11:02:16 +0100 Subject: [PATCH 3/3] Confirm line items deletion that doesn't trigger an order cancelation --- .../controllers/line_items_controller.js.coffee | 4 +++- .../admin/spree/orders/variant_autocomplete.js.erb | 12 ++++++++++++ config/locales/en.yml | 3 +++ spec/system/admin/bulk_order_management_spec.rb | 7 ++++++- 4 files changed, 24 insertions(+), 2 deletions(-) diff --git a/app/assets/javascripts/admin/line_items/controllers/line_items_controller.js.coffee b/app/assets/javascripts/admin/line_items/controllers/line_items_controller.js.coffee index fabceb33bc..5614c2046f 100644 --- a/app/assets/javascripts/admin/line_items/controllers/line_items_controller.js.coffee +++ b/app/assets/javascripts/admin/line_items/controllers/line_items_controller.js.coffee @@ -151,7 +151,9 @@ angular.module("admin.lineItems").controller 'LineItemsCtrl', ($scope, $timeout, Promise.all(LineItems.delete(item) for item in items).then(-> $scope.refreshData()) , "js.admin.deleting_item_will_cancel_order") else - Promise.all(LineItems.delete(item) for item in lineItemsToDelete).then(-> $scope.refreshData()) + ofnDeleteLineItemsAlert(() -> + Promise.all(LineItems.delete(item) for item in lineItemsToDelete).then(-> $scope.refreshData()) + , lineItemsToDelete.length) $scope.allBoxesChecked = -> checkedCount = $scope.filteredLineItems.reduce (count,lineItem) -> diff --git a/app/assets/javascripts/admin/spree/orders/variant_autocomplete.js.erb b/app/assets/javascripts/admin/spree/orders/variant_autocomplete.js.erb index bc3dd5738c..175942b859 100644 --- a/app/assets/javascripts/admin/spree/orders/variant_autocomplete.js.erb +++ b/app/assets/javascripts/admin/spree/orders/variant_autocomplete.js.erb @@ -250,6 +250,18 @@ ofnCancelOrderAlert = function(callback, i18nKey) { $('#custom-confirm').show(); } +ofnDeleteLineItemsAlert = function(callback, count) { + $('#custom-confirm .message').html(`${t("js.admin.orders.delete_line_items_html", {count: count})}`); + $('#custom-confirm button.confirm').click(() => { + $('#custom-confirm').hide(); + callback(); + }); + $('#custom-confirm button.cancel').click(() => { + $('#custom-confirm').hide(); + }); + $('#custom-confirm').show(); +} + ofnConfirm = function(callback) { $('#custom-confirm .message').html( ` ${t("are_you_sure")} diff --git a/config/locales/en.yml b/config/locales/en.yml index 019042608e..640328ea32 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -3236,6 +3236,9 @@ See the %{link} to find out more about %{sitename}'s features and to start using cancel_the_order_send_cancelation_email: "Send a cancellation email to the customer" restock_item: "Restock Items: return this item to stock" restock_items: "Restock Items: return all items to stock" + delete_line_items_html: + one: "This will delete one line item from the order.
Are you sure you want to proceed?" + other: "This will delete %{count} line items from the order.
Are you sure you want to proceed?" resend_user_email_confirmation: resend: "Resend" sending: "Resend..." diff --git a/spec/system/admin/bulk_order_management_spec.rb b/spec/system/admin/bulk_order_management_spec.rb index 7a13b77ec8..e2345a5561 100644 --- a/spec/system/admin/bulk_order_management_spec.rb +++ b/spec/system/admin/bulk_order_management_spec.rb @@ -785,7 +785,7 @@ describe ' end.to have_enqueued_mail(Spree::OrderMailer, :cancel_email) end - it "deletes one line item and do not show any popup if it does not lead to order cancelation" do + it "deletes one line item should show modal confirmation about this line item deletion and not about order cancelation" do expect(page).to have_selector "tr#li_#{li1.id}" within("tr#li_#{li1.id} td.bulk") do check "bulk" @@ -794,6 +794,11 @@ describe ' find("div#bulk-actions-dropdown").click find("div#bulk-actions-dropdown div.menu_item", text: "Delete Selected" ).click + within ".modal" do + expect(page).to have_content "This will delete one line item from the order. Are you sure you want to proceed?" + click_on "OK" + end + expect(page).to have_content "Loading orders" expect(page).to have_no_selector ".modal"