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}_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.settings.setting") %> | -<%= t("admin.settings.setting_status") %> | -<%= t("admin.settings.setting_actions") %> | +<%= t("admin.settings.index.features.enabled") %> |
|---|---|---|---|
| - <%= 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/featured_settings_form", feature: feature, tab: tab %> + <%= render Admin::Settings::FeaturedSettingsFormComponent.new(feature, tab: tab) %> |
<%= t("settings.#{setting.key}") %>
- + <%= t("settings.#{setting.key}_description", default: t("admin.settings.no_description")) %> |
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