diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml index 8e46595a768..7aab6d6a91d 100644 --- a/.rubocop_todo.yml +++ b/.rubocop_todo.yml @@ -1,6 +1,6 @@ # This configuration was generated by # `rubocop --auto-gen-config` -# on 2025-06-18 12:17:31 UTC using RuboCop version 1.76.0. +# on 2025-06-18 13:16:56 UTC using RuboCop version 1.76.0. # The point is for the user to remove these configuration records # one by one as the offenses are removed from the code base. # Note that changes in the inspected code, or installation of new @@ -332,7 +332,7 @@ Rails/FilePath: - 'core/lib/spree/testing_support/dummy_app.rb' - 'sample/lib/spree/sample.rb' -# Offense count: 59 +# Offense count: 57 # Configuration parameters: Include. # Include: **/app/models/**/*.rb Rails/HasManyOrHasOneDependent: diff --git a/api/spec/requests/spree/api/products_spec.rb b/api/spec/requests/spree/api/products_spec.rb index 3c6a2f1b89c..072f3a224c1 100644 --- a/api/spec/requests/spree/api/products_spec.rb +++ b/api/spec/requests/spree/api/products_spec.rb @@ -200,7 +200,7 @@ module Spree::Api required_attributes = json_response["required_attributes"] expect(required_attributes).to include("name") expect(required_attributes).to include("price") - expect(required_attributes).to include("shipping_category_id") + expect(required_attributes).to include("shipping_category") end it_behaves_like "modifying product actions are restricted" @@ -348,7 +348,7 @@ module Spree::Api expect(response.status).to eq(422) expect(json_response["error"]).to eq("Invalid resource. Please fix errors and try again.") errors = json_response["errors"] - expect(errors.keys).to include("name", "price", "shipping_category_id") + expect(errors.keys).to include("name", "price", "shipping_category") end end diff --git a/backend/spec/features/admin/orders/customer_details_spec.rb b/backend/spec/features/admin/orders/customer_details_spec.rb index e3b91f0b2a8..4c77ac4d374 100644 --- a/backend/spec/features/admin/orders/customer_details_spec.rb +++ b/backend/spec/features/admin/orders/customer_details_spec.rb @@ -164,7 +164,7 @@ # Regression test for https://github.com/spree/spree/issues/942 context "errors when no shipping methods are available" do before do - Spree::ShippingMethod.delete_all + Spree::ShippingMethod.update_all(available_to_all: false, available_to_users: false) end specify do diff --git a/backend/spec/features/admin/products/products_spec.rb b/backend/spec/features/admin/products/products_spec.rb index 0e319641f61..f98b6b8c125 100644 --- a/backend/spec/features/admin/products/products_spec.rb +++ b/backend/spec/features/admin/products/products_spec.rb @@ -216,7 +216,7 @@ def build_option_type_with_values(name, values) fill_in "product_sku", with: "B100" fill_in "product_price", with: "100" click_button "Create" - expect(page).to have_content("Shipping category can't be blank") + expect(page).to have_content("Shipping Category must exist") end context "using a locale with a different decimal format " do diff --git a/core/app/models/spree/product.rb b/core/app/models/spree/product.rb index 8fd536353dc..657e9f92b68 100644 --- a/core/app/models/spree/product.rb +++ b/core/app/models/spree/product.rb @@ -31,7 +31,7 @@ class Product < Spree::Base has_many :taxons, through: :classifications, before_remove: :remove_taxon belongs_to :tax_category, class_name: 'Spree::TaxCategory', optional: true - belongs_to :shipping_category, class_name: 'Spree::ShippingCategory', inverse_of: :products, optional: true + belongs_to :shipping_category, class_name: 'Spree::ShippingCategory', inverse_of: :products belongs_to :primary_taxon, class_name: 'Spree::Taxon', optional: true has_one :master, @@ -122,7 +122,6 @@ def find_or_build_master validates :meta_title, length: { maximum: 255 } validates :name, presence: true validates :price, presence: true, if: proc { Spree::Config[:require_master_price] } - validates :shipping_category_id, presence: true validates :slug, presence: true, uniqueness: { allow_blank: true, case_sensitive: true } attr_accessor :option_values_hash diff --git a/core/app/models/spree/shipping_category.rb b/core/app/models/spree/shipping_category.rb index 8d5da64979f..532f3ebec82 100644 --- a/core/app/models/spree/shipping_category.rb +++ b/core/app/models/spree/shipping_category.rb @@ -5,8 +5,8 @@ class ShippingCategory < Spree::Base self.allowed_ransackable_attributes = %w[name] validates :name, presence: true - has_many :products, inverse_of: :shipping_category - has_many :shipping_method_categories, inverse_of: :shipping_category + has_many :products, inverse_of: :shipping_category, dependent: :restrict_with_error + has_many :shipping_method_categories, inverse_of: :shipping_category, dependent: :destroy has_many :shipping_methods, through: :shipping_method_categories end end diff --git a/core/app/models/spree/shipping_method_category.rb b/core/app/models/spree/shipping_method_category.rb index 0a4072243a7..0d67a34506f 100644 --- a/core/app/models/spree/shipping_method_category.rb +++ b/core/app/models/spree/shipping_method_category.rb @@ -2,7 +2,7 @@ module Spree class ShippingMethodCategory < Spree::Base - belongs_to :shipping_method, class_name: 'Spree::ShippingMethod', optional: true - belongs_to :shipping_category, class_name: 'Spree::ShippingCategory', inverse_of: :shipping_method_categories, optional: true + belongs_to :shipping_method, class_name: 'Spree::ShippingMethod' + belongs_to :shipping_category, class_name: 'Spree::ShippingCategory', inverse_of: :shipping_method_categories end end diff --git a/core/db/migrate/20250605105424_add_shipping_category_foreign_keys.rb b/core/db/migrate/20250605105424_add_shipping_category_foreign_keys.rb new file mode 100644 index 00000000000..baf77136f2f --- /dev/null +++ b/core/db/migrate/20250605105424_add_shipping_category_foreign_keys.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true + +class AddShippingCategoryForeignKeys < ActiveRecord::Migration[7.0] + def change + add_foreign_key :spree_products, :spree_shipping_categories, column: :shipping_category_id, null: false + add_foreign_key :spree_shipping_method_categories, :spree_shipping_methods, column: :shipping_method_id, null: false + add_foreign_key :spree_shipping_method_categories, :spree_shipping_categories, column: :shipping_category_id, null: false + end +end