diff --git a/app/assets/stylesheets/admin/machine_learning/setting.scss b/app/assets/stylesheets/admin/machine_learning/setting.scss index f9afcc079..3bf902365 100644 --- a/app/assets/stylesheets/admin/machine_learning/setting.scss +++ b/app/assets/stylesheets/admin/machine_learning/setting.scss @@ -9,46 +9,6 @@ } } - [aria-pressed] { - @include regular-button; - border-radius: $line-height; - font-weight: bold; - min-width: rem-calc(100); - position: relative; - - &::after { - background: $white; - border-radius: 100%; - content: ""; - display: block; - height: 1.75em; - position: absolute; - transform: translateY(-50%); - top: 50%; - width: 1.75em; - } - - &[aria-pressed=true] { - background: $primary-color; - padding-right: 2.5em; - text-align: left; - - &::after { - right: 0.5em; - } - } - - &[aria-pressed=false] { - background: $dark-gray; - padding-left: 2.5em; - text-align: right; - - &::after { - left: 0.5em; - } - } - } - dl { @include callout-size(map-get($callout-sizes, small)); } diff --git a/app/assets/stylesheets/admin/settings/featured_settings_form.scss b/app/assets/stylesheets/admin/settings/featured_settings_form.scss new file mode 100644 index 000000000..c002824d5 --- /dev/null +++ b/app/assets/stylesheets/admin/settings/featured_settings_form.scss @@ -0,0 +1,6 @@ +.admin .featured-settings-form { + + [aria-pressed] { + @include switch; + } +} diff --git a/app/assets/stylesheets/admin/settings/featured_settings_table.scss b/app/assets/stylesheets/admin/settings/featured_settings_table.scss new file mode 100644 index 000000000..ef0df6709 --- /dev/null +++ b/app/assets/stylesheets/admin/settings/featured_settings_table.scss @@ -0,0 +1,6 @@ +.admin .featured-settings-table { + + td { + max-width: $global-width / 3; + } +} diff --git a/app/assets/stylesheets/mixins/buttons.scss b/app/assets/stylesheets/mixins/buttons.scss index ff69c30e8..b5e1aee6c 100644 --- a/app/assets/stylesheets/mixins/buttons.scss +++ b/app/assets/stylesheets/mixins/buttons.scss @@ -40,3 +40,43 @@ text-decoration: underline; } } + +@mixin switch { + @include regular-button; + border-radius: $line-height; + font-weight: bold; + min-width: rem-calc(100); + position: relative; + + &::after { + background: $white; + border-radius: 100%; + content: ""; + display: block; + height: 1.75em; + position: absolute; + transform: translateY(-50%); + top: 50%; + width: 1.75em; + } + + &[aria-pressed=true] { + background: $primary-color; + padding-right: 2.5em; + text-align: left; + + &::after { + right: 0.5em; + } + } + + &[aria-pressed=false] { + background: $dark-gray; + padding-left: 2.5em; + text-align: right; + + &::after { + left: 0.5em; + } + } +} diff --git a/app/components/admin/machine_learning/setting_component.html.erb b/app/components/admin/machine_learning/setting_component.html.erb index 5509c1040..c9ac35348 100644 --- a/app/components/admin/machine_learning/setting_component.html.erb +++ b/app/components/admin/machine_learning/setting_component.html.erb @@ -1,19 +1,12 @@
-

<%= t("admin.machine_learning.#{kind}") %>

+

<%= t("admin.machine_learning.#{kind}") %>

-

<%= t("admin.machine_learning.#{kind}_description") %>

+

<%= t("admin.machine_learning.#{kind}_description") %>

<% if ml_info.present? %> - <%= form_for(setting, url: admin_setting_path(setting), method: :put) do |f| %> - <%= f.hidden_field :tab, value: "#settings", id: "setting_tab_#{kind}" %> - <%= f.hidden_field :value, value: (setting.enabled? ? "" : "active"), id: "setting_value_#{kind}" %> - <%= f.button(t("shared.#{setting.enabled? ? "yes" : "no"}"), - "aria-labelledby": "machine_learning_#{kind}", - "aria-describedby": "machine_learning_#{kind}_description", - "aria-pressed": setting.enabled?) %> - <% end %> + <%= render Admin::Settings::FeaturedSettingsFormComponent.new(setting, tab: "#settings") %>
<%= t("admin.machine_learning.last_execution") %>
diff --git a/app/components/admin/settings/featured_settings_form_component.html.erb b/app/components/admin/settings/featured_settings_form_component.html.erb new file mode 100644 index 000000000..e1b8840c9 --- /dev/null +++ b/app/components/admin/settings/featured_settings_form_component.html.erb @@ -0,0 +1,6 @@ +<%= form_for([:admin, feature], remote: remote?, html: { class: "featured-settings-form" }) do |f| %> + <%= f.hidden_field :tab, id: dom_id(feature, :tab), value: tab if tab %> + <%= f.hidden_field :describedby, id: dom_id(feature, :describedby), value: describedby if describedby %> + <%= f.hidden_field :value, id: dom_id(feature, :value), value: (enabled? ? "" : "active") %> + <%= f.button text, options %> +<% end %> diff --git a/app/components/admin/settings/featured_settings_form_component.rb b/app/components/admin/settings/featured_settings_form_component.rb new file mode 100644 index 000000000..a4c19154f --- /dev/null +++ b/app/components/admin/settings/featured_settings_form_component.rb @@ -0,0 +1,34 @@ +class Admin::Settings::FeaturedSettingsFormComponent < ApplicationComponent + attr_reader :feature, :tab, :describedby + alias_method :describedby?, :describedby + delegate :enabled?, to: :feature + + def initialize(feature, tab: nil, describedby: true) + @feature = feature + @tab = tab + @describedby = describedby + end + + private + + def text + if enabled? + t("shared.yes") + else + t("shared.no") + end + end + + def options + { + data: { disable_with: text }, + "aria-labelledby": dom_id(feature, :title), + "aria-describedby": (dom_id(feature, :description) if describedby?), + "aria-pressed": enabled? + } + end + + def remote? + !%w[feature.map feature.remote_census feature.sdg].include?(feature.key) + end +end diff --git a/app/controllers/admin/settings_controller.rb b/app/controllers/admin/settings_controller.rb index cdc2278ba..e225d6557 100644 --- a/app/controllers/admin/settings_controller.rb +++ b/app/controllers/admin/settings_controller.rb @@ -16,7 +16,11 @@ 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") + + respond_to do |format| + format.html { redirect_to request_referer, notice: t("admin.settings.flash.updated") } + format.js + end end def update_map diff --git a/app/views/admin/homepage/_feed.html.erb b/app/views/admin/homepage/_feed.html.erb index ff0a6f812..480fe49b1 100644 --- a/app/views/admin/homepage/_feed.html.erb +++ b/app/views/admin/homepage/_feed.html.erb @@ -1,6 +1,6 @@
-

<%= t("admin.homepage.feeds.#{feed.kind}") %>

+

<%= t("admin.homepage.feeds.#{feed.kind}") %>

<%= render "setting", setting: feed.setting %> diff --git a/app/views/admin/homepage/_setting.html.erb b/app/views/admin/homepage/_setting.html.erb index f875e3e7d..34aafe3b4 100644 --- a/app/views/admin/homepage/_setting.html.erb +++ b/app/views/admin/homepage/_setting.html.erb @@ -1,10 +1 @@ -
- <%= form_for(setting, url: admin_setting_path(setting), method: :put) do |f| %> - - <%= f.hidden_field :value, - value: (setting.enabled? ? "" : "active") %> - - <%= f.submit(t("admin.settings.index.features.#{setting.enabled? ? "disable" : "enable"}"), - class: "button #{setting.enabled? ? "hollow alert" : "success"}") %> - <% end %> -
+<%= render Admin::Settings::FeaturedSettingsFormComponent.new(setting, describedby: false) %> diff --git a/app/views/admin/homepage/show.html.erb b/app/views/admin/homepage/show.html.erb index 3c933c961..367d5cd9e 100644 --- a/app/views/admin/homepage/show.html.erb +++ b/app/views/admin/homepage/show.html.erb @@ -38,7 +38,7 @@
-

<%= t("settings.#{@recommendations.key}") %>

+

<%= t("settings.#{@recommendations.key}") %>

<%= render "setting", setting: @recommendations %>
diff --git a/app/views/admin/settings/_content_types_settings_form.html.erb b/app/views/admin/settings/_content_types_settings_form.html.erb index 0711adbb4..4c3cb347b 100644 --- a/app/views/admin/settings/_content_types_settings_form.html.erb +++ b/app/views/admin/settings/_content_types_settings_form.html.erb @@ -1,5 +1,5 @@ <%= form_tag admin_update_content_types_path, method: :put, id: "edit_#{dom_id(setting)}" do %> - <%= hidden_field_tag "id", setting.id %> + <%= hidden_field_tag "id", setting.id, id: dom_id(setting, :id) %>
<% group = setting.content_type_group %> diff --git a/app/views/admin/settings/_featured_settings_form.html.erb b/app/views/admin/settings/_featured_settings_form.html.erb deleted file mode 100644 index ea9c3732a..000000000 --- a/app/views/admin/settings/_featured_settings_form.html.erb +++ /dev/null @@ -1,7 +0,0 @@ -<%= form_for(feature, url: admin_setting_path(feature), html: { id: "edit_#{dom_id(feature)}" }) do |f| %> - <%= f.hidden_field :tab, value: tab if defined?(tab) %> - <%= f.hidden_field :value, id: dom_id(feature), value: (feature.enabled? ? "" : "active") %> - <%= f.submit(t("admin.settings.index.features.#{feature.enabled? ? "disable" : "enable"}"), - class: "button expanded #{feature.enabled? ? "hollow alert" : "success"}", - data: { confirm: t("admin.actions.confirm") }) %> -<% end %> diff --git a/app/views/admin/settings/_featured_settings_table.html.erb b/app/views/admin/settings/_featured_settings_table.html.erb index 8936b3cae..649d43cec 100644 --- a/app/views/admin/settings/_featured_settings_table.html.erb +++ b/app/views/admin/settings/_featured_settings_table.html.erb @@ -1,38 +1,23 @@ - +
- - + <% features.each do |feature| %> - - - <% end %> diff --git a/app/views/admin/settings/_settings_form.html.erb b/app/views/admin/settings/_settings_form.html.erb index 865c409f5..33e9ab8f1 100644 --- a/app/views/admin/settings/_settings_form.html.erb +++ b/app/views/admin/settings/_settings_form.html.erb @@ -1,7 +1,11 @@ -<%= 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) %> +<%= form_for([:admin, setting]) do |f| %> + <%= f.hidden_field :tab, id: dom_id(setting, :tab), value: tab if defined?(tab) %>
- <%= f.text_area :value, label: false, id: dom_id(setting), lines: 1 %> + <%= f.text_area :value, + label: false, + id: dom_id(setting, :value), + "aria-label": strip_tags(t("settings.#{setting.key}")), + "aria-describedby": dom_id(setting, :description) %>
<%= f.submit(t("admin.settings.index.update_setting"), class: "button hollow expanded") %> diff --git a/app/views/admin/settings/_settings_table.html.erb b/app/views/admin/settings/_settings_table.html.erb index d46c5237d..b3015525f 100644 --- a/app/views/admin/settings/_settings_table.html.erb +++ b/app/views/admin/settings/_settings_table.html.erb @@ -11,7 +11,7 @@
diff --git a/app/views/admin/settings/update.js.erb b/app/views/admin/settings/update.js.erb new file mode 100644 index 000000000..503ef165d --- /dev/null +++ b/app/views/admin/settings/update.js.erb @@ -0,0 +1,11 @@ +var form = $("<%= j render Admin::Settings::FeaturedSettingsFormComponent.new( + @setting, + tab: params[:setting][:tab], + describedby: params[:setting][:describedby] +) %>"); + +$("#" + form.attr("id")).html(form.html()).find("[type='submit']").focus(); + +<% if @setting.type == "feature" || @setting.type == "process" %> + $("#side_menu").html("<%= j render Admin::MenuComponent.new %>").foundation(); +<% end %> diff --git a/config/i18n-tasks.yml b/config/i18n-tasks.yml index 42a20478c..b5ee4bd08 100644 --- a/config/i18n-tasks.yml +++ b/config/i18n-tasks.yml @@ -160,7 +160,6 @@ ignore_unused: - "admin.legislation.draft_versions.*.submit_button" - "admin.legislation.questions.*.submit_button" - "admin.hidden_comments.index.hidden_*" - - "admin.settings.index.features.*" - "admin.polls.*.submit_button" - "admin.booths.*.submit_button" - "admin.admin_notifications.*.submit_button" diff --git a/config/locales/en/admin.yml b/config/locales/en/admin.yml index 3284f41f9..0749e67c6 100644 --- a/config/locales/en/admin.yml +++ b/config/locales/en/admin.yml @@ -1298,10 +1298,7 @@ en: images_and_documents: "Images and documents" feature_flags: Features features: - enabled: "Feature enabled" - disabled: "Feature disabled" - enable: "Enable" - disable: "Disable" + enabled: "Enabled" map: title: Map configuration help: Here you can customize the way the map is displayed to users. Drag map marker or click anywhere over the map, set desired zoom and click button "Update". @@ -1322,9 +1319,7 @@ en: remote_census_request_name: Request Data remote_census_response_name: Response Data setting: Feature - setting_actions: Actions setting_name: Setting - setting_status: Status setting_value: Value no_description: "No description" shared: diff --git a/config/locales/es/admin.yml b/config/locales/es/admin.yml index be84208a3..5ffce5ea8 100644 --- a/config/locales/es/admin.yml +++ b/config/locales/es/admin.yml @@ -1297,10 +1297,7 @@ es: images_and_documents: "Imágenes y documentos" feature_flags: Funcionalidades features: - enabled: "Funcionalidad activada" - disabled: "Funcionalidad desactivada" - enable: "Activar" - disable: "Desactivar" + enabled: "Activada" map: title: Configuración del mapa help: Aquí puedes personalizar la manera en la que se muestra el mapa a los usuarios. Arrastra el marcador o pulsa sobre cualquier parte del mapa, ajusta el zoom y pulsa el botón 'Actualizar'. @@ -1321,9 +1318,7 @@ es: remote_census_request_name: Datos Petición remote_census_response_name: Datos Respuesta setting: Funcionalidad - setting_actions: Acciones setting_name: Configuración - setting_status: Estado setting_value: Valor no_description: "Sin descripción" shared: diff --git a/spec/components/admin/settings/featured_settings_form_component_spec.rb b/spec/components/admin/settings/featured_settings_form_component_spec.rb new file mode 100644 index 000000000..bc04198ea --- /dev/null +++ b/spec/components/admin/settings/featured_settings_form_component_spec.rb @@ -0,0 +1,63 @@ +require "rails_helper" + +describe Admin::Settings::FeaturedSettingsFormComponent do + let(:setting) { create(:setting, key: "feature.goodness") } + let(:component) { Admin::Settings::FeaturedSettingsFormComponent.new(setting) } + + it "includes an aria-labelledby attribute" do + render_inline component + + expect(page).to have_button count: 1 + expect(page).to have_css "button[aria-labelledby='title_setting_#{setting.id}']" + end + + describe "aria-describedby attribute" do + it "is rendered by default" do + render_inline component + + expect(page).to have_css "button[aria-describedby='description_setting_#{setting.id}']" + end + + it "is not rendered when the describedby option is false" do + render_inline Admin::Settings::FeaturedSettingsFormComponent.new(setting, describedby: false) + + expect(page).not_to have_css "[aria-describedby]" + end + end + + describe "aria-pressed attribute" do + it "is true when the setting is enabled" do + setting.update!(value: "active") + + render_inline component + + expect(page).to have_css "button[aria-pressed='true']" + end + + it "is false when the setting is disabled" do + setting.update!(value: "") + + render_inline component + + expect(page).to have_css "button[aria-pressed='false']" + end + end + + describe "button text" do + it "reflects the status when the setting is enabled" do + setting.update!(value: "active") + + render_inline component + + expect(page).to have_button "Yes" + end + + it "reflects the status when the setting is disabled" do + setting.update!(value: "") + + render_inline component + + expect(page).to have_button "No" + end + end +end diff --git a/spec/system/admin/feature_flags_spec.rb b/spec/system/admin/feature_flags_spec.rb index 5fd48a934..397a056b8 100644 --- a/spec/system/admin/feature_flags_spec.rb +++ b/spec/system/admin/feature_flags_spec.rb @@ -15,21 +15,17 @@ describe "Admin feature flags", :admin do end scenario "Disable a participatory process", :show_exceptions do - setting = Setting.find_by(key: "process.budgets") budget = create(:budget) visit admin_settings_path within("#settings-tabs") { click_link "Participation processes" } - within("#edit_setting_#{setting.id}") do - expect(page).to have_button "Disable" - expect(page).not_to have_button "Enable" + within("tr", text: "Participatory budgeting") do + click_button "Yes" - accept_confirm { click_button "Disable" } + expect(page).to have_button "No" end - expect(page).to have_content "Value updated" - within("#side_menu") do expect(page).not_to have_link "Participatory budgets" end @@ -46,7 +42,6 @@ describe "Admin feature flags", :admin do scenario "Enable a disabled participatory process" do Setting["process.budgets"] = nil - setting = Setting.find_by(key: "process.budgets") visit admin_root_path @@ -57,59 +52,38 @@ describe "Admin feature flags", :admin do visit admin_settings_path within("#settings-tabs") { click_link "Participation processes" } - within("#edit_setting_#{setting.id}") do - expect(page).to have_button "Enable" - expect(page).not_to have_button "Disable" + within("tr", text: "Participatory budgeting") do + click_button "No" - accept_confirm { click_button "Enable" } + expect(page).to have_button "Yes" end - expect(page).to have_content "Value updated" - within("#side_menu") do expect(page).to have_link "Participatory budgets" end end scenario "Disable a feature" do - setting = Setting.find_by(key: "feature.twitter_login") - visit admin_settings_path click_link "Features" - within("#edit_setting_#{setting.id}") do - expect(page).to have_button "Disable" - expect(page).not_to have_button "Enable" + within("tr", text: "Twitter login") do + click_button "Yes" - accept_confirm { click_button "Disable" } - end - - expect(page).to have_content "Value updated" - - within("#edit_setting_#{setting.id}") do - expect(page).to have_button "Enable" - expect(page).not_to have_button "Disable" + expect(page).to have_button "No" + expect(page).not_to have_button "Yes" end end scenario "Enable a disabled feature" do - setting = Setting.find_by(key: "feature.map") - visit admin_settings_path click_link "Features" - within("#edit_setting_#{setting.id}") do - expect(page).to have_button "Enable" - expect(page).not_to have_button "Disable" + within("tr", text: "Proposals and budget investments geolocation") do + click_button "No" - accept_confirm { click_button "Enable" } - end - - expect(page).to have_content "Value updated" - - within("#edit_setting_#{setting.id}") do - expect(page).to have_button "Disable" - expect(page).not_to have_button "Enable" + expect(page).to have_button "Yes" + expect(page).not_to have_button "No" end end end diff --git a/spec/system/admin/homepage/homepage_spec.rb b/spec/system/admin/homepage/homepage_spec.rb index 3783002a8..314e68247 100644 --- a/spec/system/admin/homepage/homepage_spec.rb +++ b/spec/system/admin/homepage/homepage_spec.rb @@ -33,7 +33,9 @@ describe "Homepage", :admin do within("#widget_feed_#{proposals_feed.id}") do select "1", from: "widget_feed_limit" - click_button "Enable" + click_button "No" + + expect(page).to have_button "Yes" end visit root_path @@ -52,7 +54,9 @@ describe "Homepage", :admin do visit admin_homepage_path within("#widget_feed_#{debates_feed.id}") do select "2", from: "widget_feed_limit" - click_button "Enable" + click_button "No" + + expect(page).to have_button "Yes" end visit root_path @@ -73,12 +77,16 @@ describe "Homepage", :admin do within("#widget_feed_#{proposals_feed.id}") do select "3", from: "widget_feed_limit" - click_button "Enable" + click_button "No" + + expect(page).to have_button "Yes" end within("#widget_feed_#{debates_feed.id}") do select "3", from: "widget_feed_limit" - click_button "Enable" + click_button "No" + + expect(page).to have_button "Yes" end visit root_path @@ -100,7 +108,9 @@ describe "Homepage", :admin do visit admin_homepage_path within("#widget_feed_#{processes_feed.id}") do select "3", from: "widget_feed_limit" - click_button "Enable" + click_button "No" + + expect(page).to have_button "Yes" end visit root_path @@ -153,11 +163,12 @@ describe "Homepage", :admin do create(:proposal, tag_list: "Sport") visit admin_homepage_path - within("#setting_#{user_recommendations.id}") do - click_button "Enable" - end - expect(page).to have_content "Value updated" + within("#edit_setting_#{user_recommendations.id}") do + click_button "No" + + expect(page).to have_button "Yes" + end login_as(user) visit root_path diff --git a/spec/system/admin/settings_spec.rb b/spec/system/admin/settings_spec.rb index 4c06b9251..8160d4043 100644 --- a/spec/system/admin/settings_spec.rb +++ b/spec/system/admin/settings_spec.rb @@ -14,12 +14,12 @@ describe "Admin settings", :admin do end scenario "Update" do - setting = create(:setting, key: "super.users.first") + create(:setting, key: "super.users.first") visit admin_settings_path - within("#edit_setting_#{setting.id}") do - fill_in "setting_#{setting.id}", with: "Super Users of level 1" + within "tr", text: "First" do + fill_in "First", with: "Super Users of level 1" click_button "Update" end @@ -173,13 +173,13 @@ describe "Admin settings", :admin do end scenario "On #tab-remote-census-configuration" do - remote_census_setting = create(:setting, key: "remote_census.general.whatever") + create(:setting, key: "remote_census.general.whatever") visit admin_settings_path find("#remote-census-tab").click - within("#edit_setting_#{remote_census_setting.id}") do - fill_in "setting_#{remote_census_setting.id}", with: "New value" + within "tr", text: "Whatever" do + fill_in "Whatever", with: "New value" click_button "Update" end @@ -189,13 +189,13 @@ describe "Admin settings", :admin do end scenario "On #tab-configuration" do - configuration_setting = Setting.create!(key: "whatever") + Setting.create!(key: "whatever") visit admin_settings_path find("#tab-configuration").click - within("#edit_setting_#{configuration_setting.id}") do - fill_in "setting_#{configuration_setting.id}", with: "New value" + within "tr", text: "Whatever" do + fill_in "Whatever", with: "New value" click_button "Update" end @@ -209,13 +209,13 @@ describe "Admin settings", :admin do end scenario "On #tab-map-configuration" do - map_setting = Setting.create!(key: "map.whatever") + Setting.create!(key: "map.whatever") visit admin_settings_path click_link "Map configuration" - within("#edit_setting_#{map_setting.id}") do - fill_in "setting_#{map_setting.id}", with: "New value" + within "tr", text: "Whatever" do + fill_in "Whatever", with: "New value" click_button "Update" end @@ -225,13 +225,13 @@ describe "Admin settings", :admin do end scenario "On #tab-proposals" do - proposal_dashboard_setting = Setting.create!(key: "proposals.whatever") + Setting.create!(key: "proposals.whatever") visit admin_settings_path find("#proposals-tab").click - within("#edit_setting_#{proposal_dashboard_setting.id}") do - fill_in "setting_#{proposal_dashboard_setting.id}", with: "New value" + within "tr", text: "Whatever" do + fill_in "Whatever", with: "New value" click_button "Update" end @@ -240,28 +240,22 @@ describe "Admin settings", :admin do end scenario "On #tab-participation-processes" do - process_setting = Setting.create!(key: "process.whatever") + Setting.create!(key: "process.whatever") visit admin_settings_path find("#participation-processes-tab").click - - accept_alert do - find("#edit_setting_#{process_setting.id} .button").click - end + within("tr", text: "Whatever") { click_button "No" } expect(page).to have_current_path(admin_settings_path) expect(page).to have_css("div#tab-participation-processes.is-active") end scenario "On #tab-feature-flags" do - feature_setting = Setting.create!(key: "feature.whatever") + Setting.create!(key: "feature.whatever") visit admin_settings_path find("#features-tab").click - - accept_alert do - find("#edit_setting_#{feature_setting.id} .button").click - end + within("tr", text: "Whatever") { click_button "No" } expect(page).to have_current_path(admin_settings_path) expect(page).to have_css("div#tab-feature-flags.is-active") @@ -275,8 +269,10 @@ describe "Admin settings", :admin do visit admin_settings_path click_link "SDG configuration" - accept_alert do - within("tr", text: "Whatever") { click_button "Enable" } + within("tr", text: "Whatever") do + click_button "No" + + expect(page).to have_button "Yes" end expect(page).to have_current_path(admin_settings_path) @@ -287,32 +283,28 @@ describe "Admin settings", :admin do describe "Skip verification" do scenario "deactivate skip verification" do Setting["feature.user.skip_verification"] = "true" - setting = Setting.find_by(key: "feature.user.skip_verification") visit admin_settings_path find("#features-tab").click - accept_alert do - find("#edit_setting_#{setting.id} .button").click - end + within("tr", text: "Skip user verification") do + click_button "Yes" - expect(page).to have_content "Value updated" + expect(page).to have_button "No" + end end scenario "activate skip verification" do Setting["feature.user.skip_verification"] = nil - setting = Setting.find_by(key: "feature.user.skip_verification") visit admin_settings_path find("#features-tab").click - accept_alert do - find("#edit_setting_#{setting.id} .button").click + within("tr", text: "Skip user verification") do + click_button "No" + + expect(page).to have_button "Yes" end - - expect(page).to have_content "Value updated" - - Setting["feature.user.skip_verification"] = nil end end @@ -338,5 +330,24 @@ describe "Admin settings", :admin do "Sustainable Development Goals you must " \ 'enable "SDG" on "Features" tab.' end + + scenario "is enabled right after enabling the feature" do + Setting["feature.sdg"] = false + login_as(create(:administrator).user) + + visit admin_settings_path + + click_link "Features" + + within("tr", text: "SDG") do + click_button "No" + + expect(page).to have_button "Yes" + end + + click_link "SDG configuration" + + expect(page).to have_css "h2", exact_text: "SDG configuration" + end end end