Merge pull request #4337 from consul/sdg_dynamic_filter
Make target filter change when goal filter changes
This commit is contained in:
@@ -32,6 +32,8 @@
|
||||
App.AdvancedSearch.toggle_date_options();
|
||||
}
|
||||
});
|
||||
|
||||
App.SDGSyncGoalAndTargetFilters.sync($("#advanced_search_form"));
|
||||
}
|
||||
};
|
||||
}).call(this);
|
||||
|
||||
@@ -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() {
|
||||
|
||||
28
app/assets/javascripts/sdg/sync_goal_and_target_filters.js
Normal file
28
app/assets/javascripts/sdg/sync_goal_and_target_filters.js
Normal 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);
|
||||
@@ -0,0 +1,8 @@
|
||||
(function() {
|
||||
"use strict";
|
||||
App.SDGManagementRelationSearch = {
|
||||
initialize: function() {
|
||||
App.SDGSyncGoalAndTargetFilters.sync($(".sdg-relations-search"));
|
||||
}
|
||||
};
|
||||
}).call(this);
|
||||
@@ -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>
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 %>
|
||||
35
app/components/sdg_management/relations/search_component.rb
Normal file
35
app/components/sdg_management/relations/search_component.rb
Normal 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
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
442
spec/system/advanced_search_spec.rb
Normal file
442
spec/system/advanced_search_spec.rb
Normal 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
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user