diff --git a/app/controllers/spree/admin/products_controller.rb b/app/controllers/spree/admin/products_controller.rb index e00fce21c0..1c693ea32d 100644 --- a/app/controllers/spree/admin/products_controller.rb +++ b/app/controllers/spree/admin/products_controller.rb @@ -11,6 +11,7 @@ module Spree include OrderCyclesHelper include EnterprisesHelper helper ::Admin::ProductsHelper + helper Spree::Admin::TaxCategoriesHelper before_action :load_data before_action :load_producers, only: [:index, :new] diff --git a/app/helpers/spree/admin/tax_categories_helper.rb b/app/helpers/spree/admin/tax_categories_helper.rb new file mode 100644 index 0000000000..ec9bb5ad42 --- /dev/null +++ b/app/helpers/spree/admin/tax_categories_helper.rb @@ -0,0 +1,20 @@ +# frozen_string_literal: true + +module Spree + module Admin + module TaxCategoriesHelper + def tax_category_dropdown_options(require_tax_category) + if require_tax_category + { + include_blank: false, + selected: Spree::TaxCategory.find_by(is_default: true)&.id + } + else + { + include_blank: t(:none), + } + end + end + end + end +end diff --git a/app/views/spree/admin/products/_tax_category_form.html.haml b/app/views/spree/admin/products/_tax_category_form.html.haml index 5c8080ca3b..38dd54ac87 100644 --- a/app/views/spree/admin/products/_tax_category_form.html.haml +++ b/app/views/spree/admin/products/_tax_category_form.html.haml @@ -1,5 +1,5 @@ = f.field_container :tax_category_id do = f.label :tax_category_id, t(:tax_category) %br - = f.collection_select(:tax_category_id, Spree::TaxCategory.all, :id, :name, {:include_blank => Spree::Config.products_require_tax_category ? false : t(:none)}, {:class => "select2 fullwidth"}) + = f.collection_select(:tax_category_id, Spree::TaxCategory.all, :id, :name, tax_category_dropdown_options(Spree::Config.products_require_tax_category), {:class => "select2 fullwidth"}) = f.error_message_on :tax_category_id diff --git a/spec/helpers/spree/admin/tax_categories_helper_spec.rb b/spec/helpers/spree/admin/tax_categories_helper_spec.rb new file mode 100644 index 0000000000..a9463dc41e --- /dev/null +++ b/spec/helpers/spree/admin/tax_categories_helper_spec.rb @@ -0,0 +1,43 @@ +# frozen_string_literal: true + +require "spec_helper" + +RSpec.describe Spree::Admin::TaxCategoriesHelper do + describe '#tax_category_dropdown_options' do + let!(:default_tax_category) { create(:tax_category, is_default: true) } + let!(:other_tax_category) { create(:tax_category, is_default: false) } + + context 'when products require a tax category' do + it 'returns include_blank as false' do + options = helper.tax_category_dropdown_options(true) + expect(options[:include_blank]).to eq(false) + end + + it 'returns the default tax category as selected' do + options = helper.tax_category_dropdown_options(true) + expect(options[:selected]).to eq(default_tax_category.id) + end + + context 'when no default tax category exists' do + before { default_tax_category.update(is_default: false) } + + it 'returns nil for the selected value' do + options = helper.tax_category_dropdown_options(true) + expect(options[:selected]).to be_nil + end + end + end + + context 'when products do not require a tax category' do + it 'returns include_blank as the translated "none" string' do + options = helper.tax_category_dropdown_options(false) + expect(options[:include_blank]).to eq("None") + end + + it 'does not include a selected tax category' do + options = helper.tax_category_dropdown_options(false) + expect(options[:selected]).to be_nil + end + end + end +end