From 4085c441bd5a06ac522571428730db4645144cbd Mon Sep 17 00:00:00 2001 From: benjamin wil Date: Fri, 28 Feb 2025 10:42:24 -0800 Subject: [PATCH 1/8] Add `:order_canceled` event This event fires when the order `#cancel!` event is fired as part of the stock order state machine events. Co-Authored-By: Adam Mueller --- core/app/models/spree/order.rb | 2 ++ core/lib/spree/core/engine.rb | 1 + core/spec/models/spree/order_spec.rb | 11 ++++++++++- core/spec/rails_helper.rb | 2 ++ 4 files changed, 15 insertions(+), 1 deletion(-) diff --git a/core/app/models/spree/order.rb b/core/app/models/spree/order.rb index 75fbca4d8b2..3de085616a7 100644 --- a/core/app/models/spree/order.rb +++ b/core/app/models/spree/order.rb @@ -848,6 +848,8 @@ def after_cancel send_cancel_email update_column(:canceled_at, Time.current) recalculate + + Spree::Bus.publish :order_canceled, order: self end def cancel_shipments! diff --git a/core/lib/spree/core/engine.rb b/core/lib/spree/core/engine.rb index 9f37c1c65d5..b7c37b08ade 100644 --- a/core/lib/spree/core/engine.rb +++ b/core/lib/spree/core/engine.rb @@ -61,6 +61,7 @@ class Engine < ::Rails::Engine Spree::Bus.clear %i[ + order_canceled order_emptied order_finalized order_recalculated diff --git a/core/spec/models/spree/order_spec.rb b/core/spec/models/spree/order_spec.rb index 80acd6658cf..bec34d499db 100644 --- a/core/spec/models/spree/order_spec.rb +++ b/core/spec/models/spree/order_spec.rb @@ -82,9 +82,18 @@ end describe "#cancel!" do - let!(:order) { create(:completed_order_with_totals) } subject { order.cancel! } + let!(:order) { create(:completed_order_with_totals) } + + it "publishes a 'order_canceled' event" do + stub_spree_bus + + subject + + expect(:order_canceled).to have_been_published.with(order:) + end + it "sends a cancel email" do perform_enqueued_jobs { subject } diff --git a/core/spec/rails_helper.rb b/core/spec/rails_helper.rb index f3b6e161509..fcb0ec82616 100644 --- a/core/spec/rails_helper.rb +++ b/core/spec/rails_helper.rb @@ -16,6 +16,7 @@ Dir["./spec/support/**/*.rb"].sort.each { |f| require f } +require 'spree/testing_support/bus_helpers' require 'spree/testing_support/factory_bot' require 'spree/testing_support/preferences' require 'spree/testing_support/rake' @@ -45,6 +46,7 @@ Rails.cache.clear end + config.include Spree::TestingSupport::BusHelpers config.include Spree::TestingSupport::JobHelpers config.include FactoryBot::Syntax::Methods From 1ae53361a8512c6f0a1bb24a64a76b9e840c4cbf Mon Sep 17 00:00:00 2001 From: benjamin wil Date: Fri, 28 Feb 2025 10:51:01 -0800 Subject: [PATCH 2/8] Add `:order_short_shipped` event This event fires when `OrderCancellations#short_ship` is fired when an an inventory unit is canceled from an order. Co-Authored-By: Adam Mueller --- core/app/models/spree/order_cancellations.rb | 1 + core/lib/spree/core/engine.rb | 1 + core/spec/models/spree/order_cancellations_spec.rb | 9 +++++++++ 3 files changed, 11 insertions(+) diff --git a/core/app/models/spree/order_cancellations.rb b/core/app/models/spree/order_cancellations.rb index 9c0a25c7e4d..343e2d2f321 100644 --- a/core/app/models/spree/order_cancellations.rb +++ b/core/app/models/spree/order_cancellations.rb @@ -50,6 +50,7 @@ def short_ship(inventory_units, created_by: nil) end end + Spree::Bus.publish(:order_short_shipped, order: @order, inventory_units:) unit_cancels end diff --git a/core/lib/spree/core/engine.rb b/core/lib/spree/core/engine.rb index b7c37b08ade..5ae65661d39 100644 --- a/core/lib/spree/core/engine.rb +++ b/core/lib/spree/core/engine.rb @@ -65,6 +65,7 @@ class Engine < ::Rails::Engine order_emptied order_finalized order_recalculated + order_short_shipped reimbursement_reimbursed reimbursement_errored ].each { |event_name| Spree::Bus.register(event_name) } diff --git a/core/spec/models/spree/order_cancellations_spec.rb b/core/spec/models/spree/order_cancellations_spec.rb index a120078b98e..32e81dc820b 100644 --- a/core/spec/models/spree/order_cancellations_spec.rb +++ b/core/spec/models/spree/order_cancellations_spec.rb @@ -94,6 +94,15 @@ expect { subject }.to change { order.shipment_state }.from('ready').to('shipped') end + it "publishes an 'order_short_shipped' event" do + stub_spree_bus + + subject + + expect(:order_short_shipped) + .to have_been_published.with(order:, inventory_units: [inventory_unit]) + end + it "adjusts the order" do expect { subject }.to change { order.reload.total }.by(-10.0) end From 003cb78eeb7fb4b378519745966585d5d8538654 Mon Sep 17 00:00:00 2001 From: benjamin wil Date: Fri, 28 Feb 2025 11:00:04 -0800 Subject: [PATCH 3/8] Add `:carton_shipped` event This adds a `:carton_shipped` event that is published whenever `OrderShipping#ship` succeeds to mark a carton as shipped. Co-Authored-By: Adam Mueller --- core/app/models/spree/order_shipping.rb | 1 + core/lib/spree/core/engine.rb | 1 + core/spec/models/spree/order_shipping_spec.rb | 6 ++++++ 3 files changed, 8 insertions(+) diff --git a/core/app/models/spree/order_shipping.rb b/core/app/models/spree/order_shipping.rb index bfab5ecb910..3b854bc03e4 100644 --- a/core/app/models/spree/order_shipping.rb +++ b/core/app/models/spree/order_shipping.rb @@ -72,6 +72,7 @@ def ship(inventory_units:, stock_location:, address:, shipping_method:, @order.shipments.reload @order.recalculate + Spree::Bus.publish(:carton_shipped, carton:) carton end diff --git a/core/lib/spree/core/engine.rb b/core/lib/spree/core/engine.rb index 5ae65661d39..cea9f799988 100644 --- a/core/lib/spree/core/engine.rb +++ b/core/lib/spree/core/engine.rb @@ -61,6 +61,7 @@ class Engine < ::Rails::Engine Spree::Bus.clear %i[ + carton_shipped order_canceled order_emptied order_finalized diff --git a/core/spec/models/spree/order_shipping_spec.rb b/core/spec/models/spree/order_shipping_spec.rb index b8ec4ef4c7b..00cc29c4045 100644 --- a/core/spec/models/spree/order_shipping_spec.rb +++ b/core/spec/models/spree/order_shipping_spec.rb @@ -85,6 +85,12 @@ def emails it "sets the external_number" do expect(subject.external_number).to eq 'some-external-number' end + + it "publishes a 'carton_shipped' event" do + stub_spree_bus + + expect(:carton_shipped).to have_been_published.with(carton: subject) + end end context "with a tracking number" do From 75751a770312ba1b8718ee665ad52eeda251cbbe Mon Sep 17 00:00:00 2001 From: Fab Date: Sun, 2 Mar 2025 20:21:21 +0100 Subject: [PATCH 4/8] Fix Meta Data Restriction Comment to reflect default setting The comment was inconsistent with the default setting. No functional changes have been made. --- core/lib/spree/app_configuration.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/lib/spree/app_configuration.rb b/core/lib/spree/app_configuration.rb index c7177454c6a..621aae7aba7 100644 --- a/core/lib/spree/app_configuration.rb +++ b/core/lib/spree/app_configuration.rb @@ -222,7 +222,7 @@ class AppConfiguration < Preferences::Configuration # - The maximum number of keys that can be added to the metadata columns (meta_data_max_keys). # - The maximum length of each key in the metadata columns (meta_data_max_key_length). # - The maximum length of each value in the metadata columns (meta_data_max_value_length). - # (default: +true+) + # (default: +false+) preference :meta_data_validation_enabled, :boolean, default: false # @!attribute [rw] meta_data_max_keys From 694938652bbebd328fb44a78b714c67bf8a63f1c Mon Sep 17 00:00:00 2001 From: swamp09 Date: Mon, 3 Mar 2025 18:22:59 +0900 Subject: [PATCH 5/8] [Admin] Fix Unclosed form_tag in table component This PR fixes an HTML structure break caused by an unclosed form_tag, ensuring that forms added after using ui/table are rendered correctly. ## Background While customizing the index page to add a new form, I encountered a problem where the added form was not displayed in the browser. Upon investigation, I discovered that the issue stemmed from the form_tag in ui/table/component.html.erb not being explicitly closed, which resulted in subsequent form tags disappearing. ``` rb <%= render component("ui/table/toolbar").new("data-#{stimulus_id}-target": "batchToolbar", role: "toolbar", "aria-label": t(".batch_actions"), hidden: true) do %> <%= form_tag '', id: batch_actions_form_id %> <% @data.batch_actions.each do |batch_action| %> <%= render_batch_action_button(batch_action) %> <% end %> <% end %> ``` Due to the lack of a proper block structure closing the form_tag, the HTML became malformed, and any form tags declared afterward were not rendered. Updated the form_tag to use a block form, ensuring that the opening and closing tags are explicitly defined. --- .../components/solidus_admin/ui/table/component.html.erb | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/admin/app/components/solidus_admin/ui/table/component.html.erb b/admin/app/components/solidus_admin/ui/table/component.html.erb index 7368484d847..9cbdb312ade 100644 --- a/admin/app/components/solidus_admin/ui/table/component.html.erb +++ b/admin/app/components/solidus_admin/ui/table/component.html.erb @@ -88,9 +88,10 @@ <% end %> <%= render component("ui/table/toolbar").new("data-#{stimulus_id}-target": "batchToolbar", role: "toolbar", "aria-label": t(".batch_actions"), hidden: true) do %> - <%= form_tag '', id: batch_actions_form_id %> - <% @data.batch_actions.each do |batch_action| %> - <%= render_batch_action_button(batch_action) %> + <%= form_tag '', id: batch_actions_form_id do %> + <% @data.batch_actions.each do |batch_action| %> + <%= render_batch_action_button(batch_action) %> + <% end %> <% end %> <% end %> From 6b481288b9ef5fe67e25847934a8eabf5b4748bd Mon Sep 17 00:00:00 2001 From: Eugene Chaikin Date: Mon, 3 Mar 2025 18:54:28 +0100 Subject: [PATCH 6/8] Fix ui/forms/input component for tag: :textarea https://developer.mozilla.org/en-US/docs/Web/HTML/Element/textarea In HTML, the initial content of a