diff --git a/app/models/spree/variant_decorator.rb b/app/models/spree/variant_decorator.rb index b49cb6df13..b9c9420287 100644 --- a/app/models/spree/variant_decorator.rb +++ b/app/models/spree/variant_decorator.rb @@ -2,7 +2,10 @@ require 'open_food_network/enterprise_fee_calculator' require 'open_food_network/variant_and_line_item_naming' Spree::Variant.class_eval do - remove_method :options_text # Remove method From Spree, so method from the naming module is used instead + # Remove method From Spree, so method from the naming module is used instead + # This file may be double-loaded in delayed job environment, so we check before + # removing the Spree method to prevent error. + remove_method :options_text if instance_methods(false).include? :options_text include OpenFoodNetwork::VariantAndLineItemNaming diff --git a/spec/models/spree/variant_spec.rb b/spec/models/spree/variant_spec.rb index 283655e627..696331c2b8 100644 --- a/spec/models/spree/variant_spec.rb +++ b/spec/models/spree/variant_spec.rb @@ -3,6 +3,14 @@ require 'open_food_network/option_value_namer' module Spree describe Variant do + describe "double loading" do + # app/models/spree/variant_decorator.rb may be double-loaded in delayed job environment, + # so we need to be able to do so without error. + it "succeeds without error" do + load "#{Rails.root}/app/models/spree/variant_decorator.rb" + end + end + describe "scopes" do it "finds non-deleted variants" do v_not_deleted = create(:variant)