diff --git a/app/controllers/admin/settings_controller.rb b/app/controllers/admin/settings_controller.rb index d21f6de23..fdbc2b4d5 100644 --- a/app/controllers/admin/settings_controller.rb +++ b/app/controllers/admin/settings_controller.rb @@ -23,7 +23,7 @@ class Admin::SettingsController < Admin::BaseController def update @setting = Setting.find(params[:id]) @setting.update(settings_params) - redirect_to request.referer, notice: t("admin.settings.flash.updated") + redirect_to request_referer, notice: t("admin.settings.flash.updated") end def update_map @@ -53,4 +53,8 @@ class Admin::SettingsController < Admin::BaseController params.permit(:jpg, :png, :gif, :pdf, :doc, :docx, :xls, :xlsx, :csv, :zip) end + def request_referer + return request.referer + params[:setting][:tab] if params[:setting][:tab] + request.referer + end end diff --git a/app/views/admin/settings/_remote_census_configuration_tab.html.erb b/app/views/admin/settings/_remote_census_configuration_tab.html.erb index b44ee423b..6a136bd42 100644 --- a/app/views/admin/settings/_remote_census_configuration_tab.html.erb +++ b/app/views/admin/settings/_remote_census_configuration_tab.html.erb @@ -1,9 +1,9 @@ <% if feature?(:remote_census) %>

<%= t("admin.settings.index.remote_census.title") %>

- <%= render "settings_table", settings: @remote_census_general_settings, setting_name: "remote_census_general_name" %> - <%= render "settings_table", settings: @remote_census_request_settings, setting_name: "remote_census_request_name" %> - <%= render "settings_table", settings: @remote_census_response_settings, setting_name: "remote_census_response_name" %> + <%= render "settings_table", settings: @remote_census_general_settings, setting_name: "remote_census_general_name", tab: "#tab-remote-census-configuration" %> + <%= render "settings_table", settings: @remote_census_request_settings, setting_name: "remote_census_request_name", tab: "#tab-remote-census-configuration" %> + <%= render "settings_table", settings: @remote_census_response_settings, setting_name: "remote_census_response_name", tab: "#tab-remote-census-configuration" %> <% else %>
<%= t("admin.settings.index.remote_census.how_to_enable") %> diff --git a/app/views/admin/settings/_settings_form.html.erb b/app/views/admin/settings/_settings_form.html.erb index b6851669b..83793788b 100644 --- a/app/views/admin/settings/_settings_form.html.erb +++ b/app/views/admin/settings/_settings_form.html.erb @@ -1,4 +1,5 @@ <%= form_for(setting, url: admin_setting_path(setting), html: { id: "edit_#{dom_id(setting)}"}) do |f| %> + <%= f.hidden_field :tab, value: tab if defined?(tab) %>
<%= f.text_area :value, label: false, id: dom_id(setting), lines: 1 %>
diff --git a/app/views/admin/settings/_settings_table.html.erb b/app/views/admin/settings/_settings_table.html.erb index 2a3c0a5d9..d46c5237d 100644 --- a/app/views/admin/settings/_settings_table.html.erb +++ b/app/views/admin/settings/_settings_table.html.erb @@ -19,7 +19,11 @@ <% if setting.content_type? %> <%= render "admin/settings/content_types_settings_form", setting: setting %> <% else %> - <%= render "admin/settings/settings_form", setting: setting %> + <% if defined?(tab) %> + <%= render "admin/settings/settings_form", setting: setting, tab: tab %> + <% else %> + <%= render "admin/settings/settings_form", setting: setting %> + <% end %> <% end %> diff --git a/spec/features/admin/settings_spec.rb b/spec/features/admin/settings_spec.rb index 513a2b369..f27b03689 100644 --- a/spec/features/admin/settings_spec.rb +++ b/spec/features/admin/settings_spec.rb @@ -162,6 +162,39 @@ describe "Admin settings" do Setting["feature.remote_census"] = nil end + scenario "Should redirect to #tab-remote-census-configuration after update any remote census setting", :js do + setting_remote_census = create(:setting, key: "remote_census.general.any_remote_census_general_setting") + Setting["feature.remote_census"] = true + admin = create(:administrator).user + login_as(admin) + visit admin_settings_path + find("#remote-census-tab").click + + within("#edit_setting_#{setting_remote_census.id}") do + fill_in "setting_#{setting_remote_census.id}", with: "New value" + click_button "Update" + end + + expect(page).to have_current_path(admin_settings_path) + expect(page).to have_css("div#tab-remote-census-configuration.is-active") + Setting["feature.remote_census"] = nil + end + + scenario "Should not redirect to #tab-remote-census-configuration after do not update any remote census setting", :js do + admin = create(:administrator).user + login_as(admin) + visit admin_settings_path + + within("#edit_setting_#{@setting1.id}") do + fill_in "setting_#{@setting1.id}", with: "New value" + click_button "Update" + end + + expect(page).to have_current_path(admin_settings_path) + expect(page).to have_css("div#tab-configuration.is-active") + expect(page).not_to have_css("div#tab-remote-census-configuration.is-active") + end + end describe "Skip verification" do