Merge pull request #4337 from consul/sdg_dynamic_filter

Make target filter change when goal filter changes
This commit is contained in:
Javi Martín
2021-01-29 13:02:11 +01:00
committed by GitHub
15 changed files with 574 additions and 1087 deletions

View File

@@ -32,6 +32,8 @@
App.AdvancedSearch.toggle_date_options();
}
});
App.SDGSyncGoalAndTargetFilters.sync($("#advanced_search_form"));
}
};
}).call(this);

View File

@@ -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() {

View File

@@ -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);

View File

@@ -0,0 +1,8 @@
(function() {
"use strict";
App.SDGManagementRelationSearch = {
initialize: function() {
App.SDGSyncGoalAndTargetFilters.sync($(".sdg-relations-search"));
}
};
}).call(this);

View File

@@ -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" %>
<table>

View File

@@ -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

View File

@@ -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 %>

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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)

View File

@@ -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)

View File

@@ -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