Files
grecia/spec/system/advanced_search_spec.rb
Javi Martín afb660f82c Fix rubocop convention offenses
While we use Pronto to detect offenses in the lines changed in our pull
request, sometimes our changes introduce offenses in other lines, and we
don't detect them.

In commit 0488b3735, we removed the only usage of the `heading` method
in a test, which caused a `RSpec/LetSetup` offense.

In commit 287c48873, we changed some lines from `fill_in` to
`fill_in_ckeditor`. Some of these lines were aligned with the following
ones, which after that change had extra spacing for no reason.

Finally, in commit 8d38ed58c we added a line before two lines which had
their equals signs aligned. Since, after adding this line, the block was
no longer aligned, there was no reason for the extra space in one of the
lines.
2021-08-09 16:23:40 +02:00

454 lines
16 KiB
Ruby

require "rails_helper"
describe "Advanced search" 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_button "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_button "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_button "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
Setting["official_level_1_name"] = "Official position 1"
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_button "Advanced search"
select "Official position 1", 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
Setting["official_level_2_name"] = "Official position 2"
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_button "Advanced search"
select "Official position 2", 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
Setting["official_level_3_name"] = "Official position 3"
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_button "Advanced search"
select "Official position 3", 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
Setting["official_level_4_name"] = "Official position 4"
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_button "Advanced search"
select "Official position 4", 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
Setting["official_level_5_name"] = "Official position 5"
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_button "Advanced search"
select "Official position 5", 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_button "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_button "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_button "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_button "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_button "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")
find_field("With the text").click
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_button "Advanced search"
select "Customized", from: "js-advanced-search-date-min"
fill_in "advanced_search_date_min", with: 4000.years.ago.strftime("%d/%m/%Y")
fill_in "advanced_search_date_max", with: "13/13/2199"
find_field("With the text").click
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
Setting["official_level_1_name"] = "Official position 1"
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_button "Advanced search"
fill_in "Write the text", with: "Schwifty"
select "Official position 1", 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
Setting["official_level_1_name"] = "Official position 1"
visit debates_path
click_button "Advanced search"
fill_in "Write the text", with: "Schwifty"
select "Official position 1", from: "advanced_search_official_level"
select "Last 24 hours", from: "js-advanced-search-date-min"
click_button "Filter"
within ".advanced-search-form" do
expect(page).to have_selector("input[name='search'][value='Schwifty']")
expect(page).to have_select("advanced_search[official_level]", selected: "Official position 1")
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_button "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")
find_field("With the text").click
click_button "Filter"
expect(page).to have_content("citizen proposals cannot be found")
within ".advanced-search-form" 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_button "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_button "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_button "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