-
<%= 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
index e3b5c6f46..bb5ae5096 100644
--- a/app/components/admin/settings/featured_settings_form_component.html.erb
+++ b/app/components/admin/settings/featured_settings_form_component.html.erb
@@ -1,7 +1,5 @@
-<%= form_for([:admin, feature]) do |f| %>
+<%= form_for([:admin, feature], html: { class: "featured-settings-form" }) do |f| %>
<%= f.hidden_field :tab, id: dom_id(feature, :tab), value: tab if tab %>
- <%= f.hidden_field :value, id: dom_id(feature, :value), 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") }) %>
+ <%= 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
index db2382678..c5835bc09 100644
--- a/app/components/admin/settings/featured_settings_form_component.rb
+++ b/app/components/admin/settings/featured_settings_form_component.rb
@@ -1,8 +1,27 @@
class Admin::Settings::FeaturedSettingsFormComponent < ApplicationComponent
attr_reader :feature, :tab
+ delegate :enabled?, to: :feature
def initialize(feature, tab: nil)
@feature = feature
@tab = tab
end
+
+ private
+
+ def text
+ if enabled?
+ t("shared.yes")
+ else
+ t("shared.no")
+ end
+ end
+
+ def options
+ {
+ "aria-labelledby": dom_id(feature, :title),
+ "aria-describedby": dom_id(feature, :description),
+ "aria-pressed": enabled?
+ }
+ end
end
diff --git a/app/views/admin/settings/_featured_settings_table.html.erb b/app/views/admin/settings/_featured_settings_table.html.erb
index 4bde70d30..649d43cec 100644
--- a/app/views/admin/settings/_featured_settings_table.html.erb
+++ b/app/views/admin/settings/_featured_settings_table.html.erb
@@ -1,37 +1,22 @@
-
+
| <%= t("admin.settings.setting") %> |
- <%= t("admin.settings.setting_status") %> |
- <%= t("admin.settings.setting_actions") %> |
+ <%= t("admin.settings.index.features.enabled") %> |
<% features.each do |feature| %>
- |
- <%= t("settings.#{feature.key}") %>
+ |
+ <%= t("settings.#{feature.key}") %>
-
+
<%= t("settings.#{feature.key}_description", default: t("admin.settings.no_description")) %>
|
- <% if feature.enabled? %>
-
-
- <%= t("admin.settings.index.features.enabled") %>
-
-
- <% else %>
-
- <%= t("admin.settings.index.features.disabled") %>
-
- <% end %>
- |
-
-
<%= render Admin::Settings::FeaturedSettingsFormComponent.new(feature, tab: tab) %>
|
diff --git a/config/locales/en/admin.yml b/config/locales/en/admin.yml
index 3284f41f9..b797b26a4 100644
--- a/config/locales/en/admin.yml
+++ b/config/locales/en/admin.yml
@@ -1298,8 +1298,7 @@ en:
images_and_documents: "Images and documents"
feature_flags: Features
features:
- enabled: "Feature enabled"
- disabled: "Feature disabled"
+ enabled: "Enabled"
enable: "Enable"
disable: "Disable"
map:
@@ -1322,9 +1321,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..da1b4b075 100644
--- a/config/locales/es/admin.yml
+++ b/config/locales/es/admin.yml
@@ -1297,8 +1297,7 @@ es:
images_and_documents: "Imágenes y documentos"
feature_flags: Funcionalidades
features:
- enabled: "Funcionalidad activada"
- disabled: "Funcionalidad desactivada"
+ enabled: "Activada"
enable: "Activar"
disable: "Desactivar"
map:
@@ -1321,9 +1320,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..f01455405
--- /dev/null
+++ b/spec/components/admin/settings/featured_settings_form_component_spec.rb
@@ -0,0 +1,55 @@
+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
+
+ it "includes an aria-describedby attribute" do
+ render_inline component
+
+ expect(page).to have_css "button[aria-describedby='description_setting_#{setting.id}']"
+ 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..28e439e32 100644
--- a/spec/system/admin/feature_flags_spec.rb
+++ b/spec/system/admin/feature_flags_spec.rb
@@ -15,18 +15,12 @@ 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"
-
- accept_confirm { click_button "Disable" }
- end
+ within("tr", text: "Participatory budgeting") { click_button "Yes" }
expect(page).to have_content "Value updated"
@@ -46,7 +40,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
@@ -56,13 +49,7 @@ 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"
-
- accept_confirm { click_button "Enable" }
- end
+ within("tr", text: "Participatory budgeting") { click_button "No" }
expect(page).to have_content "Value updated"
@@ -72,44 +59,30 @@ describe "Admin feature flags", :admin do
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"
-
- accept_confirm { click_button "Disable" }
- end
+ within("tr", text: "Twitter login") { click_button "Yes" }
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"
+ within("tr", text: "Twitter login") do
+ 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"
-
- accept_confirm { click_button "Enable" }
- end
+ within("tr", text: "Proposals and budget investments geolocation") { click_button "No" }
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"
+ within("tr", text: "Proposals and budget investments geolocation") do
+ expect(page).to have_button "Yes"
+ expect(page).not_to have_button "No"
end
end
end
diff --git a/spec/system/admin/settings_spec.rb b/spec/system/admin/settings_spec.rb
index 95f7831d3..4b29ec014 100644
--- a/spec/system/admin/settings_spec.rb
+++ b/spec/system/admin/settings_spec.rb
@@ -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")
@@ -274,11 +268,9 @@ describe "Admin settings", :admin do
visit admin_settings_path
click_link "SDG configuration"
+ within("tr", text: "Whatever") { click_button "No" }
- accept_alert do
- within("tr", text: "Whatever") { click_button "Enable" }
- end
-
+ expect(page).to have_content "Value updated"
expect(page).to have_current_path(admin_settings_path)
expect(page).to have_css("h2", exact_text: "SDG configuration")
end
@@ -287,32 +279,22 @@ 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") { click_button "Yes" }
expect(page).to have_content "Value updated"
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
- end
+ within("tr", text: "Skip user verification") { click_button "No" }
expect(page).to have_content "Value updated"
-
- Setting["feature.user.skip_verification"] = nil
end
end