From 3ec628a63bc1841875f6c2b13a008aa8bbfbee76 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javi=20Mart=C3=ADn?= Date: Thu, 21 Jan 2021 00:56:43 +0100 Subject: [PATCH] Add SDG target filter to advanced search --- app/assets/stylesheets/advanced_search.scss | 4 ++-- .../concerns/sdg/goals/options_for_select.rb | 7 ------- .../concerns/sdg/options_for_select.rb | 13 ++++++++++++ .../relations/index_component.rb | 6 ++---- .../shared/advanced_search_component.html.erb | 5 +++++ .../shared/advanced_search_component.rb | 6 +++++- app/models/concerns/filterable.rb | 2 +- config/locales/en/general.yml | 2 ++ config/locales/es/general.yml | 2 ++ .../shared/advanced_search_component_spec.rb | 3 +++ spec/system/budgets/investments_spec.rb | 21 +++++++++++++++++++ spec/system/debates_spec.rb | 21 +++++++++++++++++++ spec/system/proposals_spec.rb | 21 +++++++++++++++++++ 13 files changed, 98 insertions(+), 15 deletions(-) delete mode 100644 app/components/concerns/sdg/goals/options_for_select.rb create mode 100644 app/components/concerns/sdg/options_for_select.rb diff --git a/app/assets/stylesheets/advanced_search.scss b/app/assets/stylesheets/advanced_search.scss index 4ea3a5fd1..9191bb83c 100644 --- a/app/assets/stylesheets/advanced_search.scss +++ b/app/assets/stylesheets/advanced_search.scss @@ -22,10 +22,10 @@ .date-filters { float: left; - width: 50%; + width: 25%; .filter { - width: 50%; + width: 100%; } .custom-date-filters { diff --git a/app/components/concerns/sdg/goals/options_for_select.rb b/app/components/concerns/sdg/goals/options_for_select.rb deleted file mode 100644 index 559168a3a..000000000 --- a/app/components/concerns/sdg/goals/options_for_select.rb +++ /dev/null @@ -1,7 +0,0 @@ -module SDG::Goals::OptionsForSelect - extend ActiveSupport::Concern - - def goal_options(selected_code = nil) - options_from_collection_for_select(SDG::Goal.order(:code), :code, :code_and_title, selected_code) - end -end diff --git a/app/components/concerns/sdg/options_for_select.rb b/app/components/concerns/sdg/options_for_select.rb new file mode 100644 index 000000000..a077a5993 --- /dev/null +++ b/app/components/concerns/sdg/options_for_select.rb @@ -0,0 +1,13 @@ +module SDG::OptionsForSelect + extend ActiveSupport::Concern + + def goal_options(selected_code = nil) + options_from_collection_for_select(SDG::Goal.order(:code), :code, :code_and_title, selected_code) + end + + def target_options(selected_code = nil) + targets = SDG::Target.all + SDG::LocalTarget.all + + options_from_collection_for_select(targets.sort, :code, :code, selected_code) + end +end diff --git a/app/components/sdg_management/relations/index_component.rb b/app/components/sdg_management/relations/index_component.rb index 41eb4a26f..ee55fd7a7 100644 --- a/app/components/sdg_management/relations/index_component.rb +++ b/app/components/sdg_management/relations/index_component.rb @@ -1,6 +1,6 @@ class SDGManagement::Relations::IndexComponent < ApplicationComponent include Header - include SDG::Goals::OptionsForSelect + include SDG::OptionsForSelect delegate :valid_filters, :current_filter, to: :helpers attr_reader :records @@ -53,8 +53,6 @@ class SDGManagement::Relations::IndexComponent < ApplicationComponent end def target_options - targets = SDG::Target.all + SDG::LocalTarget.all - - options_from_collection_for_select(targets.sort, :code, :code, params[:target_code]) + super(params[:target_code]) end end diff --git a/app/components/shared/advanced_search_component.html.erb b/app/components/shared/advanced_search_component.html.erb index b03a371fc..55d57129c 100644 --- a/app/components/shared/advanced_search_component.html.erb +++ b/app/components/shared/advanced_search_component.html.erb @@ -26,6 +26,11 @@ <%= select_tag("advanced_search[goal]", goal_options, include_blank: t("shared.advanced_search.goal_blank")) %> +
+ + <%= select_tag("advanced_search[target]", target_options, + include_blank: t("shared.advanced_search.target_blank")) %> +
<% end %>
diff --git a/app/components/shared/advanced_search_component.rb b/app/components/shared/advanced_search_component.rb index a03425305..636fbdfc2 100644 --- a/app/components/shared/advanced_search_component.rb +++ b/app/components/shared/advanced_search_component.rb @@ -1,5 +1,5 @@ class Shared::AdvancedSearchComponent < ApplicationComponent - include SDG::Goals::OptionsForSelect + include SDG::OptionsForSelect private @@ -34,6 +34,10 @@ class Shared::AdvancedSearchComponent < ApplicationComponent super(advanced_search[:goal]) end + def target_options + super(advanced_search[:target]) + end + def sdg? SDG::ProcessEnabled.new(controller_path).enabled? end diff --git a/app/models/concerns/filterable.rb b/app/models/concerns/filterable.rb index 0c7520580..9f86e6a9a 100644 --- a/app/models/concerns/filterable.rb +++ b/app/models/concerns/filterable.rb @@ -20,7 +20,7 @@ module Filterable def allowed_filter?(filter, value) return if value.blank? - ["official_level", "date_range", "goal"].include?(filter) + ["official_level", "date_range", "goal", "target"].include?(filter) end end end diff --git a/config/locales/en/general.yml b/config/locales/en/general.yml index 60b145e49..a150efd5a 100644 --- a/config/locales/en/general.yml +++ b/config/locales/en/general.yml @@ -697,6 +697,8 @@ en: goal: "By SDG" goal_blank: "Select a goal" search: "Filter" + target: "By target" + target_blank: "Select a target" title: "Advanced search" to: "To" author_info: diff --git a/config/locales/es/general.yml b/config/locales/es/general.yml index a01da18f4..c9e011657 100644 --- a/config/locales/es/general.yml +++ b/config/locales/es/general.yml @@ -697,6 +697,8 @@ es: goal: "Por ODS" goal_blank: "Elige un objetivo" search: "Filtrar" + target: "Por meta" + target_blank: "Elige una meta" title: "Búsqueda avanzada" to: "Hasta" author_info: diff --git a/spec/components/shared/advanced_search_component_spec.rb b/spec/components/shared/advanced_search_component_spec.rb index 1f4966d17..84f072b8f 100644 --- a/spec/components/shared/advanced_search_component_spec.rb +++ b/spec/components/shared/advanced_search_component_spec.rb @@ -17,6 +17,7 @@ describe Shared::AdvancedSearchComponent, type: :component do render_inline component expect(page).not_to have_selector "#advanced_search_goal", visible: :all + expect(page).not_to have_selector "#advanced_search_target", visible: :all end it "does not render when the SDG process feature is disabled" do @@ -25,12 +26,14 @@ describe Shared::AdvancedSearchComponent, type: :component do render_inline component expect(page).not_to have_selector "#advanced_search_goal", visible: :all + expect(page).not_to have_selector "#advanced_search_target", visible: :all end it "renders when both features are enabled" do render_inline component expect(page).to have_selector "#advanced_search_goal", visible: :all + expect(page).to have_selector "#advanced_search_target", visible: :all end end end diff --git a/spec/system/budgets/investments_spec.rb b/spec/system/budgets/investments_spec.rb index 10a6f7a4b..be79d04c0 100644 --- a/spec/system/budgets/investments_spec.rb +++ b/spec/system/budgets/investments_spec.rb @@ -500,6 +500,27 @@ describe "Budget Investments" do end end end + + scenario "Search by SDG target", :js do + Setting["feature.sdg"] = true + Setting["sdg.process.budgets"] = true + create(:budget_investment, heading: heading, title: "Unrelated") + create(:budget_investment, heading: heading, title: "High school", sdg_targets: [SDG::Target["4.1"]]) + create(:budget_investment, heading: heading, title: "Preschool", sdg_targets: [SDG::Target["4.2"]]) + + visit budget_investments_path(budget) + click_link "Advanced search" + select "4.2", from: "By target" + click_button "Filter" + + expect(page).to have_content("There is 1 investment") + + within("#budget-investments") do + expect(page).to have_content("Preschool") + expect(page).not_to have_content("High school") + expect(page).not_to have_content("Unrelated") + end + end end context("Filters") do diff --git a/spec/system/debates_spec.rb b/spec/system/debates_spec.rb index 9844c926e..d2b656139 100644 --- a/spec/system/debates_spec.rb +++ b/spec/system/debates_spec.rb @@ -866,6 +866,27 @@ describe "Debates" do end end end + + scenario "Search by SDG target", :js do + Setting["feature.sdg"] = true + Setting["sdg.process.debates"] = true + create(:debate, title: "Unrelated") + create(:debate, title: "High school", sdg_targets: [SDG::Target["4.1"]]) + create(:debate, title: "Preschool", sdg_targets: [SDG::Target["4.2"]]) + + visit debates_path + click_link "Advanced search" + select "4.2", from: "By target" + click_button "Filter" + + expect(page).to have_content("There is 1 debate") + + within("#debates") do + expect(page).to have_content("Preschool") + expect(page).not_to have_content("High school") + expect(page).not_to have_content("Unrelated") + end + end end scenario "Order by relevance by default", :js do diff --git a/spec/system/proposals_spec.rb b/spec/system/proposals_spec.rb index 4376b6d92..3cae87a62 100644 --- a/spec/system/proposals_spec.rb +++ b/spec/system/proposals_spec.rb @@ -1482,6 +1482,27 @@ describe "Proposals" do end end end + + scenario "Search by SDG target", :js do + Setting["feature.sdg"] = true + Setting["sdg.process.proposals"] = true + create(:proposal, title: "Unrelated") + create(:proposal, title: "High school", sdg_targets: [SDG::Target["4.1"]]) + create(:proposal, title: "Preschool", sdg_targets: [SDG::Target["4.2"]]) + + visit proposals_path + click_link "Advanced search" + select "4.2", from: "By target" + click_button "Filter" + + expect(page).to have_content("There is 1 citizen proposal") + + within("#proposals") do + expect(page).to have_content("Preschool") + expect(page).not_to have_content("High school") + expect(page).not_to have_content("Unrelated") + end + end end scenario "Order by relevance by default", :js do