diff --git a/app/assets/javascripts/advanced_search.js b/app/assets/javascripts/advanced_search.js
index 51b257ee7..9fcf8ae5f 100644
--- a/app/assets/javascripts/advanced_search.js
+++ b/app/assets/javascripts/advanced_search.js
@@ -32,6 +32,8 @@
App.AdvancedSearch.toggle_date_options();
}
});
+
+ App.SDGSyncGoalAndTargetFilters.sync($("#advanced_search_form"));
}
};
}).call(this);
diff --git a/app/assets/javascripts/application.js b/app/assets/javascripts/application.js
index ad7798135..f66510049 100644
--- a/app/assets/javascripts/application.js
+++ b/app/assets/javascripts/application.js
@@ -112,7 +112,8 @@
//= require columns_selector
//= require budget_edit_associations
//= require datepicker
-//= require sdg/related_list_selector
+//= require_tree ./sdg
+//= require_tree ./sdg_management
var initialize_modules = function() {
"use strict";
@@ -166,6 +167,7 @@ var initialize_modules = function() {
App.BudgetEditAssociations.initialize();
App.Datepicker.initialize();
App.SDGRelatedListSelector.initialize();
+ App.SDGManagementRelationSearch.initialize();
};
var destroy_non_idempotent_modules = function() {
diff --git a/app/assets/javascripts/sdg/sync_goal_and_target_filters.js b/app/assets/javascripts/sdg/sync_goal_and_target_filters.js
new file mode 100644
index 000000000..6ded27389
--- /dev/null
+++ b/app/assets/javascripts/sdg/sync_goal_and_target_filters.js
@@ -0,0 +1,28 @@
+(function() {
+ "use strict";
+ App.SDGSyncGoalAndTargetFilters = {
+ sync: function(form) {
+ var goal_filter = form.find("[name*=goal]");
+ var target_filter = form.find("[name*=target]");
+
+ goal_filter.on("change", function() {
+ if (this.value) {
+ App.SDGSyncGoalAndTargetFilters.enable_goal_options(target_filter, this.value);
+ } else {
+ target_filter.find("option").prop("disabled", false).prop("hidden", false);
+ }
+ }).trigger("change");
+ },
+ enable_goal_options: function(target_filter, goal_code) {
+ var base_target_code = goal_code + ".";
+ var target_selector = "[value^='" + base_target_code + "'], [value='']";
+
+ target_filter.find("option" + target_selector).prop("disabled", false).prop("hidden", false);
+ target_filter.find("option:not(" + target_selector + ")").prop("disabled", true).prop("hidden", true);
+
+ if (!target_filter[0].value.startsWith(base_target_code)) {
+ target_filter.val("");
+ }
+ }
+ };
+}).call(this);
diff --git a/app/assets/javascripts/sdg_management/relations/search.js b/app/assets/javascripts/sdg_management/relations/search.js
new file mode 100644
index 000000000..328d40fea
--- /dev/null
+++ b/app/assets/javascripts/sdg_management/relations/search.js
@@ -0,0 +1,8 @@
+(function() {
+ "use strict";
+ App.SDGManagementRelationSearch = {
+ initialize: function() {
+ App.SDGSyncGoalAndTargetFilters.sync($(".sdg-relations-search"));
+ }
+ };
+}).call(this);
diff --git a/app/components/sdg_management/relations/index_component.html.erb b/app/components/sdg_management/relations/index_component.html.erb
index 484d49ce9..4dfd0cc5a 100644
--- a/app/components/sdg_management/relations/index_component.html.erb
+++ b/app/components/sdg_management/relations/index_component.html.erb
@@ -1,15 +1,6 @@
<%= header %>
-<%= render Admin::SearchComponent.new(label: search_label, class: "complex") do |component| %>
- <%= component.select_tag :goal_code, goal_options,
- include_blank: goal_blank_option,
- "aria-label": goal_label %>
- <%= component.select_tag :target_code, target_options,
- include_blank: target_blank_option,
- "aria-label": target_label %>
- <%= component.hidden_field_tag :filter, current_filter %>
-<% end %>
-
+<%= render SDGManagement::Relations::SearchComponent.new(label: search_label, current_filter: current_filter) %>
<%= render "shared/filter_subnav", i18n_namespace: "sdg_management.relations.index" %>
diff --git a/app/components/sdg_management/relations/index_component.rb b/app/components/sdg_management/relations/index_component.rb
index ee55fd7a7..0db934e13 100644
--- a/app/components/sdg_management/relations/index_component.rb
+++ b/app/components/sdg_management/relations/index_component.rb
@@ -1,6 +1,5 @@
class SDGManagement::Relations::IndexComponent < ApplicationComponent
include Header
- include SDG::OptionsForSelect
delegate :valid_filters, :current_filter, to: :helpers
attr_reader :records
@@ -31,28 +30,4 @@ class SDGManagement::Relations::IndexComponent < ApplicationComponent
def search_label
t("admin.shared.search.label.#{model_class.table_name}")
end
-
- def goal_label
- t("admin.shared.search.advanced_filters.sdg_goals.label")
- end
-
- def goal_blank_option
- t("admin.shared.search.advanced_filters.sdg_goals.all")
- end
-
- def target_label
- t("admin.shared.search.advanced_filters.sdg_targets.label")
- end
-
- def target_blank_option
- t("admin.shared.search.advanced_filters.sdg_targets.all")
- end
-
- def goal_options
- super(params[:goal_code])
- end
-
- def target_options
- super(params[:target_code])
- end
end
diff --git a/app/components/sdg_management/relations/search_component.html.erb b/app/components/sdg_management/relations/search_component.html.erb
new file mode 100644
index 000000000..d77f21c8f
--- /dev/null
+++ b/app/components/sdg_management/relations/search_component.html.erb
@@ -0,0 +1,9 @@
+<%= render Admin::SearchComponent.new(label: label, class: "sdg-relations-search complex") do |component| %>
+ <%= component.select_tag :goal_code, goal_options,
+ include_blank: goal_blank_option,
+ "aria-label": goal_label %>
+ <%= component.select_tag :target_code, target_options,
+ include_blank: target_blank_option,
+ "aria-label": target_label %>
+ <%= component.hidden_field_tag :filter, current_filter %>
+<% end %>
diff --git a/app/components/sdg_management/relations/search_component.rb b/app/components/sdg_management/relations/search_component.rb
new file mode 100644
index 000000000..fdbe9c833
--- /dev/null
+++ b/app/components/sdg_management/relations/search_component.rb
@@ -0,0 +1,35 @@
+class SDGManagement::Relations::SearchComponent < ApplicationComponent
+ include SDG::OptionsForSelect
+ attr_reader :label, :current_filter
+
+ def initialize(label:, current_filter: nil)
+ @label = label
+ @current_filter = current_filter
+ end
+
+ private
+
+ def goal_label
+ t("admin.shared.search.advanced_filters.sdg_goals.label")
+ end
+
+ def goal_blank_option
+ t("admin.shared.search.advanced_filters.sdg_goals.all")
+ end
+
+ def target_label
+ t("admin.shared.search.advanced_filters.sdg_targets.label")
+ end
+
+ def target_blank_option
+ t("admin.shared.search.advanced_filters.sdg_targets.all")
+ end
+
+ def goal_options
+ super(params[:goal_code])
+ end
+
+ def target_options
+ super(params[:target_code])
+ end
+end
diff --git a/spec/components/sdg_management/relations/index_component_spec.rb b/spec/components/sdg_management/relations/index_component_spec.rb
index dbe5be7e4..e3de6d5c4 100644
--- a/spec/components/sdg_management/relations/index_component_spec.rb
+++ b/spec/components/sdg_management/relations/index_component_spec.rb
@@ -11,16 +11,11 @@ describe SDGManagement::Relations::IndexComponent, type: :component do
.and_return("/anything")
end
- describe "#goal_options" do
- it "orders goals by code in the select" do
- component = SDGManagement::Relations::IndexComponent.new(Proposal.none.page(1))
+ it "renders the search form" do
+ component = SDGManagement::Relations::IndexComponent.new(Proposal.none.page(1))
- render_inline component
- options = page.find("#goal_code").all("option")
+ render_inline component
- expect(options[0]).to have_content "All goals"
- expect(options[1]).to have_content "1. "
- expect(options[17]).to have_content "17. "
- end
+ expect(page).to have_css "form.complex"
end
end
diff --git a/spec/components/sdg_management/relations/search_component_spec.rb b/spec/components/sdg_management/relations/search_component_spec.rb
new file mode 100644
index 000000000..d3fd93c0f
--- /dev/null
+++ b/spec/components/sdg_management/relations/search_component_spec.rb
@@ -0,0 +1,16 @@
+require "rails_helper"
+
+describe SDGManagement::Relations::SearchComponent, type: :component do
+ describe "#goal_options" do
+ it "orders goals by code in the select" do
+ component = SDGManagement::Relations::SearchComponent.new(label: "Search proposals")
+
+ render_inline component
+ options = page.find("#goal_code").all("option")
+
+ expect(options[0]).to have_content "All goals"
+ expect(options[1]).to have_content "1. "
+ expect(options[17]).to have_content "17. "
+ end
+ end
+end
diff --git a/spec/system/advanced_search_spec.rb b/spec/system/advanced_search_spec.rb
new file mode 100644
index 000000000..a18795f65
--- /dev/null
+++ b/spec/system/advanced_search_spec.rb
@@ -0,0 +1,442 @@
+require "rails_helper"
+
+describe "Advanced search", :js do
+ let(:budget) { create(:budget, name: "Big Budget") }
+ let(:heading) { create(:budget_heading, budget: budget, name: "More hospitals") }
+
+ scenario "Search debates" do
+ debate1 = create(:debate, title: "Get Schwifty")
+ debate2 = create(:debate, title: "Schwifty Hello")
+ debate3 = create(:debate, title: "Do not show me")
+
+ visit debates_path
+
+ click_link "Advanced search"
+ fill_in "Write the text", with: "Schwifty"
+ click_button "Filter"
+
+ expect(page).to have_content("There are 2 debates")
+
+ within("#debates") do
+ expect(page).to have_content(debate1.title)
+ expect(page).to have_content(debate2.title)
+ expect(page).not_to have_content(debate3.title)
+ end
+ end
+
+ scenario "Search proposals" do
+ proposal1 = create(:proposal, title: "Get Schwifty")
+ proposal2 = create(:proposal, title: "Schwifty Hello")
+ proposal3 = create(:proposal, title: "Do not show me")
+
+ visit proposals_path
+
+ click_link "Advanced search"
+ fill_in "Write the text", with: "Schwifty"
+ click_button "Filter"
+
+ expect(page).to have_content("There are 2 citizen proposals")
+
+ within("#proposals") do
+ expect(page).to have_content(proposal1.title)
+ expect(page).to have_content(proposal2.title)
+ expect(page).not_to have_content(proposal3.title)
+ end
+ end
+
+ scenario "Search investments" do
+ bdgt_invest1 = create(:budget_investment, heading: heading, title: "Get Schwifty")
+ bdgt_invest2 = create(:budget_investment, heading: heading, title: "Schwifty Hello")
+ bdgt_invest3 = create(:budget_investment, heading: heading, title: "Do not show me")
+
+ visit budget_investments_path(budget)
+
+ click_link "Advanced search"
+ fill_in "Write the text", with: "Schwifty"
+ click_button "Filter"
+
+ expect(page).to have_content("There are 2 investments")
+
+ within("#budget-investments") do
+ expect(page).to have_content(bdgt_invest1.title)
+ expect(page).to have_content(bdgt_invest2.title)
+ expect(page).not_to have_content(bdgt_invest3.title)
+ end
+ end
+
+ context "Search by author type" do
+ scenario "Public employee" do
+ ana = create :user, official_level: 1
+ john = create :user, official_level: 2
+
+ debate1 = create(:debate, author: ana)
+ debate2 = create(:debate, author: ana)
+ debate3 = create(:debate, author: john)
+
+ visit debates_path
+
+ click_link "Advanced search"
+ select Setting["official_level_1_name"], from: "advanced_search_official_level"
+ click_button "Filter"
+
+ expect(page).to have_content("There are 2 debates")
+
+ within("#debates") do
+ expect(page).to have_content(debate1.title)
+ expect(page).to have_content(debate2.title)
+ expect(page).not_to have_content(debate3.title)
+ end
+ end
+
+ scenario "Municipal Organization" do
+ ana = create :user, official_level: 2
+ john = create :user, official_level: 3
+
+ proposal1 = create(:proposal, author: ana)
+ proposal2 = create(:proposal, author: ana)
+ proposal3 = create(:proposal, author: john)
+
+ visit proposals_path
+
+ click_link "Advanced search"
+ select Setting["official_level_2_name"], from: "advanced_search_official_level"
+ click_button "Filter"
+
+ expect(page).to have_content("There are 2 citizen proposals")
+
+ within("#proposals") do
+ expect(page).to have_content(proposal1.title)
+ expect(page).to have_content(proposal2.title)
+ expect(page).not_to have_content(proposal3.title)
+ end
+ end
+
+ scenario "General director" do
+ ana = create :user, official_level: 3
+ john = create :user, official_level: 4
+
+ bdgt_invest1 = create(:budget_investment, heading: heading, author: ana)
+ bdgt_invest2 = create(:budget_investment, heading: heading, author: ana)
+ bdgt_invest3 = create(:budget_investment, heading: heading, author: john)
+
+ visit budget_investments_path(budget)
+
+ click_link "Advanced search"
+ select Setting["official_level_3_name"], from: "advanced_search_official_level"
+ click_button "Filter"
+
+ expect(page).to have_content("There are 2 investments")
+
+ within("#budget-investments") do
+ expect(page).to have_content(bdgt_invest1.title)
+ expect(page).to have_content(bdgt_invest2.title)
+ expect(page).not_to have_content(bdgt_invest3.title)
+ end
+ end
+
+ scenario "City councillor" do
+ ana = create :user, official_level: 4
+ john = create :user, official_level: 5
+
+ debate1 = create(:debate, author: ana)
+ debate2 = create(:debate, author: ana)
+ debate3 = create(:debate, author: john)
+
+ visit debates_path
+
+ click_link "Advanced search"
+ select Setting["official_level_4_name"], from: "advanced_search_official_level"
+ click_button "Filter"
+
+ expect(page).to have_content("There are 2 debates")
+
+ within("#debates") do
+ expect(page).to have_content(debate1.title)
+ expect(page).to have_content(debate2.title)
+ expect(page).not_to have_content(debate3.title)
+ end
+ end
+
+ scenario "Mayoress" do
+ ana = create :user, official_level: 5
+ john = create :user, official_level: 4
+
+ proposal1 = create(:proposal, author: ana)
+ proposal2 = create(:proposal, author: ana)
+ proposal3 = create(:proposal, author: john)
+
+ visit proposals_path
+
+ click_link "Advanced search"
+ select Setting["official_level_5_name"], from: "advanced_search_official_level"
+ click_button "Filter"
+
+ expect(page).to have_content("There are 2 citizen proposals")
+
+ within("#proposals") do
+ expect(page).to have_content(proposal1.title)
+ expect(page).to have_content(proposal2.title)
+ expect(page).not_to have_content(proposal3.title)
+ end
+ end
+
+ context "Search by date" do
+ context "Predefined date ranges" do
+ scenario "Last day" do
+ bdgt_invest1 = create(:budget_investment, heading: heading, created_at: 1.minute.ago)
+ bdgt_invest2 = create(:budget_investment, heading: heading, created_at: 1.hour.ago)
+ bdgt_invest3 = create(:budget_investment, heading: heading, created_at: 2.days.ago)
+
+ visit budget_investments_path(budget)
+
+ click_link "Advanced search"
+ select "Last 24 hours", from: "js-advanced-search-date-min"
+ click_button "Filter"
+
+ expect(page).to have_content("There are 2 investments")
+
+ within("#budget-investments") do
+ expect(page).to have_content(bdgt_invest1.title)
+ expect(page).to have_content(bdgt_invest2.title)
+ expect(page).not_to have_content(bdgt_invest3.title)
+ end
+ end
+
+ scenario "Last week" do
+ debate1 = create(:debate, created_at: 1.day.ago)
+ debate2 = create(:debate, created_at: 5.days.ago)
+ debate3 = create(:debate, created_at: 8.days.ago)
+
+ visit debates_path
+
+ click_link "Advanced search"
+ select "Last week", from: "js-advanced-search-date-min"
+ click_button "Filter"
+
+ within("#debates") do
+ expect(page).to have_css(".debate", count: 2)
+
+ expect(page).to have_content(debate1.title)
+ expect(page).to have_content(debate2.title)
+ expect(page).not_to have_content(debate3.title)
+ end
+ end
+
+ scenario "Last month" do
+ proposal1 = create(:proposal, created_at: 10.days.ago)
+ proposal2 = create(:proposal, created_at: 20.days.ago)
+ proposal3 = create(:proposal, created_at: 33.days.ago)
+
+ visit proposals_path
+
+ click_link "Advanced search"
+ select "Last month", from: "js-advanced-search-date-min"
+ click_button "Filter"
+
+ expect(page).to have_content("There are 2 citizen proposals")
+
+ within("#proposals") do
+ expect(page).to have_content(proposal1.title)
+ expect(page).to have_content(proposal2.title)
+ expect(page).not_to have_content(proposal3.title)
+ end
+ end
+
+ scenario "Last year" do
+ bdgt_invest1 = create(:budget_investment, heading: heading, created_at: 300.days.ago)
+ bdgt_invest2 = create(:budget_investment, heading: heading, created_at: 350.days.ago)
+ bdgt_invest3 = create(:budget_investment, heading: heading, created_at: 370.days.ago)
+
+ visit budget_investments_path(budget)
+
+ click_link "Advanced search"
+ select "Last year", from: "js-advanced-search-date-min"
+ click_button "Filter"
+
+ expect(page).to have_content("There are 2 investments")
+
+ within("#budget-investments") do
+ expect(page).to have_content(bdgt_invest1.title)
+ expect(page).to have_content(bdgt_invest2.title)
+ expect(page).not_to have_content(bdgt_invest3.title)
+ end
+ end
+ end
+
+ scenario "Search by custom date range" do
+ debate1 = create(:debate, created_at: 2.days.ago)
+ debate2 = create(:debate, created_at: 3.days.ago)
+ debate3 = create(:debate, created_at: 9.days.ago)
+
+ visit debates_path
+
+ click_link "Advanced search"
+ select "Customized", from: "js-advanced-search-date-min"
+ fill_in "advanced_search_date_min", with: 7.days.ago
+ fill_in "advanced_search_date_max", with: 1.day.ago
+ click_button "Filter"
+
+ within("#debates") do
+ expect(page).to have_css(".debate", count: 2)
+
+ expect(page).to have_content(debate1.title)
+ expect(page).to have_content(debate2.title)
+ expect(page).not_to have_content(debate3.title)
+ end
+ end
+
+ scenario "Search by custom invalid date range" do
+ proposal1 = create(:proposal, created_at: 2.days.ago)
+ proposal2 = create(:proposal, created_at: 3.days.ago)
+ proposal3 = create(:proposal, created_at: 9.days.ago)
+
+ visit proposals_path
+
+ click_link "Advanced search"
+ select "Customized", from: "js-advanced-search-date-min"
+ fill_in "advanced_search_date_min", with: 4000.years.ago
+ fill_in "advanced_search_date_max", with: "wrong date"
+ click_button "Filter"
+
+ expect(page).to have_content("There are 3 citizen proposals")
+
+ within("#proposals") do
+ expect(page).to have_content(proposal1.title)
+ expect(page).to have_content(proposal2.title)
+ expect(page).to have_content(proposal3.title)
+ end
+ end
+
+ scenario "Search by multiple filters" do
+ ana = create :user, official_level: 1
+ john = create :user, official_level: 1
+
+ create(:budget_investment, heading: heading, title: "Get Schwifty", author: ana, created_at: 1.minute.ago)
+ create(:budget_investment, heading: heading, title: "Hello Schwifty", author: john, created_at: 2.days.ago)
+ create(:budget_investment, heading: heading, title: "Save the forest")
+
+ visit budget_investments_path(budget)
+
+ click_link "Advanced search"
+ fill_in "Write the text", with: "Schwifty"
+ select Setting["official_level_1_name"], from: "advanced_search_official_level"
+ select "Last 24 hours", from: "js-advanced-search-date-min"
+
+ click_button "Filter"
+
+ expect(page).to have_content("There is 1 investment")
+
+ within("#budget-investments") do
+ expect(page).to have_content "Get Schwifty"
+ end
+ end
+
+ scenario "Maintain advanced search criteria" do
+ visit debates_path
+ click_link "Advanced search"
+
+ fill_in "Write the text", with: "Schwifty"
+ select Setting["official_level_1_name"], from: "advanced_search_official_level"
+ select "Last 24 hours", from: "js-advanced-search-date-min"
+
+ click_button "Filter"
+
+ within "#js-advanced-search" do
+ expect(page).to have_selector("input[name='search'][value='Schwifty']")
+ expect(page).to have_select("advanced_search[official_level]", selected: Setting["official_level_1_name"])
+ expect(page).to have_select("advanced_search[date_min]", selected: "Last 24 hours")
+ end
+ end
+
+ scenario "Maintain custom date search criteria" do
+ visit proposals_path
+ click_link "Advanced search"
+
+ select "Customized", from: "js-advanced-search-date-min"
+ fill_in "advanced_search_date_min", with: 7.days.ago.strftime("%d/%m/%Y")
+ fill_in "advanced_search_date_max", with: 1.day.ago.strftime("%d/%m/%Y")
+ click_button "Filter"
+
+ expect(page).to have_content("citizen proposals cannot be found")
+
+ within "#js-advanced-search" do
+ expect(page).to have_select("advanced_search[date_min]", selected: "Customized")
+ expect(page).to have_selector("input[name='advanced_search[date_min]'][value*='#{7.days.ago.strftime("%d/%m/%Y")}']")
+ expect(page).to have_selector("input[name='advanced_search[date_max]'][value*='#{1.day.ago.strftime("%d/%m/%Y")}']")
+ end
+ end
+ end
+
+ describe "SDG" do
+ before do
+ Setting["feature.sdg"] = true
+ Setting["sdg.process.debates"] = true
+ Setting["sdg.process.proposals"] = true
+ Setting["sdg.process.budgets"] = true
+ end
+
+ scenario "Search by goal" do
+ create(:budget_investment, title: "Purifier", heading: heading, sdg_goals: [SDG::Goal[6]])
+ create(:budget_investment, title: "Hospital", heading: heading, sdg_goals: [SDG::Goal[3]])
+
+ visit budget_investments_path(budget)
+ click_link "Advanced search"
+ select "6. Clean Water and Sanitation", from: "By SDG"
+ click_button "Filter"
+
+ expect(page).to have_content("There is 1 investment")
+
+ within("#budget-investments") do
+ expect(page).to have_content "Purifier"
+ expect(page).not_to have_content "Hospital"
+ end
+
+ expect(page).to have_select "By target",
+ selected: "Select a target",
+ enabled_options: ["Select a target"] + %w[6.1 6.2 6.3 6.4 6.5 6.6 6.A 6.B]
+ end
+
+ scenario "Search by target" do
+ 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
+
+ scenario "Dynamic target options depending on the selected goal" do
+ visit proposals_path
+
+ click_link "Advanced search"
+ select "1. No Poverty", from: "By SDG"
+
+ expect(page).to have_select "By target",
+ selected: "Select a target",
+ enabled_options: ["Select a target"] + %w[1.1 1.2 1.3 1.4 1.5 1.A 1.B]
+
+ select "1.1", from: "By target"
+ select "13. Climate Action", from: "By SDG"
+
+ expect(page).to have_select "By target",
+ selected: "Select a target",
+ enabled_options: ["Select a target"] + %w[13.1 13.2 13.3 13.A 13.B]
+
+ select "13.1", from: "By target"
+ select "Select a goal", from: "By SDG"
+
+ expect(page).to have_select "By target", selected: "13.1", disabled_options: []
+ end
+ end
+ end
+end
diff --git a/spec/system/budgets/investments_spec.rb b/spec/system/budgets/investments_spec.rb
index be79d04c0..11a7707fd 100644
--- a/spec/system/budgets/investments_spec.rb
+++ b/spec/system/budgets/investments_spec.rb
@@ -172,355 +172,6 @@ describe "Budget Investments" do
expect(page).not_to have_content(investment3.title)
end
end
-
- context "Advanced search" do
- scenario "Search by text", :js do
- bdgt_invest1 = create(:budget_investment, heading: heading, title: "Get Schwifty")
- bdgt_invest2 = create(:budget_investment, heading: heading, title: "Schwifty Hello")
- bdgt_invest3 = create(:budget_investment, heading: heading, title: "Do not show me")
-
- visit budget_investments_path(budget)
-
- click_link "Advanced search"
- fill_in "Write the text", with: "Schwifty"
- click_button "Filter"
-
- expect(page).to have_content("There are 2 investments")
-
- within("#budget-investments") do
- expect(page).to have_content(bdgt_invest1.title)
- expect(page).to have_content(bdgt_invest2.title)
- expect(page).not_to have_content(bdgt_invest3.title)
- end
- end
-
- context "Search by author type" do
- scenario "Public employee", :js do
- ana = create :user, official_level: 1
- john = create :user, official_level: 2
-
- bdgt_invest1 = create(:budget_investment, heading: heading, author: ana)
- bdgt_invest2 = create(:budget_investment, heading: heading, author: ana)
- bdgt_invest3 = create(:budget_investment, heading: heading, author: john)
-
- visit budget_investments_path(budget)
-
- click_link "Advanced search"
- select Setting["official_level_1_name"], from: "advanced_search_official_level"
- click_button "Filter"
-
- expect(page).to have_content("There are 2 investments")
-
- within("#budget-investments") do
- expect(page).to have_content(bdgt_invest1.title)
- expect(page).to have_content(bdgt_invest2.title)
- expect(page).not_to have_content(bdgt_invest3.title)
- end
- end
-
- scenario "Municipal Organization", :js do
- ana = create :user, official_level: 2
- john = create :user, official_level: 3
-
- bdgt_invest1 = create(:budget_investment, heading: heading, author: ana)
- bdgt_invest2 = create(:budget_investment, heading: heading, author: ana)
- bdgt_invest3 = create(:budget_investment, heading: heading, author: john)
-
- visit budget_investments_path(budget)
-
- click_link "Advanced search"
- select Setting["official_level_2_name"], from: "advanced_search_official_level"
- click_button "Filter"
-
- expect(page).to have_content("There are 2 investments")
-
- within("#budget-investments") do
- expect(page).to have_content(bdgt_invest1.title)
- expect(page).to have_content(bdgt_invest2.title)
- expect(page).not_to have_content(bdgt_invest3.title)
- end
- end
-
- scenario "General director", :js do
- ana = create :user, official_level: 3
- john = create :user, official_level: 4
-
- bdgt_invest1 = create(:budget_investment, heading: heading, author: ana)
- bdgt_invest2 = create(:budget_investment, heading: heading, author: ana)
- bdgt_invest3 = create(:budget_investment, heading: heading, author: john)
-
- visit budget_investments_path(budget)
-
- click_link "Advanced search"
- select Setting["official_level_3_name"], from: "advanced_search_official_level"
- click_button "Filter"
-
- expect(page).to have_content("There are 2 investments")
-
- within("#budget-investments") do
- expect(page).to have_content(bdgt_invest1.title)
- expect(page).to have_content(bdgt_invest2.title)
- expect(page).not_to have_content(bdgt_invest3.title)
- end
- end
-
- scenario "City councillor", :js do
- ana = create :user, official_level: 4
- john = create :user, official_level: 5
-
- bdgt_invest1 = create(:budget_investment, heading: heading, author: ana)
- bdgt_invest2 = create(:budget_investment, heading: heading, author: ana)
- bdgt_invest3 = create(:budget_investment, heading: heading, author: john)
-
- visit budget_investments_path(budget)
-
- click_link "Advanced search"
- select Setting["official_level_4_name"], from: "advanced_search_official_level"
- click_button "Filter"
-
- expect(page).to have_content("There are 2 investments")
-
- within("#budget-investments") do
- expect(page).to have_content(bdgt_invest1.title)
- expect(page).to have_content(bdgt_invest2.title)
- expect(page).not_to have_content(bdgt_invest3.title)
- end
- end
-
- scenario "Mayoress", :js do
- ana = create :user, official_level: 5
- john = create :user, official_level: 4
-
- bdgt_invest1 = create(:budget_investment, heading: heading, author: ana)
- bdgt_invest2 = create(:budget_investment, heading: heading, author: ana)
- bdgt_invest3 = create(:budget_investment, heading: heading, author: john)
-
- visit budget_investments_path(budget)
-
- click_link "Advanced search"
- select Setting["official_level_5_name"], from: "advanced_search_official_level"
- click_button "Filter"
-
- expect(page).to have_content("There are 2 investments")
-
- within("#budget-investments") do
- expect(page).to have_content(bdgt_invest1.title)
- expect(page).to have_content(bdgt_invest2.title)
- expect(page).not_to have_content(bdgt_invest3.title)
- end
- end
- end
-
- context "Search by date" do
- context "Predefined date ranges" do
- scenario "Last day", :js do
- bdgt_invest1 = create(:budget_investment, heading: heading, created_at: 1.minute.ago)
- bdgt_invest2 = create(:budget_investment, heading: heading, created_at: 1.hour.ago)
- bdgt_invest3 = create(:budget_investment, heading: heading, created_at: 2.days.ago)
-
- visit budget_investments_path(budget)
-
- click_link "Advanced search"
- select "Last 24 hours", from: "js-advanced-search-date-min"
- click_button "Filter"
-
- expect(page).to have_content("There are 2 investments")
-
- within("#budget-investments") do
- expect(page).to have_content(bdgt_invest1.title)
- expect(page).to have_content(bdgt_invest2.title)
- expect(page).not_to have_content(bdgt_invest3.title)
- end
- end
-
- scenario "Last week", :js do
- bdgt_invest1 = create(:budget_investment, heading: heading, created_at: 1.day.ago)
- bdgt_invest2 = create(:budget_investment, heading: heading, created_at: 5.days.ago)
- bdgt_invest3 = create(:budget_investment, heading: heading, created_at: 8.days.ago)
-
- visit budget_investments_path(budget)
-
- click_link "Advanced search"
- select "Last week", from: "js-advanced-search-date-min"
- click_button "Filter"
-
- expect(page).to have_content("There are 2 investments")
-
- within("#budget-investments") do
- expect(page).to have_content(bdgt_invest1.title)
- expect(page).to have_content(bdgt_invest2.title)
- expect(page).not_to have_content(bdgt_invest3.title)
- end
- end
-
- scenario "Last month", :js do
- bdgt_invest1 = create(:budget_investment, heading: heading, created_at: 10.days.ago)
- bdgt_invest2 = create(:budget_investment, heading: heading, created_at: 20.days.ago)
- bdgt_invest3 = create(:budget_investment, heading: heading, created_at: 33.days.ago)
-
- visit budget_investments_path(budget)
-
- click_link "Advanced search"
- select "Last month", from: "js-advanced-search-date-min"
- click_button "Filter"
-
- expect(page).to have_content("There are 2 investments")
-
- within("#budget-investments") do
- expect(page).to have_content(bdgt_invest1.title)
- expect(page).to have_content(bdgt_invest2.title)
- expect(page).not_to have_content(bdgt_invest3.title)
- end
- end
-
- scenario "Last year", :js do
- bdgt_invest1 = create(:budget_investment, heading: heading, created_at: 300.days.ago)
- bdgt_invest2 = create(:budget_investment, heading: heading, created_at: 350.days.ago)
- bdgt_invest3 = create(:budget_investment, heading: heading, created_at: 370.days.ago)
-
- visit budget_investments_path(budget)
-
- click_link "Advanced search"
- select "Last year", from: "js-advanced-search-date-min"
- click_button "Filter"
-
- expect(page).to have_content("There are 2 investments")
-
- within("#budget-investments") do
- expect(page).to have_content(bdgt_invest1.title)
- expect(page).to have_content(bdgt_invest2.title)
- expect(page).not_to have_content(bdgt_invest3.title)
- end
- end
- end
-
- scenario "Search by custom date range", :js do
- bdgt_invest1 = create(:budget_investment, heading: heading, created_at: 2.days.ago)
- bdgt_invest2 = create(:budget_investment, heading: heading, created_at: 3.days.ago)
- bdgt_invest3 = create(:budget_investment, heading: heading, created_at: 9.days.ago)
-
- visit budget_investments_path(budget)
-
- click_link "Advanced search"
- select "Customized", from: "js-advanced-search-date-min"
- fill_in "advanced_search_date_min", with: 7.days.ago
- fill_in "advanced_search_date_max", with: 1.day.ago
- click_button "Filter"
-
- expect(page).to have_content("There are 2 investments")
-
- within("#budget-investments") do
- expect(page).to have_content(bdgt_invest1.title)
- expect(page).to have_content(bdgt_invest2.title)
- expect(page).not_to have_content(bdgt_invest3.title)
- end
- end
-
- scenario "Search by custom invalid date range", :js do
- bdgt_invest1 = create(:budget_investment, heading: heading, created_at: 2.days.ago)
- bdgt_invest2 = create(:budget_investment, heading: heading, created_at: 3.days.ago)
- bdgt_invest3 = create(:budget_investment, heading: heading, created_at: 9.days.ago)
-
- visit budget_investments_path(budget)
-
- click_link "Advanced search"
- select "Customized", from: "js-advanced-search-date-min"
- fill_in "advanced_search_date_min", with: 4000.years.ago
- fill_in "advanced_search_date_max", with: "wrong date"
- click_button "Filter"
-
- expect(page).to have_content("There are 3 investments")
-
- within("#budget-investments") do
- expect(page).to have_content(bdgt_invest1.title)
- expect(page).to have_content(bdgt_invest2.title)
- expect(page).to have_content(bdgt_invest3.title)
- end
- end
-
- scenario "Search by multiple filters", :js do
- ana = create :user, official_level: 1
- john = create :user, official_level: 1
-
- create(:budget_investment, heading: heading, title: "Get Schwifty", author: ana, created_at: 1.minute.ago)
- create(:budget_investment, heading: heading, title: "Hello Schwifty", author: john, created_at: 2.days.ago)
- create(:budget_investment, heading: heading, title: "Save the forest")
-
- visit budget_investments_path(budget)
-
- click_link "Advanced search"
- fill_in "Write the text", with: "Schwifty"
- select Setting["official_level_1_name"], from: "advanced_search_official_level"
- select "Last 24 hours", from: "js-advanced-search-date-min"
-
- click_button "Filter"
-
- expect(page).to have_content("There is 1 investment")
-
- within("#budget-investments") do
- expect(page).to have_content "Get Schwifty"
- end
- end
-
- scenario "Maintain advanced search criteria", :js do
- visit budget_investments_path(budget)
- click_link "Advanced search"
-
- fill_in "Write the text", with: "Schwifty"
- select Setting["official_level_1_name"], from: "advanced_search_official_level"
- select "Last 24 hours", from: "js-advanced-search-date-min"
-
- click_button "Filter"
-
- expect(page).to have_content("investments cannot be found")
-
- within "#js-advanced-search" do
- expect(page).to have_selector("input[name='search'][value='Schwifty']")
- expect(page).to have_select("advanced_search[official_level]", selected: Setting["official_level_1_name"])
- expect(page).to have_select("advanced_search[date_min]", selected: "Last 24 hours")
- end
- end
-
- scenario "Maintain custom date search criteria", :js do
- visit budget_investments_path(budget)
- click_link "Advanced search"
-
- select "Customized", from: "js-advanced-search-date-min"
- fill_in "advanced_search_date_min", with: 7.days.ago.strftime("%d/%m/%Y")
- fill_in "advanced_search_date_max", with: 1.day.ago.strftime("%d/%m/%Y")
- click_button "Filter"
-
- expect(page).to have_content("investments cannot be found")
-
- within "#js-advanced-search" do
- expect(page).to have_select("advanced_search[date_min]", selected: "Customized")
- expect(page).to have_selector("input[name='advanced_search[date_min]'][value*='#{7.days.ago.strftime("%d/%m/%Y")}']")
- expect(page).to have_selector("input[name='advanced_search[date_max]'][value*='#{1.day.ago.strftime("%d/%m/%Y")}']")
- end
- 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 d2b656139..6e052681e 100644
--- a/spec/system/debates_spec.rb
+++ b/spec/system/debates_spec.rb
@@ -545,350 +545,6 @@ describe "Debates" do
end
end
- context "Advanced search" do
- scenario "Search by text", :js do
- debate1 = create(:debate, title: "Get Schwifty")
- debate2 = create(:debate, title: "Schwifty Hello")
- debate3 = create(:debate, title: "Do not show me")
-
- visit debates_path
-
- click_link "Advanced search"
- fill_in "Write the text", with: "Schwifty"
- click_button "Filter"
-
- expect(page).to have_content("There are 2 debates")
-
- within("#debates") do
- expect(page).to have_content(debate1.title)
- expect(page).to have_content(debate2.title)
- expect(page).not_to have_content(debate3.title)
- end
- end
-
- context "Search by author type" do
- scenario "Public employee", :js do
- ana = create :user, official_level: 1
- john = create :user, official_level: 2
-
- debate1 = create(:debate, author: ana)
- debate2 = create(:debate, author: ana)
- debate3 = create(:debate, author: john)
-
- visit debates_path
-
- click_link "Advanced search"
- select Setting["official_level_1_name"], from: "advanced_search_official_level"
- click_button "Filter"
-
- expect(page).to have_content("There are 2 debates")
-
- within("#debates") do
- expect(page).to have_content(debate1.title)
- expect(page).to have_content(debate2.title)
- expect(page).not_to have_content(debate3.title)
- end
- end
-
- scenario "Municipal Organization", :js do
- ana = create :user, official_level: 2
- john = create :user, official_level: 3
-
- debate1 = create(:debate, author: ana)
- debate2 = create(:debate, author: ana)
- debate3 = create(:debate, author: john)
-
- visit debates_path
-
- click_link "Advanced search"
- select Setting["official_level_2_name"], from: "advanced_search_official_level"
- click_button "Filter"
-
- expect(page).to have_content("There are 2 debates")
-
- within("#debates") do
- expect(page).to have_content(debate1.title)
- expect(page).to have_content(debate2.title)
- expect(page).not_to have_content(debate3.title)
- end
- end
-
- scenario "General director", :js do
- ana = create :user, official_level: 3
- john = create :user, official_level: 4
-
- debate1 = create(:debate, author: ana)
- debate2 = create(:debate, author: ana)
- debate3 = create(:debate, author: john)
-
- visit debates_path
-
- click_link "Advanced search"
- select Setting["official_level_3_name"], from: "advanced_search_official_level"
- click_button "Filter"
-
- expect(page).to have_content("There are 2 debates")
-
- within("#debates") do
- expect(page).to have_content(debate1.title)
- expect(page).to have_content(debate2.title)
- expect(page).not_to have_content(debate3.title)
- end
- end
-
- scenario "City councillor", :js do
- ana = create :user, official_level: 4
- john = create :user, official_level: 5
-
- debate1 = create(:debate, author: ana)
- debate2 = create(:debate, author: ana)
- debate3 = create(:debate, author: john)
-
- visit debates_path
-
- click_link "Advanced search"
- select Setting["official_level_4_name"], from: "advanced_search_official_level"
- click_button "Filter"
-
- expect(page).to have_content("There are 2 debates")
-
- within("#debates") do
- expect(page).to have_content(debate1.title)
- expect(page).to have_content(debate2.title)
- expect(page).not_to have_content(debate3.title)
- end
- end
-
- scenario "Mayoress", :js do
- ana = create :user, official_level: 5
- john = create :user, official_level: 4
-
- debate1 = create(:debate, author: ana)
- debate2 = create(:debate, author: ana)
- debate3 = create(:debate, author: john)
-
- visit debates_path
-
- click_link "Advanced search"
- select Setting["official_level_5_name"], from: "advanced_search_official_level"
- click_button "Filter"
-
- expect(page).to have_content("There are 2 debates")
-
- within("#debates") do
- expect(page).to have_content(debate1.title)
- expect(page).to have_content(debate2.title)
- expect(page).not_to have_content(debate3.title)
- end
- end
- end
-
- context "Search by date" do
- context "Predefined date ranges" do
- scenario "Last day", :js do
- debate1 = create(:debate, created_at: 1.minute.ago)
- debate2 = create(:debate, created_at: 1.hour.ago)
- debate3 = create(:debate, created_at: 2.days.ago)
-
- visit debates_path
-
- click_link "Advanced search"
- select "Last 24 hours", from: "js-advanced-search-date-min"
- click_button "Filter"
-
- within("#debates") do
- expect(page).to have_css(".debate", count: 2)
-
- expect(page).to have_content(debate1.title)
- expect(page).to have_content(debate2.title)
- expect(page).not_to have_content(debate3.title)
- end
- end
-
- scenario "Last week", :js do
- debate1 = create(:debate, created_at: 1.day.ago)
- debate2 = create(:debate, created_at: 5.days.ago)
- debate3 = create(:debate, created_at: 8.days.ago)
-
- visit debates_path
-
- click_link "Advanced search"
- select "Last week", from: "js-advanced-search-date-min"
- click_button "Filter"
-
- within("#debates") do
- expect(page).to have_css(".debate", count: 2)
-
- expect(page).to have_content(debate1.title)
- expect(page).to have_content(debate2.title)
- expect(page).not_to have_content(debate3.title)
- end
- end
-
- scenario "Last month", :js do
- debate1 = create(:debate, created_at: 10.days.ago)
- debate2 = create(:debate, created_at: 20.days.ago)
- debate3 = create(:debate, created_at: 33.days.ago)
-
- visit debates_path
-
- click_link "Advanced search"
- select "Last month", from: "js-advanced-search-date-min"
- click_button "Filter"
-
- within("#debates") do
- expect(page).to have_css(".debate", count: 2)
-
- expect(page).to have_content(debate1.title)
- expect(page).to have_content(debate2.title)
- expect(page).not_to have_content(debate3.title)
- end
- end
-
- scenario "Last year", :js do
- debate1 = create(:debate, created_at: 300.days.ago)
- debate2 = create(:debate, created_at: 350.days.ago)
- debate3 = create(:debate, created_at: 370.days.ago)
-
- visit debates_path
-
- click_link "Advanced search"
- select "Last year", from: "js-advanced-search-date-min"
- click_button "Filter"
-
- within("#debates") do
- expect(page).to have_css(".debate", count: 2)
-
- expect(page).to have_content(debate1.title)
- expect(page).to have_content(debate2.title)
- expect(page).not_to have_content(debate3.title)
- end
- end
- end
-
- scenario "Search by custom date range", :js do
- debate1 = create(:debate, created_at: 2.days.ago)
- debate2 = create(:debate, created_at: 3.days.ago)
- debate3 = create(:debate, created_at: 9.days.ago)
-
- visit debates_path
-
- click_link "Advanced search"
- select "Customized", from: "js-advanced-search-date-min"
- fill_in "advanced_search_date_min", with: 7.days.ago
- fill_in "advanced_search_date_max", with: 1.day.ago
- click_button "Filter"
-
- within("#debates") do
- expect(page).to have_css(".debate", count: 2)
-
- expect(page).to have_content(debate1.title)
- expect(page).to have_content(debate2.title)
- expect(page).not_to have_content(debate3.title)
- end
- end
-
- scenario "Search by custom invalid date range", :js do
- debate1 = create(:debate, created_at: 2.years.ago)
- debate2 = create(:debate, created_at: 3.days.ago)
- debate3 = create(:debate, created_at: 9.days.ago)
-
- visit debates_path
-
- click_link "Advanced search"
- select "Customized", from: "js-advanced-search-date-min"
- fill_in "advanced_search_date_min", with: "9"
- fill_in "advanced_search_date_max", with: "444444444"
- click_button "Filter"
-
- within("#debates") do
- expect(page).to have_css(".debate", count: 3)
-
- expect(page).to have_content(debate1.title)
- expect(page).to have_content(debate2.title)
- expect(page).to have_content(debate3.title)
- end
- end
-
- scenario "Search by multiple filters", :js do
- ana = create :user, official_level: 1
- john = create :user, official_level: 1
-
- create(:debate, title: "Get Schwifty", author: ana, created_at: 1.minute.ago)
- create(:debate, title: "Hello Schwifty", author: john, created_at: 2.days.ago)
- create(:debate, title: "Save the forest")
-
- visit debates_path
-
- click_link "Advanced search"
- fill_in "Write the text", with: "Schwifty"
- select Setting["official_level_1_name"], from: "advanced_search_official_level"
- select "Last 24 hours", from: "js-advanced-search-date-min"
-
- click_button "Filter"
-
- within("#debates") do
- expect(page).to have_css(".debate", count: 1)
- expect(page).to have_content "Get Schwifty"
- end
- end
-
- scenario "Maintain advanced search criteria", :js do
- visit debates_path
- click_link "Advanced search"
-
- fill_in "Write the text", with: "Schwifty"
- select Setting["official_level_1_name"], from: "advanced_search_official_level"
- select "Last 24 hours", from: "js-advanced-search-date-min"
-
- click_button "Filter"
-
- within "#js-advanced-search" do
- expect(page).to have_selector("input[name='search'][value='Schwifty']")
- expect(page).to have_select("advanced_search[official_level]", selected: Setting["official_level_1_name"])
- expect(page).to have_select("advanced_search[date_min]", selected: "Last 24 hours")
- end
- end
-
- scenario "Maintain custom date search criteria", :js do
- visit debates_path
- click_link "Advanced search"
-
- select "Customized", from: "js-advanced-search-date-min"
- fill_in "advanced_search_date_min", with: 7.days.ago.strftime("%d/%m/%Y")
- fill_in "advanced_search_date_max", with: 1.day.ago.strftime("%d/%m/%Y")
- click_button "Filter"
-
- within "#js-advanced-search" do
- expect(page).to have_select("advanced_search[date_min]", selected: "Customized")
- expect(page).to have_selector("input[name='advanced_search[date_min]'][value*='#{7.days.ago.strftime("%d/%m/%Y")}']")
- expect(page).to have_selector("input[name='advanced_search[date_max]'][value*='#{1.day.ago.strftime("%d/%m/%Y")}']")
- 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
create(:debate, title: "Show you got", cached_votes_up: 10)
create(:debate, title: "Show what you got", cached_votes_up: 1)
diff --git a/spec/system/proposals_spec.rb b/spec/system/proposals_spec.rb
index 3cae87a62..31f2d13a5 100644
--- a/spec/system/proposals_spec.rb
+++ b/spec/system/proposals_spec.rb
@@ -1156,355 +1156,6 @@ describe "Proposals" do
end
end
- context "Advanced search" do
- scenario "Search by text", :js do
- proposal1 = create(:proposal, title: "Get Schwifty")
- proposal2 = create(:proposal, title: "Schwifty Hello")
- proposal3 = create(:proposal, title: "Do not show me")
-
- visit proposals_path
-
- click_link "Advanced search"
- fill_in "Write the text", with: "Schwifty"
- click_button "Filter"
-
- expect(page).to have_content("There are 2 citizen proposals")
-
- within("#proposals") do
- expect(page).to have_content(proposal1.title)
- expect(page).to have_content(proposal2.title)
- expect(page).not_to have_content(proposal3.title)
- end
- end
-
- context "Search by author type" do
- scenario "Public employee", :js do
- ana = create :user, official_level: 1
- john = create :user, official_level: 2
-
- proposal1 = create(:proposal, author: ana)
- proposal2 = create(:proposal, author: ana)
- proposal3 = create(:proposal, author: john)
-
- visit proposals_path
-
- click_link "Advanced search"
- select Setting["official_level_1_name"], from: "advanced_search_official_level"
- click_button "Filter"
-
- expect(page).to have_content("There are 2 citizen proposals")
-
- within("#proposals") do
- expect(page).to have_content(proposal1.title)
- expect(page).to have_content(proposal2.title)
- expect(page).not_to have_content(proposal3.title)
- end
- end
-
- scenario "Municipal Organization", :js do
- ana = create :user, official_level: 2
- john = create :user, official_level: 3
-
- proposal1 = create(:proposal, author: ana)
- proposal2 = create(:proposal, author: ana)
- proposal3 = create(:proposal, author: john)
-
- visit proposals_path
-
- click_link "Advanced search"
- select Setting["official_level_2_name"], from: "advanced_search_official_level"
- click_button "Filter"
-
- expect(page).to have_content("There are 2 citizen proposals")
-
- within("#proposals") do
- expect(page).to have_content(proposal1.title)
- expect(page).to have_content(proposal2.title)
- expect(page).not_to have_content(proposal3.title)
- end
- end
-
- scenario "General director", :js do
- ana = create :user, official_level: 3
- john = create :user, official_level: 4
-
- proposal1 = create(:proposal, author: ana)
- proposal2 = create(:proposal, author: ana)
- proposal3 = create(:proposal, author: john)
-
- visit proposals_path
-
- click_link "Advanced search"
- select Setting["official_level_3_name"], from: "advanced_search_official_level"
- click_button "Filter"
-
- expect(page).to have_content("There are 2 citizen proposals")
-
- within("#proposals") do
- expect(page).to have_content(proposal1.title)
- expect(page).to have_content(proposal2.title)
- expect(page).not_to have_content(proposal3.title)
- end
- end
-
- scenario "City councillor", :js do
- ana = create :user, official_level: 4
- john = create :user, official_level: 5
-
- proposal1 = create(:proposal, author: ana)
- proposal2 = create(:proposal, author: ana)
- proposal3 = create(:proposal, author: john)
-
- visit proposals_path
-
- click_link "Advanced search"
- select Setting["official_level_4_name"], from: "advanced_search_official_level"
- click_button "Filter"
-
- expect(page).to have_content("There are 2 citizen proposals")
-
- within("#proposals") do
- expect(page).to have_content(proposal1.title)
- expect(page).to have_content(proposal2.title)
- expect(page).not_to have_content(proposal3.title)
- end
- end
-
- scenario "Mayoress", :js do
- ana = create :user, official_level: 5
- john = create :user, official_level: 4
-
- proposal1 = create(:proposal, author: ana)
- proposal2 = create(:proposal, author: ana)
- proposal3 = create(:proposal, author: john)
-
- visit proposals_path
-
- click_link "Advanced search"
- select Setting["official_level_5_name"], from: "advanced_search_official_level"
- click_button "Filter"
-
- expect(page).to have_content("There are 2 citizen proposals")
-
- within("#proposals") do
- expect(page).to have_content(proposal1.title)
- expect(page).to have_content(proposal2.title)
- expect(page).not_to have_content(proposal3.title)
- end
- end
- end
-
- context "Search by date" do
- context "Predefined date ranges" do
- scenario "Last day", :js do
- proposal1 = create(:proposal, created_at: 1.minute.ago)
- proposal2 = create(:proposal, created_at: 1.hour.ago)
- proposal3 = create(:proposal, created_at: 2.days.ago)
-
- visit proposals_path
-
- click_link "Advanced search"
- select "Last 24 hours", from: "js-advanced-search-date-min"
- click_button "Filter"
-
- expect(page).to have_content("There are 2 citizen proposals")
-
- within("#proposals") do
- expect(page).to have_content(proposal1.title)
- expect(page).to have_content(proposal2.title)
- expect(page).not_to have_content(proposal3.title)
- end
- end
-
- scenario "Last week", :js do
- proposal1 = create(:proposal, created_at: 1.day.ago)
- proposal2 = create(:proposal, created_at: 5.days.ago)
- proposal3 = create(:proposal, created_at: 8.days.ago)
-
- visit proposals_path
-
- click_link "Advanced search"
- select "Last week", from: "js-advanced-search-date-min"
- click_button "Filter"
-
- expect(page).to have_content("There are 2 citizen proposals")
-
- within("#proposals") do
- expect(page).to have_content(proposal1.title)
- expect(page).to have_content(proposal2.title)
- expect(page).not_to have_content(proposal3.title)
- end
- end
-
- scenario "Last month", :js do
- proposal1 = create(:proposal, created_at: 10.days.ago)
- proposal2 = create(:proposal, created_at: 20.days.ago)
- proposal3 = create(:proposal, created_at: 33.days.ago)
-
- visit proposals_path
-
- click_link "Advanced search"
- select "Last month", from: "js-advanced-search-date-min"
- click_button "Filter"
-
- expect(page).to have_content("There are 2 citizen proposals")
-
- within("#proposals") do
- expect(page).to have_content(proposal1.title)
- expect(page).to have_content(proposal2.title)
- expect(page).not_to have_content(proposal3.title)
- end
- end
-
- scenario "Last year", :js do
- proposal1 = create(:proposal, created_at: 300.days.ago)
- proposal2 = create(:proposal, created_at: 350.days.ago)
- proposal3 = create(:proposal, created_at: 370.days.ago)
-
- visit proposals_path
-
- click_link "Advanced search"
- select "Last year", from: "js-advanced-search-date-min"
- click_button "Filter"
-
- expect(page).to have_content("There are 2 citizen proposals")
-
- within("#proposals") do
- expect(page).to have_content(proposal1.title)
- expect(page).to have_content(proposal2.title)
- expect(page).not_to have_content(proposal3.title)
- end
- end
- end
-
- scenario "Search by custom date range", :js do
- proposal1 = create(:proposal, created_at: 2.days.ago)
- proposal2 = create(:proposal, created_at: 3.days.ago)
- proposal3 = create(:proposal, created_at: 9.days.ago)
-
- visit proposals_path
-
- click_link "Advanced search"
- select "Customized", from: "js-advanced-search-date-min"
- fill_in "advanced_search_date_min", with: 7.days.ago
- fill_in "advanced_search_date_max", with: 1.day.ago
- click_button "Filter"
-
- expect(page).to have_content("There are 2 citizen proposals")
-
- within("#proposals") do
- expect(page).to have_content(proposal1.title)
- expect(page).to have_content(proposal2.title)
- expect(page).not_to have_content(proposal3.title)
- end
- end
-
- scenario "Search by custom invalid date range", :js do
- proposal1 = create(:proposal, created_at: 2.days.ago)
- proposal2 = create(:proposal, created_at: 3.days.ago)
- proposal3 = create(:proposal, created_at: 9.days.ago)
-
- visit proposals_path
-
- click_link "Advanced search"
- select "Customized", from: "js-advanced-search-date-min"
- fill_in "advanced_search_date_min", with: 4000.years.ago
- fill_in "advanced_search_date_max", with: "wrong date"
- click_button "Filter"
-
- expect(page).to have_content("There are 3 citizen proposals")
-
- within("#proposals") do
- expect(page).to have_content(proposal1.title)
- expect(page).to have_content(proposal2.title)
- expect(page).to have_content(proposal3.title)
- end
- end
-
- scenario "Search by multiple filters", :js do
- ana = create :user, official_level: 1
- john = create :user, official_level: 1
-
- create(:proposal, title: "Get Schwifty", author: ana, created_at: 1.minute.ago)
- create(:proposal, title: "Hello Schwifty", author: john, created_at: 2.days.ago)
- create(:proposal, title: "Save the forest")
-
- visit proposals_path
-
- click_link "Advanced search"
- fill_in "Write the text", with: "Schwifty"
- select Setting["official_level_1_name"], from: "advanced_search_official_level"
- select "Last 24 hours", from: "js-advanced-search-date-min"
-
- click_button "Filter"
-
- expect(page).to have_content("There is 1 citizen proposal")
-
- within("#proposals") do
- expect(page).to have_content "Get Schwifty"
- end
- end
-
- scenario "Maintain advanced search criteria", :js do
- visit proposals_path
- click_link "Advanced search"
-
- fill_in "Write the text", with: "Schwifty"
- select Setting["official_level_1_name"], from: "advanced_search_official_level"
- select "Last 24 hours", from: "js-advanced-search-date-min"
-
- click_button "Filter"
-
- expect(page).to have_content("citizen proposals cannot be found")
-
- within "#js-advanced-search" do
- expect(page).to have_selector("input[name='search'][value='Schwifty']")
- expect(page).to have_select("advanced_search[official_level]", selected: Setting["official_level_1_name"])
- expect(page).to have_select("advanced_search[date_min]", selected: "Last 24 hours")
- end
- end
-
- scenario "Maintain custom date search criteria", :js do
- visit proposals_path
- click_link "Advanced search"
-
- select "Customized", from: "js-advanced-search-date-min"
- fill_in "advanced_search_date_min", with: 7.days.ago.strftime("%d/%m/%Y")
- fill_in "advanced_search_date_max", with: 1.day.ago.strftime("%d/%m/%Y")
- click_button "Filter"
-
- expect(page).to have_content("citizen proposals cannot be found")
-
- within "#js-advanced-search" do
- expect(page).to have_select("advanced_search[date_min]", selected: "Customized")
- expect(page).to have_selector("input[name='advanced_search[date_min]'][value*='#{7.days.ago.strftime("%d/%m/%Y")}']")
- expect(page).to have_selector("input[name='advanced_search[date_max]'][value*='#{1.day.ago.strftime("%d/%m/%Y")}']")
- 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
create(:proposal, title: "In summary", summary: "Title content too", cached_votes_up: 10)
create(:proposal, title: "Title content", summary: "Summary", cached_votes_up: 1)
diff --git a/spec/system/sdg_management/relations_spec.rb b/spec/system/sdg_management/relations_spec.rb
index 9221e01c1..be5bff406 100644
--- a/spec/system/sdg_management/relations_spec.rb
+++ b/spec/system/sdg_management/relations_spec.rb
@@ -152,6 +152,10 @@ describe "SDG Relations", :js do
expect(page).to have_content "School"
expect(page).not_to have_content "Hospital"
expect(page).to have_css "li.is-active h2", exact_text: "Pending"
+
+ expect(page).to have_select "By target",
+ selected: "All targets",
+ enabled_options: ["All targets"] + %w[4.1 4.2 4.3 4.4 4.5 4.6 4.7 4.A 4.B 4.C]
end
scenario "target filter" do
@@ -200,6 +204,28 @@ describe "SDG Relations", :js do
expect(page).to have_css "li.is-active h2", exact_text: "All"
end
+
+ scenario "dynamic target options depending on the selected goal" do
+ visit sdg_management_polls_path
+
+ select "1. No Poverty", from: "By goal"
+
+ expect(page).to have_select "By target",
+ selected: "All targets",
+ enabled_options: ["All targets"] + %w[1.1 1.2 1.3 1.4 1.5 1.A 1.B]
+
+ select "1.1", from: "By target"
+ select "13. Climate Action", from: "By goal"
+
+ expect(page).to have_select "By target",
+ selected: "All targets",
+ enabled_options: ["All targets"] + %w[13.1 13.2 13.3 13.A 13.B]
+
+ select "13.1", from: "By target"
+ select "All goals", from: "By goal"
+
+ expect(page).to have_select "By target", selected: "13.1", disabled_options: []
+ end
end
end