diff --git a/admin/app/controllers/solidus_admin/tax_categories_controller.rb b/admin/app/controllers/solidus_admin/tax_categories_controller.rb index 09ac37e3cbb..cc9e833a2ba 100644 --- a/admin/app/controllers/solidus_admin/tax_categories_controller.rb +++ b/admin/app/controllers/solidus_admin/tax_categories_controller.rb @@ -14,6 +14,35 @@ def new end end + def create + @tax_category = Spree::TaxCategory.new(tax_category_params) + + if @tax_category.save + respond_to do |format| + flash[:notice] = t('.success') + + format.html do + redirect_to solidus_admin.tax_categories_path, status: :see_other + end + + format.turbo_stream do + # we need to explicitly write the refresh tag for now. + # See https://github.com/hotwired/turbo-rails/issues/579 + render turbo_stream: '' + end + end + else + set_index_page + + respond_to do |format| + format.html do + page_component = component('tax_categories/new').new(page: @page, tax_category: @tax_category) + render page_component, status: :unprocessable_entity + end + end + end + end + def index set_index_page diff --git a/admin/app/views/layouts/solidus_admin/application.html.erb b/admin/app/views/layouts/solidus_admin/application.html.erb index 4fa30ebdfd8..246051776a2 100644 --- a/admin/app/views/layouts/solidus_admin/application.html.erb +++ b/admin/app/views/layouts/solidus_admin/application.html.erb @@ -11,6 +11,7 @@ <%= stylesheet_link_tag SolidusAdmin::Config.theme_path(session[:admin_light_theme]), media: '(prefers-color-scheme: light)', "data-turbo-track": "reload" %> <%= stylesheet_link_tag SolidusAdmin::Config.theme_path(session[:admin_dark_theme]), media: '(prefers-color-scheme: dark)', "data-turbo-track": "reload" %> <%= javascript_importmap_tags "solidus_admin/application", shim: false, importmap: SolidusAdmin.importmap %> + diff --git a/admin/config/locales/tax_categories.en.yml b/admin/config/locales/tax_categories.en.yml index 9162bb44069..c86f9400f42 100644 --- a/admin/config/locales/tax_categories.en.yml +++ b/admin/config/locales/tax_categories.en.yml @@ -4,3 +4,5 @@ en: title: "Tax Categories" destroy: success: "Tax categories were successfully removed." + create: + success: "Tax category was successfully created." diff --git a/admin/config/routes.rb b/admin/config/routes.rb index f8f729d68f6..37003949356 100644 --- a/admin/config/routes.rb +++ b/admin/config/routes.rb @@ -51,7 +51,7 @@ admin_resources :option_types, only: [:index, :destroy], sortable: true admin_resources :taxonomies, only: [:index, :destroy], sortable: true admin_resources :promotion_categories, only: [:index, :destroy] - admin_resources :tax_categories, only: [:new, :index, :destroy] + admin_resources :tax_categories, only: [:new, :index, :create, :destroy] admin_resources :tax_rates, only: [:index, :destroy] admin_resources :payment_methods, only: [:index, :destroy], sortable: true admin_resources :stock_items, only: [:index, :edit, :update] diff --git a/admin/spec/features/tax_categories_spec.rb b/admin/spec/features/tax_categories_spec.rb index cbc15b436c9..b91a24256dc 100644 --- a/admin/spec/features/tax_categories_spec.rb +++ b/admin/spec/features/tax_categories_spec.rb @@ -21,4 +21,43 @@ expect(Spree::TaxCategory.count).to eq(1) expect(page).to be_axe_clean end + + context "when creating a new tax category" do + let(:query) { "?page=1&q%5Bname_or_description_cont%5D=Cloth" } + + before do + visit "/admin/tax_categories#{query}" + click_on "Add new" + expect(page).to have_content("New Tax Category") + expect(page).to be_axe_clean + end + + it "opens a modal" do + expect(page).to have_selector("dialog") + within("dialog") { click_on "Cancel" } + expect(page).not_to have_selector("dialog") + expect(page.current_url).to include(query) + end + + context "with valid data" do + it "successfully creates a new tax category, keeping page and q params" do + fill_in "Name", with: "Clothing" + + click_on "Add Tax Category" + + expect(page).to have_content("Tax category was successfully created.") + expect(Spree::TaxCategory.find_by(name: "Clothing")).to be_present + expect(page.current_url).to include(query) + end + end + + context "with invalid data" do + it "fails to create a new tax category, keeping page and q params" do + click_on "Add Tax Category" + + expect(page).to have_content "can't be blank" + expect(page.current_url).to include(query) + end + end + end end