It's strange to create records without assigning them to a variable and then query the database to fetch the very same records. Assigning them to a variable makes the tests easier to understand. Besides, this way we avoid querying the database after the browser has started.
1898 lines
71 KiB
Ruby
1898 lines
71 KiB
Ruby
require "rails_helper"
|
|
|
|
describe "Admin budget investments", :admin do
|
|
let(:budget) { create(:budget) }
|
|
let(:administrator) do
|
|
create(:administrator, user: create(:user, username: "Ana", email: "ana@admins.org"))
|
|
end
|
|
|
|
it_behaves_like "admin_milestoneable",
|
|
:budget_investment,
|
|
"admin_polymorphic_path"
|
|
|
|
context "Load" do
|
|
let!(:investment) { create(:budget_investment, budget: budget) }
|
|
|
|
before { budget.update(slug: "budget_slug") }
|
|
|
|
scenario "finds investments using budget slug" do
|
|
visit admin_budget_budget_investments_path("budget_slug")
|
|
|
|
expect(page).to have_link investment.title
|
|
end
|
|
end
|
|
|
|
context "Index" do
|
|
scenario "Displaying investments" do
|
|
budget_investment = create(:budget_investment, budget: budget, cached_votes_up: 77)
|
|
visit admin_budget_budget_investments_path(budget_id: budget.id)
|
|
expect(page).to have_content(budget_investment.title)
|
|
expect(page).to have_content(budget_investment.heading.name)
|
|
expect(page).to have_content(budget_investment.id)
|
|
expect(page).to have_content(budget_investment.total_votes)
|
|
end
|
|
|
|
scenario "If budget is finished do not show 'Selected' button" do
|
|
finished_budget = create(:budget, :finished)
|
|
budget_investment = create(:budget_investment, budget: finished_budget, cached_votes_up: 77)
|
|
|
|
visit admin_budget_budget_investments_path(budget_id: finished_budget.id)
|
|
|
|
within("#budget_investment_#{budget_investment.id}") do
|
|
expect(page).to have_content(budget_investment.title)
|
|
expect(page).to have_content(budget_investment.heading.name)
|
|
expect(page).to have_content(budget_investment.id)
|
|
expect(page).to have_content(budget_investment.total_votes)
|
|
expect(page).not_to have_link("Selected")
|
|
end
|
|
end
|
|
|
|
scenario "Display admin and valuator assignments" do
|
|
olga = create(:user, username: "Olga")
|
|
miriam = create(:user, username: "Miriam")
|
|
valuator1 = create(:valuator, user: olga, description: "Valuator Olga")
|
|
valuator2 = create(:valuator, user: miriam, description: "Valuator Miriam")
|
|
valuator_group = create(:valuator_group, name: "Health")
|
|
admin = create(:administrator, user: create(:user, username: "Gema"))
|
|
|
|
budget_investment1 = create(:budget_investment, budget: budget, valuators: [valuator1])
|
|
budget_investment2 = create(:budget_investment, budget: budget, valuators: [valuator1, valuator2],
|
|
valuator_groups: [valuator_group])
|
|
budget_investment3 = create(:budget_investment, budget: budget)
|
|
|
|
visit admin_budget_budget_investments_path(budget_id: budget.id)
|
|
|
|
within("#budget_investment_#{budget_investment1.id}") do
|
|
expect(page).to have_content("No admin assigned")
|
|
expect(page).to have_content("Valuator Olga")
|
|
end
|
|
|
|
within("#budget_investment_#{budget_investment2.id}") do
|
|
expect(page).to have_content("No admin assigned")
|
|
expect(page).to have_content("Valuator Olga")
|
|
expect(page).to have_content("Valuator Miriam")
|
|
expect(page).to have_content("Health")
|
|
end
|
|
|
|
budget_investment3.update!(administrator_id: admin.id)
|
|
visit admin_budget_budget_investments_path(budget_id: budget.id)
|
|
|
|
within("#budget_investment_#{budget_investment3.id}") do
|
|
expect(page).to have_content("Gema")
|
|
expect(page).to have_content("No valuators assigned")
|
|
end
|
|
end
|
|
|
|
scenario "Filtering by budget heading" do
|
|
group1 = create(:budget_group, name: "Streets", budget: budget)
|
|
group2 = create(:budget_group, name: "Parks", budget: budget)
|
|
|
|
group1_heading1 = create(:budget_heading, group: group1, name: "Main Avenue")
|
|
group1_heading2 = create(:budget_heading, group: group1, name: "Mercy Street")
|
|
group2_heading1 = create(:budget_heading, group: group2, name: "Central Park")
|
|
|
|
create(:budget_investment, title: "Realocate visitors", heading: group1_heading1)
|
|
create(:budget_investment, title: "Change name", heading: group1_heading2)
|
|
create(:budget_investment, title: "Plant trees", heading: group2_heading1)
|
|
|
|
visit admin_budget_budget_investments_path(budget_id: budget.id)
|
|
|
|
expect(page).to have_link("Realocate visitors")
|
|
expect(page).to have_link("Change name")
|
|
expect(page).to have_link("Plant trees")
|
|
|
|
select "Central Park", from: "heading_id"
|
|
click_button "Filter"
|
|
|
|
expect(page).not_to have_link("Realocate visitors")
|
|
expect(page).not_to have_link("Change name")
|
|
expect(page).to have_link("Plant trees")
|
|
|
|
select "All headings", from: "heading_id"
|
|
click_button "Filter"
|
|
|
|
expect(page).to have_link("Realocate visitors")
|
|
expect(page).to have_link("Change name")
|
|
expect(page).to have_link("Plant trees")
|
|
|
|
select "Streets: Main Avenue", from: "heading_id"
|
|
click_button "Filter"
|
|
|
|
expect(page).to have_link("Realocate visitors")
|
|
expect(page).not_to have_link("Change name")
|
|
expect(page).not_to have_link("Plant trees")
|
|
|
|
select "Streets: Mercy Street", from: "heading_id"
|
|
click_button "Filter"
|
|
|
|
expect(page).not_to have_link("Realocate visitors")
|
|
expect(page).to have_link("Change name")
|
|
expect(page).not_to have_link("Plant trees")
|
|
end
|
|
|
|
scenario "Filtering by admin" do
|
|
user = create(:user, username: "Admin 1")
|
|
user2 = create(:user, username: "Admin 2")
|
|
administrator = create(:administrator, user: user)
|
|
administrator2 = create(:administrator, user: user2, description: "Alias")
|
|
budget.administrators = [administrator, administrator2]
|
|
create(:budget_investment, title: "Realocate visitors", budget: budget,
|
|
administrator: administrator)
|
|
create(:budget_investment, title: "Destroy the city", budget: budget)
|
|
|
|
visit admin_budget_budget_investments_path(budget_id: budget.id)
|
|
expect(page).to have_link("Realocate visitors")
|
|
expect(page).to have_link("Destroy the city")
|
|
|
|
select "Admin 1", from: "administrator_id"
|
|
click_button "Filter"
|
|
|
|
expect(page).to have_content("There is 1 investment")
|
|
expect(page).not_to have_link("Destroy the city")
|
|
expect(page).to have_link("Realocate visitors")
|
|
|
|
select "Alias", from: "administrator_id"
|
|
click_button "Filter"
|
|
|
|
expect(page).to have_content("There are no investment projects")
|
|
expect(page).not_to have_link("Destroy the city")
|
|
expect(page).not_to have_link("Realocate visitors")
|
|
|
|
select "All administrators", from: "administrator_id"
|
|
click_button "Filter"
|
|
|
|
expect(page).to have_content("There are 2 investments")
|
|
expect(page).to have_link("Destroy the city")
|
|
expect(page).to have_link("Realocate visitors")
|
|
|
|
select "Admin 1", from: "administrator_id"
|
|
click_button "Filter"
|
|
|
|
expect(page).to have_content("There is 1 investment")
|
|
expect(page).not_to have_link("Destroy the city")
|
|
expect(page).to have_link("Realocate visitors")
|
|
end
|
|
|
|
scenario "Filtering by valuator" do
|
|
user = create(:user)
|
|
valuator = create(:valuator, user: user, description: "Valuator 1")
|
|
budget.valuators = [valuator]
|
|
|
|
create(:budget_investment, title: "Realocate visitors", budget: budget, valuators: [valuator])
|
|
create(:budget_investment, title: "Destroy the city", budget: budget)
|
|
|
|
visit admin_budget_budget_investments_path(budget_id: budget.id)
|
|
expect(page).to have_link("Realocate visitors")
|
|
expect(page).to have_link("Destroy the city")
|
|
|
|
select "Valuator 1", from: "valuator_or_group_id"
|
|
click_button "Filter"
|
|
|
|
expect(page).to have_content("There is 1 investment")
|
|
expect(page).not_to have_link("Destroy the city")
|
|
expect(page).to have_link("Realocate visitors")
|
|
|
|
select "All valuators", from: "valuator_or_group_id"
|
|
click_button "Filter"
|
|
|
|
expect(page).to have_content("There are 2 investments")
|
|
expect(page).to have_link("Destroy the city")
|
|
expect(page).to have_link("Realocate visitors")
|
|
|
|
select "Valuator 1", from: "valuator_or_group_id"
|
|
click_button "Filter"
|
|
expect(page).to have_content("There is 1 investment")
|
|
expect(page).not_to have_link("Destroy the city")
|
|
expect(page).to have_link("Realocate visitors")
|
|
end
|
|
|
|
scenario "Filtering by valuator group" do
|
|
health_group = create(:valuator_group, name: "Health")
|
|
culture_group = create(:valuator_group, name: "Culture")
|
|
|
|
create(:budget_investment, title: "Build a hospital", budget: budget, valuator_groups: [health_group])
|
|
create(:budget_investment, title: "Build a theatre", budget: budget, valuator_groups: [culture_group])
|
|
|
|
visit admin_budget_budget_investments_path(budget_id: budget)
|
|
expect(page).to have_link("Build a hospital")
|
|
expect(page).to have_link("Build a theatre")
|
|
|
|
select "Health", from: "valuator_or_group_id"
|
|
click_button "Filter"
|
|
|
|
expect(page).to have_content("There is 1 investment")
|
|
expect(page).to have_link("Build a hospital")
|
|
expect(page).not_to have_link("Build a theatre")
|
|
|
|
select "All valuators", from: "valuator_or_group_id"
|
|
click_button "Filter"
|
|
|
|
expect(page).to have_content("There are 2 investments")
|
|
expect(page).to have_link("Build a hospital")
|
|
expect(page).to have_link("Build a theatre")
|
|
|
|
select "Culture", from: "valuator_or_group_id"
|
|
click_button "Filter"
|
|
|
|
expect(page).to have_content("There is 1 investment")
|
|
expect(page).to have_link("Build a theatre")
|
|
expect(page).not_to have_link("Build a hospital")
|
|
end
|
|
|
|
scenario "Filtering by without assigned admin" do
|
|
create(:budget_investment,
|
|
title: "Investment without admin",
|
|
budget: budget)
|
|
create(:budget_investment,
|
|
:with_administrator,
|
|
title: "Investment with admin",
|
|
budget: budget)
|
|
|
|
visit admin_budget_budget_investments_path(budget_id: budget)
|
|
expect(page).to have_link("Investment without admin")
|
|
expect(page).to have_link("Investment with admin")
|
|
|
|
click_link "Advanced filters"
|
|
check("Without assigned admin")
|
|
click_button "Filter"
|
|
|
|
expect(page).to have_content("There is 1 investment")
|
|
expect(page).to have_link("Investment without admin")
|
|
expect(page).not_to have_link("Investment with admin")
|
|
|
|
uncheck("Without assigned admin")
|
|
click_button "Filter"
|
|
|
|
expect(page).to have_content("There are 2 investments")
|
|
expect(page).to have_link("Investment without admin")
|
|
expect(page).to have_link("Investment with admin")
|
|
end
|
|
|
|
scenario "Filtering by without assigned valuator" do
|
|
user = create(:user)
|
|
valuator = create(:valuator, user: user)
|
|
create(:budget_investment,
|
|
title: "Investment without valuator",
|
|
budget: budget)
|
|
create(:budget_investment,
|
|
title: "Investment with valuator",
|
|
budget: budget,
|
|
valuators: [valuator])
|
|
|
|
visit admin_budget_budget_investments_path(budget_id: budget)
|
|
expect(page).to have_link("Investment without valuator")
|
|
expect(page).to have_link("Investment with valuator")
|
|
|
|
click_link "Advanced filters"
|
|
check "Without assigned valuator"
|
|
click_button "Filter"
|
|
|
|
expect(page).to have_content("There is 1 investment")
|
|
expect(page).to have_link("Investment without valuator")
|
|
expect(page).not_to have_link("Investment with valuator")
|
|
|
|
uncheck "Without assigned valuator"
|
|
click_button "Filter"
|
|
|
|
expect(page).to have_content("There are 2 investments")
|
|
expect(page).to have_link("Investment without valuator")
|
|
expect(page).to have_link("Investment with valuator")
|
|
end
|
|
|
|
scenario "Filtering by under valuation" do
|
|
user = create(:user)
|
|
valuator = create(:valuator, user: user)
|
|
create(:budget_investment,
|
|
:with_administrator,
|
|
:open,
|
|
title: "Investment without valuation",
|
|
budget: budget,
|
|
valuators: [valuator])
|
|
create(:budget_investment,
|
|
:with_administrator,
|
|
title: "Investment with valuation",
|
|
budget: budget)
|
|
|
|
visit admin_budget_budget_investments_path(budget_id: budget)
|
|
expect(page).to have_link("Investment without valuation")
|
|
expect(page).to have_link("Investment with valuation")
|
|
|
|
click_link "Advanced filters"
|
|
check "Under valuation"
|
|
click_button "Filter"
|
|
|
|
expect(page).to have_content("There is 1 investment")
|
|
expect(page).to have_link("Investment without valuation")
|
|
expect(page).not_to have_link("Investment with valuation")
|
|
|
|
uncheck "Under valuation"
|
|
click_button "Filter"
|
|
|
|
expect(page).to have_content("There are 2 investments")
|
|
expect(page).to have_link("Investment without valuation")
|
|
expect(page).to have_link("Investment with valuation")
|
|
end
|
|
|
|
scenario "Filtering by valuation finished" do
|
|
create(:budget_investment,
|
|
title: "Investment valuation open",
|
|
budget: budget)
|
|
create(:budget_investment,
|
|
:finished,
|
|
title: "Investment valuation finished",
|
|
budget: budget)
|
|
|
|
visit admin_budget_budget_investments_path(budget_id: budget)
|
|
expect(page).to have_link("Investment valuation open")
|
|
expect(page).to have_link("Investment valuation finished")
|
|
|
|
click_link "Advanced filters"
|
|
check "Valuation finished"
|
|
click_button "Filter"
|
|
|
|
expect(page).to have_content("There is 1 investment")
|
|
expect(page).not_to have_link("Investment valuation open")
|
|
expect(page).to have_link("Investment valuation finished")
|
|
|
|
uncheck "Valuation finished"
|
|
click_button "Filter"
|
|
|
|
expect(page).to have_content("There are 2 investments")
|
|
expect(page).to have_link("Investment valuation open")
|
|
expect(page).to have_link("Investment valuation finished")
|
|
end
|
|
|
|
scenario "Filtering by winners" do
|
|
create(:budget_investment,
|
|
:winner,
|
|
:finished,
|
|
title: "Investment winner",
|
|
budget: budget)
|
|
create(:budget_investment,
|
|
title: "Investment without winner",
|
|
budget: budget)
|
|
|
|
visit admin_budget_budget_investments_path(budget_id: budget)
|
|
expect(page).to have_link("Investment winner")
|
|
expect(page).to have_link("Investment without winner")
|
|
|
|
click_link "Advanced filters"
|
|
check "Winners"
|
|
click_button "Filter"
|
|
|
|
expect(page).to have_content("There is 1 investment")
|
|
expect(page).to have_link("Investment winner")
|
|
expect(page).not_to have_link("Investment without winner")
|
|
|
|
uncheck "Winners"
|
|
click_button "Filter"
|
|
|
|
expect(page).to have_content("There are 2 investments")
|
|
expect(page).to have_link("Investment winner")
|
|
expect(page).to have_link("Investment without winner")
|
|
end
|
|
|
|
scenario "Current filter is properly highlighted" do
|
|
filters_links = { "all" => "All" }
|
|
|
|
visit admin_budget_budget_investments_path(budget_id: budget.id)
|
|
|
|
expect(page).not_to have_link(filters_links.values.first)
|
|
filters_links.keys.drop(1).each { |filter| expect(page).to have_link(filters_links[filter]) }
|
|
|
|
filters_links.each_pair do |current_filter, link|
|
|
visit admin_budget_budget_investments_path(budget_id: budget.id, filter: current_filter)
|
|
|
|
expect(page).not_to have_link(link)
|
|
|
|
(filters_links.keys - [current_filter]).each do |filter|
|
|
expect(page).to have_link(filters_links[filter])
|
|
end
|
|
end
|
|
end
|
|
|
|
scenario "Filtering by assignment status" do
|
|
create(:budget_investment, :with_administrator, title: "Assigned idea", budget: budget)
|
|
create(:budget_investment, :with_valuator, title: "Evaluating...", budget: budget)
|
|
create(:budget_investment, title: "With group", budget: budget,
|
|
valuator_groups: [create(:valuator_group)])
|
|
|
|
visit admin_budget_budget_investments_path(budget_id: budget.id, filter: "valuation_open")
|
|
|
|
expect(page).to have_content("Assigned idea")
|
|
expect(page).to have_content("Evaluating...")
|
|
expect(page).to have_content("With group")
|
|
|
|
visit admin_budget_budget_investments_path(budget_id: budget.id,
|
|
advanced_filters: ["without_admin"])
|
|
|
|
expect(page).to have_content("Evaluating...")
|
|
expect(page).to have_content("With group")
|
|
expect(page).not_to have_content("Assigned idea")
|
|
|
|
visit admin_budget_budget_investments_path(budget_id: budget.id,
|
|
advanced_filters: ["without_valuator"])
|
|
|
|
expect(page).to have_content("Assigned idea")
|
|
expect(page).not_to have_content("Evaluating...")
|
|
expect(page).not_to have_content("With group")
|
|
end
|
|
|
|
scenario "Filtering by valuation status" do
|
|
valuating = create(:budget_investment, :with_administrator, budget: budget, title: "Ongoing valuation")
|
|
valuated = create(:budget_investment, :finished, budget: budget, title: "Old idea")
|
|
valuating.valuators.push(create(:valuator))
|
|
valuated.valuators.push(create(:valuator))
|
|
|
|
query_params = { budget_id: budget.id, advanced_filters: ["under_valuation"] }
|
|
|
|
visit admin_budget_budget_investments_path(query_params)
|
|
|
|
expect(page).to have_content("Ongoing valuation")
|
|
expect(page).not_to have_content("Old idea")
|
|
|
|
visit admin_budget_budget_investments_path(budget_id: budget.id,
|
|
advanced_filters: ["valuation_finished"])
|
|
|
|
expect(page).not_to have_content("Ongoing valuation")
|
|
expect(page).to have_content("Old idea")
|
|
|
|
visit admin_budget_budget_investments_path(budget_id: budget.id, advanced_filters: ["filter"])
|
|
expect(page).to have_content("Ongoing valuation")
|
|
expect(page).to have_content("Old idea")
|
|
end
|
|
|
|
scenario "Filtering by tag" do
|
|
create(:budget_investment, budget: budget, title: "Educate children", tag_list: "Education")
|
|
create(:budget_investment, budget: budget, title: "More schools", tag_list: "Education")
|
|
create(:budget_investment, budget: budget, title: "More hospitals", tag_list: "Health")
|
|
|
|
visit admin_budget_budget_investments_path(budget_id: budget.id)
|
|
|
|
expect(page).to have_css(".budget_investment", count: 3)
|
|
expect(page).to have_content("Educate children")
|
|
expect(page).to have_content("More schools")
|
|
expect(page).to have_content("More hospitals")
|
|
|
|
visit admin_budget_budget_investments_path(budget_id: budget.id, tag_name: "Education")
|
|
|
|
expect(page).not_to have_content("More hospitals")
|
|
expect(page).to have_css(".budget_investment", count: 2)
|
|
expect(page).to have_content("Educate children")
|
|
expect(page).to have_content("More schools")
|
|
end
|
|
|
|
scenario "Filtering by tag, display only valuation tags" do
|
|
investment1 = create(:budget_investment, budget: budget, tag_list: "Education")
|
|
investment2 = create(:budget_investment, budget: budget, tag_list: "Health")
|
|
|
|
investment1.set_tag_list_on(:valuation_tags, "Teachers")
|
|
investment2.set_tag_list_on(:valuation_tags, "Hospitals")
|
|
|
|
investment1.save!
|
|
investment2.save!
|
|
|
|
visit admin_budget_budget_investments_path(budget_id: budget.id)
|
|
|
|
expect(page).to have_select("tag_name", options: ["All tags", "Hospitals", "Teachers"])
|
|
end
|
|
|
|
scenario "Filtering by tag, display only valuation tags of the current budget" do
|
|
new_budget = create(:budget)
|
|
investment1 = create(:budget_investment, budget: budget, tag_list: "Roads")
|
|
investment2 = create(:budget_investment, budget: new_budget, tag_list: "Accessibility")
|
|
|
|
investment1.set_tag_list_on(:valuation_tags, "Roads")
|
|
investment2.set_tag_list_on(:valuation_tags, "Accessibility")
|
|
|
|
investment1.save!
|
|
investment2.save!
|
|
|
|
visit admin_budget_budget_investments_path(budget_id: budget.id)
|
|
|
|
expect(page).to have_select("tag_name", options: ["All tags", "Roads"])
|
|
expect(page).not_to have_select("tag_name", options: ["All tags", "Accessibility"])
|
|
end
|
|
|
|
scenario "Disable 'Calculate winner' button if incorrect phase" do
|
|
budget.update!(phase: "reviewing_ballots")
|
|
|
|
visit admin_budget_budget_investments_path(budget)
|
|
|
|
click_link "Advanced filters"
|
|
check "Winners"
|
|
click_button "Filter"
|
|
|
|
expect(page).to have_link "Calculate Winner Investments"
|
|
|
|
visit edit_admin_budget_path(budget)
|
|
|
|
expect(page).to have_link "Calculate Winner Investments"
|
|
|
|
select "Accepting projects", from: "Phase"
|
|
click_button "Update Budget"
|
|
|
|
expect(page).to have_content "Participatory budget updated successfully"
|
|
|
|
visit admin_budget_budget_investments_path(budget)
|
|
|
|
click_link "Advanced filters"
|
|
check "Winners"
|
|
click_button "Filter"
|
|
|
|
expect(page).not_to have_link "Calculate Winner Investments"
|
|
expect(page).to have_content 'The budget has to stay on phase "Balloting projects", '\
|
|
'"Reviewing Ballots" or "Finished budget" in order '\
|
|
"to calculate winners projects"
|
|
|
|
visit edit_admin_budget_path(budget)
|
|
|
|
expect(page).not_to have_link "Calculate Winner Investments"
|
|
end
|
|
|
|
scenario "Filtering by minimum number of votes" do
|
|
group_1 = create(:budget_group, budget: budget)
|
|
group_2 = create(:budget_group, budget: budget)
|
|
parks = create(:budget_heading, group: group_1)
|
|
roads = create(:budget_heading, group: group_2)
|
|
streets = create(:budget_heading, group: group_2)
|
|
|
|
create(:budget_investment, heading: parks, cached_votes_up: 40, title: "Park 40 supports")
|
|
create(:budget_investment, heading: parks, cached_votes_up: 99, title: "Park 99 supports")
|
|
create(:budget_investment, heading: roads, cached_votes_up: 100, title: "Road 100 supports")
|
|
create(:budget_investment, heading: roads, cached_votes_up: 199, title: "Road 199 supports")
|
|
create(:budget_investment, heading: streets, cached_votes_up: 200, title: "St. 200 supports")
|
|
create(:budget_investment, heading: streets, cached_votes_up: 300, title: "St. 300 supports")
|
|
|
|
visit admin_budget_budget_investments_path(budget)
|
|
|
|
expect(page).to have_link("Park 40 supports")
|
|
expect(page).to have_link("Park 99 supports")
|
|
expect(page).to have_link("Road 100 supports")
|
|
expect(page).to have_link("Road 199 supports")
|
|
expect(page).to have_link("St. 200 supports")
|
|
expect(page).to have_link("St. 300 supports")
|
|
|
|
click_link "Advanced filters"
|
|
fill_in "min_total_supports", with: 180
|
|
click_button "Filter"
|
|
|
|
expect(page).to have_content("There are 3 investments")
|
|
expect(page).to have_link("Road 199 supports")
|
|
expect(page).to have_link("St. 200 supports")
|
|
expect(page).to have_link("St. 300 supports")
|
|
expect(page).not_to have_link("Park 40 supports")
|
|
expect(page).not_to have_link("Park 99 supports")
|
|
expect(page).not_to have_link("Road 100 supports")
|
|
end
|
|
|
|
scenario "Filtering by maximum number of votes" do
|
|
group_1 = create(:budget_group, budget: budget)
|
|
group_2 = create(:budget_group, budget: budget)
|
|
parks = create(:budget_heading, group: group_1)
|
|
roads = create(:budget_heading, group: group_2)
|
|
streets = create(:budget_heading, group: group_2)
|
|
|
|
create(:budget_investment, heading: parks, cached_votes_up: 40, title: "Park 40 supports")
|
|
create(:budget_investment, heading: parks, cached_votes_up: 99, title: "Park 99 supports")
|
|
create(:budget_investment, heading: roads, cached_votes_up: 100, title: "Road 100 supports")
|
|
create(:budget_investment, heading: roads, cached_votes_up: 199, title: "Road 199 supports")
|
|
create(:budget_investment, heading: streets, cached_votes_up: 200, title: "St. 200 supports")
|
|
create(:budget_investment, heading: streets, cached_votes_up: 300, title: "St. 300 supports")
|
|
|
|
visit admin_budget_budget_investments_path(budget)
|
|
|
|
expect(page).to have_link("Park 40 supports")
|
|
expect(page).to have_link("Park 99 supports")
|
|
expect(page).to have_link("Road 100 supports")
|
|
expect(page).to have_link("Road 199 supports")
|
|
expect(page).to have_link("St. 200 supports")
|
|
expect(page).to have_link("St. 300 supports")
|
|
|
|
click_link "Advanced filters"
|
|
fill_in "max_total_supports", with: 180
|
|
click_button "Filter"
|
|
|
|
expect(page).to have_content("There are 3 investments")
|
|
expect(page).not_to have_link("Road 199 supports")
|
|
expect(page).not_to have_link("St. 200 supports")
|
|
expect(page).not_to have_link("St. 300 supports")
|
|
expect(page).to have_link("Park 40 supports")
|
|
expect(page).to have_link("Park 99 supports")
|
|
expect(page).to have_link("Road 100 supports")
|
|
end
|
|
|
|
scenario "Combination of checkbox with text search" do
|
|
user = create(:user, username: "Admin 1")
|
|
administrator = create(:administrator, user: user)
|
|
budget.administrators = [administrator]
|
|
|
|
educate_children = create(:budget_investment, budget: budget, title: "Educate the children",
|
|
administrator: administrator)
|
|
create(:budget_investment, budget: budget, title: "More schools",
|
|
administrator: administrator)
|
|
create(:budget_investment, budget: budget, title: "More hospitals")
|
|
|
|
visit admin_budget_budget_investments_path(budget_id: budget.id)
|
|
|
|
expect(page).to have_css(".budget_investment", count: 3)
|
|
expect(page).to have_content("Educate the children")
|
|
expect(page).to have_content("More schools")
|
|
expect(page).to have_content("More hospitals")
|
|
|
|
select "Admin 1", from: "administrator_id"
|
|
click_button "Filter"
|
|
|
|
expect(page).to have_css(".budget_investment", count: 2)
|
|
expect(page).to have_content("Educate the children")
|
|
expect(page).to have_content("More schools")
|
|
expect(page).not_to have_content("More hospitals")
|
|
|
|
fill_in "title_or_id", with: educate_children.id
|
|
click_button "Filter"
|
|
|
|
expect(page).to have_css(".budget_investment", count: 1)
|
|
expect(page).to have_content("Educate the children")
|
|
expect(page).not_to have_content("More schools")
|
|
expect(page).not_to have_content("More hospitals")
|
|
|
|
expect(page).to have_content("Selected")
|
|
end
|
|
|
|
scenario "Combination of select with text search" do
|
|
educate_children = create(:budget_investment, :feasible, :finished,
|
|
budget: budget, title: "Educate the children")
|
|
create(:budget_investment, :feasible, :finished, budget: budget, title: "More schools")
|
|
create(:budget_investment, budget: budget, title: "More hospitals")
|
|
|
|
visit admin_budget_budget_investments_path(budget_id: budget.id)
|
|
|
|
expect(page).to have_css(".budget_investment", count: 3)
|
|
expect(page).to have_content("Educate the children")
|
|
expect(page).to have_content("More schools")
|
|
expect(page).to have_content("More hospitals")
|
|
|
|
click_link "Advanced filters"
|
|
|
|
check("Feasible")
|
|
click_button "Filter"
|
|
|
|
expect(page).to have_css(".budget_investment", count: 2)
|
|
expect(page).to have_content("Educate the children")
|
|
expect(page).to have_content("More schools")
|
|
expect(page).not_to have_content("More hospitals")
|
|
|
|
fill_in "title_or_id", with: educate_children.id
|
|
click_button "Filter"
|
|
|
|
expect(page).to have_css(".budget_investment", count: 1)
|
|
expect(page).to have_content("Educate the children")
|
|
expect(page).not_to have_content("More schools")
|
|
expect(page).not_to have_content("More hospitals")
|
|
|
|
expect(page).to have_content("Selected")
|
|
end
|
|
|
|
scenario "Combination of checkbox with text search and checkbox" do
|
|
user = create(:user, username: "Admin 1")
|
|
administrator = create(:administrator, user: user)
|
|
budget.administrators = [administrator]
|
|
|
|
educate_children = create(:budget_investment, :feasible, :finished,
|
|
budget: budget, title: "Educate the children", administrator: administrator)
|
|
create(:budget_investment, :feasible, :finished, budget: budget, title: "More schools",
|
|
administrator: administrator)
|
|
create(:budget_investment, budget: budget, title: "More hospitals",
|
|
administrator: administrator)
|
|
create(:budget_investment, budget: budget, title: "More hostals")
|
|
|
|
visit admin_budget_budget_investments_path(budget_id: budget.id)
|
|
|
|
expect(page).to have_css(".budget_investment", count: 4)
|
|
expect(page).to have_content("Educate the children")
|
|
expect(page).to have_content("More schools")
|
|
expect(page).to have_content("More hospitals")
|
|
expect(page).to have_content("More hostals")
|
|
|
|
select "Admin 1", from: "administrator_id"
|
|
click_button "Filter"
|
|
|
|
expect(page).to have_css(".budget_investment", count: 3)
|
|
expect(page).to have_content("Educate the children")
|
|
expect(page).to have_content("More schools")
|
|
expect(page).to have_content("More hospitals")
|
|
expect(page).not_to have_content("More hostals")
|
|
|
|
click_link "Advanced filters"
|
|
|
|
within("#advanced_filters") { check("Feasible") }
|
|
click_button("Filter")
|
|
|
|
expect(page).to have_css(".budget_investment", count: 2)
|
|
expect(page).to have_content("Educate the children")
|
|
expect(page).to have_content("More schools")
|
|
expect(page).not_to have_content("More hospitals")
|
|
expect(page).not_to have_content("More hostals")
|
|
|
|
fill_in "title_or_id", with: educate_children.id
|
|
click_button "Filter"
|
|
|
|
expect(page).to have_css(".budget_investment", count: 1)
|
|
expect(page).to have_content("Educate the children")
|
|
expect(page).not_to have_content("More schools")
|
|
expect(page).not_to have_content("More hospitals")
|
|
expect(page).not_to have_content("More hostals")
|
|
|
|
expect(page).to have_content("Selected")
|
|
end
|
|
|
|
scenario "See results button appears when budget status is finished" do
|
|
finished_budget = create(:budget, :finished)
|
|
create(:budget_investment, :winner, budget: finished_budget, title: "Winner project")
|
|
|
|
visit admin_budget_budget_investments_path(budget_id: finished_budget.id)
|
|
expect(page).to have_content "See results"
|
|
end
|
|
|
|
scenario "See results button does not appear for unfinished budgets" do
|
|
not_finished_budget = create(:budget, :valuating)
|
|
|
|
visit admin_budget_budget_investments_path(budget_id: not_finished_budget.id)
|
|
expect(page).not_to have_content "See results"
|
|
end
|
|
end
|
|
|
|
context "Search" do
|
|
let!(:first_investment) do
|
|
create(:budget_investment, title: "Some other investment", budget: budget)
|
|
end
|
|
|
|
before do
|
|
I18n.with_locale(:es) do
|
|
create(:budget_investment, title: "Proyecto de inversión", budget: budget)
|
|
end
|
|
end
|
|
|
|
scenario "Search investments by title" do
|
|
visit admin_budget_budget_investments_path(budget)
|
|
|
|
expect(page).to have_content("Proyecto de inversión")
|
|
expect(page).to have_content("Some other investment")
|
|
|
|
fill_in "title_or_id", with: "Proyecto de inversión"
|
|
click_button "Filter"
|
|
|
|
expect(page).to have_content("Proyecto de inversión")
|
|
expect(page).not_to have_content("Some other investment")
|
|
|
|
fill_in "title_or_id", with: "Some other investment"
|
|
click_button "Filter"
|
|
|
|
expect(page).not_to have_content("Proyecto de inversión")
|
|
expect(page).to have_content("Some other investment")
|
|
end
|
|
|
|
scenario "Search investments by ID" do
|
|
visit admin_budget_budget_investments_path(budget)
|
|
|
|
expect(page).to have_content("Proyecto de inversión")
|
|
expect(page).to have_content("Some other investment")
|
|
|
|
fill_in "title_or_id", with: first_investment.id
|
|
click_button "Filter"
|
|
|
|
expect(page).to have_content("Some other investment")
|
|
expect(page).not_to have_content("Proyecto de inversión")
|
|
end
|
|
end
|
|
|
|
context "Sorting" do
|
|
before do
|
|
create(:budget_investment, title: "B First Investment", budget: budget, cached_votes_up: 50)
|
|
create(:budget_investment, title: "A Second Investment", budget: budget, cached_votes_up: 25)
|
|
create(:budget_investment, title: "C Third Investment", budget: budget, cached_votes_up: 10)
|
|
end
|
|
|
|
scenario "Default" do
|
|
create(:budget_investment, title: "D Fourth Investment", cached_votes_up: 50, budget: budget)
|
|
|
|
visit admin_budget_budget_investments_path(budget)
|
|
|
|
expect("D Fourth Investment").to appear_before("B First Investment")
|
|
expect("B First Investment").to appear_before("A Second Investment")
|
|
expect("A Second Investment").to appear_before("C Third Investment")
|
|
end
|
|
|
|
context "Ascending" do
|
|
scenario "Sort by ID" do
|
|
visit admin_budget_budget_investments_path(budget, sort_by: "id", direction: "asc")
|
|
|
|
expect("B First Investment").to appear_before("A Second Investment")
|
|
expect("A Second Investment").to appear_before("C Third Investment")
|
|
within("th", text: "ID") do
|
|
expect(page).to have_css ".icon-sortable.desc", visible: :all
|
|
end
|
|
end
|
|
|
|
scenario "Sort by title" do
|
|
visit admin_budget_budget_investments_path(budget, sort_by: "title", direction: "asc")
|
|
|
|
expect("A Second Investment").to appear_before("B First Investment")
|
|
expect("B First Investment").to appear_before("C Third Investment")
|
|
within("th", text: "Title") do
|
|
expect(page).to have_css ".icon-sortable.desc", visible: :all
|
|
end
|
|
end
|
|
|
|
scenario "Sort by supports" do
|
|
visit admin_budget_budget_investments_path(budget, sort_by: "supports", direction: "asc")
|
|
|
|
expect("C Third Investment").to appear_before("A Second Investment")
|
|
expect("A Second Investment").to appear_before("B First Investment")
|
|
within("th", text: "Supports") do
|
|
expect(page).to have_css ".icon-sortable.desc", visible: :all
|
|
end
|
|
end
|
|
end
|
|
|
|
context "Descending" do
|
|
scenario "Sort by ID" do
|
|
visit admin_budget_budget_investments_path(budget, sort_by: "id", direction: "desc")
|
|
|
|
expect("C Third Investment").to appear_before("A Second Investment")
|
|
expect("A Second Investment").to appear_before("B First Investment")
|
|
within("th", text: "ID") do
|
|
expect(page).to have_css ".icon-sortable.asc", visible: :all
|
|
end
|
|
end
|
|
|
|
scenario "Sort by title" do
|
|
visit admin_budget_budget_investments_path(budget, sort_by: "title", direction: "desc")
|
|
|
|
expect("C Third Investment").to appear_before("B First Investment")
|
|
expect("B First Investment").to appear_before("A Second Investment")
|
|
within("th", text: "Title") do
|
|
expect(page).to have_css ".icon-sortable.asc", visible: :all
|
|
end
|
|
end
|
|
|
|
scenario "Sort by supports" do
|
|
visit admin_budget_budget_investments_path(budget, sort_by: "supports", direction: "desc")
|
|
|
|
expect("B First Investment").to appear_before("A Second Investment")
|
|
expect("A Second Investment").to appear_before("C Third Investment")
|
|
within("th", text: "Supports") do
|
|
expect(page).to have_css ".icon-sortable.asc", visible: :all
|
|
end
|
|
end
|
|
end
|
|
|
|
context "With no direction provided sorts ascending" do
|
|
scenario "Sort by ID" do
|
|
visit admin_budget_budget_investments_path(budget, sort_by: "id")
|
|
|
|
expect("B First Investment").to appear_before("A Second Investment")
|
|
expect("A Second Investment").to appear_before("C Third Investment")
|
|
within("th", text: "ID") do
|
|
expect(page).to have_css ".icon-sortable.desc", visible: :all
|
|
end
|
|
end
|
|
|
|
scenario "Sort by title" do
|
|
visit admin_budget_budget_investments_path(budget, sort_by: "title")
|
|
|
|
expect("A Second Investment").to appear_before("B First Investment")
|
|
expect("B First Investment").to appear_before("C Third Investment")
|
|
within("th", text: "Title") do
|
|
expect(page).to have_css ".icon-sortable.desc", visible: :all
|
|
end
|
|
end
|
|
|
|
scenario "Sort by supports" do
|
|
visit admin_budget_budget_investments_path(budget, sort_by: "supports")
|
|
|
|
expect("C Third Investment").to appear_before("A Second Investment")
|
|
expect("A Second Investment").to appear_before("B First Investment")
|
|
within("th", text: "Supports") do
|
|
expect(page).to have_css ".icon-sortable.desc", visible: :all
|
|
end
|
|
end
|
|
end
|
|
|
|
context "With incorrect direction provided sorts ascending" do
|
|
scenario "Sort by ID" do
|
|
visit admin_budget_budget_investments_path(budget, sort_by: "id", direction: "incorrect")
|
|
|
|
expect("B First Investment").to appear_before("A Second Investment")
|
|
expect("A Second Investment").to appear_before("C Third Investment")
|
|
within("th", text: "ID") do
|
|
expect(page).to have_css ".icon-sortable.desc", visible: :all
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
context "Show" do
|
|
scenario "Show the investment details" do
|
|
user = create(:user, username: "Rachel", email: "rachel@valuators.org")
|
|
valuator = create(:valuator, user: user)
|
|
budget_investment = create(:budget_investment,
|
|
:unfeasible,
|
|
unfeasibility_explanation: "It is impossible",
|
|
price: 1234,
|
|
price_first_year: 1000,
|
|
administrator: administrator,
|
|
valuators: [valuator]
|
|
)
|
|
|
|
visit admin_budget_budget_investments_path(budget_investment.budget)
|
|
|
|
within_window(window_opened_by { click_link budget_investment.title }) do
|
|
expect(page).to have_content("Investment preview")
|
|
expect(page).to have_content(budget_investment.title)
|
|
expect(page).to have_content(budget_investment.description)
|
|
expect(page).to have_content(budget_investment.author.name)
|
|
expect(page).to have_content(budget_investment.heading.name)
|
|
expect(page).to have_content("1234")
|
|
expect(page).to have_content("1000")
|
|
expect(page).to have_content("Unfeasible")
|
|
expect(page).to have_content("It is impossible")
|
|
expect(page).to have_content("Ana (ana@admins.org)")
|
|
|
|
within("#assigned_valuators") do
|
|
expect(page).to have_content("Rachel (rachel@valuators.org)")
|
|
end
|
|
|
|
expect(page).to have_button "Publish comment"
|
|
end
|
|
end
|
|
|
|
scenario "Show image and documents on investment details" do
|
|
budget_investment = create(:budget_investment,
|
|
:with_image,
|
|
:unfeasible,
|
|
unfeasibility_explanation: "It is impossible",
|
|
price: 1234,
|
|
price_first_year: 1000,
|
|
administrator: administrator)
|
|
document = create(:document, documentable: budget_investment)
|
|
|
|
visit admin_budget_budget_investments_path(budget_investment.budget)
|
|
|
|
within_window(window_opened_by { click_link budget_investment.title }) do
|
|
expect(page).to have_content(budget_investment.title)
|
|
expect(page).to have_content(budget_investment.description)
|
|
expect(page).to have_content(budget_investment.author.name)
|
|
expect(page).to have_content(budget_investment.heading.name)
|
|
expect(page).to have_content("Investment preview")
|
|
expect(page).to have_content(budget_investment.image.title)
|
|
expect(page).to have_content("Documents (1)")
|
|
expect(page).to have_content(document.title)
|
|
expect(page).to have_content("Download file")
|
|
expect(page).to have_content("1234")
|
|
expect(page).to have_content("1000")
|
|
expect(page).to have_content("Unfeasible")
|
|
expect(page).to have_content("It is impossible")
|
|
expect(page).to have_content("Ana (ana@admins.org)")
|
|
end
|
|
end
|
|
|
|
scenario "Does not show related content or hide links on preview" do
|
|
budget_investment = create(:budget_investment,
|
|
:unfeasible,
|
|
price: 1234,
|
|
price_first_year: 1000,
|
|
administrator: administrator)
|
|
|
|
visit admin_budget_budget_investments_path(budget_investment.budget)
|
|
|
|
click_link budget_investment.title
|
|
|
|
expect(page).not_to have_content("Add related content")
|
|
expect(page).not_to have_content("Hide")
|
|
end
|
|
|
|
scenario "If budget is finished, investment cannot be edited or valuation comments created" do
|
|
finished_budget = create(:budget, :finished)
|
|
budget_investment = create(:budget_investment,
|
|
budget: finished_budget,
|
|
administrator: administrator)
|
|
visit admin_budget_budget_investments_path(budget_investment.budget)
|
|
|
|
within_window(window_opened_by { click_link budget_investment.title }) do
|
|
expect(page).not_to have_link "Edit"
|
|
expect(page).not_to have_link "Edit classification"
|
|
expect(page).not_to have_link "Edit dossier"
|
|
expect(page).to have_link "Create new milestone"
|
|
|
|
expect(page).not_to have_button "Publish comment"
|
|
end
|
|
end
|
|
end
|
|
|
|
context "Edit" do
|
|
scenario "Change title, incompatible, description or heading" do
|
|
budget_investment = create(:budget_investment, :incompatible)
|
|
create(:budget_heading, group: budget_investment.group, name: "Barbate")
|
|
|
|
visit admin_budget_budget_investment_path(budget_investment.budget, budget_investment)
|
|
click_link "Edit"
|
|
|
|
fill_in "Title", with: "Potatoes"
|
|
fill_in_ckeditor "Description", with: "Carrots"
|
|
select "#{budget_investment.group.name}: Barbate", from: "budget_investment[heading_id]"
|
|
uncheck "budget_investment_incompatible"
|
|
check "budget_investment_selected"
|
|
|
|
click_button "Update"
|
|
|
|
expect(page).to have_content "Potatoes"
|
|
expect(page).to have_content "Carrots"
|
|
expect(page).to have_content "Barbate"
|
|
expect(page).to have_content "Compatibility: Compatible"
|
|
expect(page).to have_content "Selected"
|
|
end
|
|
|
|
scenario "Compatible non-winner can't edit incompatibility" do
|
|
budget_investment = create(:budget_investment, :selected)
|
|
create(:budget_heading, group: budget_investment.group, name: "Tetuan")
|
|
|
|
visit admin_budget_budget_investment_path(budget_investment.budget, budget_investment)
|
|
click_link "Edit"
|
|
|
|
expect(page).not_to have_content "Compatibility"
|
|
expect(page).not_to have_content "Mark as incompatible"
|
|
end
|
|
|
|
scenario "Add administrator" do
|
|
budget_investment = create(:budget_investment)
|
|
user = create(:user, username: "Marta", email: "marta@admins.org")
|
|
create(:administrator, user: user, description: "Marta desc")
|
|
|
|
visit edit_admin_budget_path(budget_investment.budget)
|
|
|
|
click_link "Select administrators"
|
|
check "Marta"
|
|
click_button "Update Budget"
|
|
|
|
visit admin_budget_budget_investment_path(budget_investment.budget, budget_investment)
|
|
click_link "Edit classification"
|
|
|
|
select "Marta desc (marta@admins.org)", from: "budget_investment[administrator_id]"
|
|
click_button "Update"
|
|
|
|
expect(page).to have_content "Investment project updated succesfully."
|
|
expect(page).to have_content "Assigned administrator: Marta"
|
|
end
|
|
|
|
scenario "Add valuators" do
|
|
budget_investment = create(:budget_investment)
|
|
|
|
user1 = create(:user, username: "Valentina", email: "v1@valuators.org")
|
|
user2 = create(:user, username: "Valerian", email: "v2@valuators.org")
|
|
user3 = create(:user, username: "Val", email: "v3@valuators.org")
|
|
|
|
valuator1 = create(:valuator, user: user1)
|
|
valuator3 = create(:valuator, user: user3)
|
|
create(:valuator, user: user2)
|
|
|
|
visit edit_admin_budget_path(budget_investment.budget)
|
|
|
|
click_link "Select valuators"
|
|
|
|
check "Valentina"
|
|
check "Val"
|
|
click_button "Update Budget"
|
|
|
|
visit admin_budget_budget_investment_path(budget_investment.budget, budget_investment)
|
|
click_link "Edit classification"
|
|
|
|
check "budget_investment_valuator_ids_#{valuator1.id}"
|
|
check "budget_investment_valuator_ids_#{valuator3.id}"
|
|
|
|
click_button "Update"
|
|
|
|
expect(page).to have_content "Investment project updated succesfully."
|
|
|
|
within("#assigned_valuators") do
|
|
expect(page).to have_content("Valentina (v1@valuators.org)")
|
|
expect(page).to have_content("Val (v3@valuators.org)")
|
|
expect(page).not_to have_content("Undefined")
|
|
expect(page).not_to have_content("Valerian (v2@valuators.org)")
|
|
end
|
|
end
|
|
|
|
scenario "Add valuator group" do
|
|
budget_investment = create(:budget_investment)
|
|
|
|
health_group = create(:valuator_group, name: "Health")
|
|
culture_group = create(:valuator_group, name: "Culture")
|
|
create(:valuator_group, name: "Economy")
|
|
|
|
visit admin_budget_budget_investment_path(budget_investment.budget, budget_investment)
|
|
click_link "Edit classification"
|
|
|
|
check "budget_investment_valuator_group_ids_#{health_group.id}"
|
|
check "budget_investment_valuator_group_ids_#{culture_group.id}"
|
|
|
|
click_button "Update"
|
|
|
|
expect(page).to have_content "Investment project updated succesfully."
|
|
|
|
within("#assigned_valuator_groups") do
|
|
expect(page).to have_content("Health")
|
|
expect(page).to have_content("Culture")
|
|
expect(page).not_to have_content("Undefined")
|
|
expect(page).not_to have_content("Economy")
|
|
end
|
|
end
|
|
|
|
scenario "Do not display valuators of an assigned group" do
|
|
budget_investment = create(:budget_investment)
|
|
|
|
health_group = create(:valuator_group, name: "Health")
|
|
user = create(:user, username: "Valentina", email: "v1@valuators.org")
|
|
create(:valuator, user: user, valuator_group: health_group)
|
|
|
|
visit admin_budget_budget_investment_path(budget_investment.budget, budget_investment)
|
|
click_link "Edit classification"
|
|
|
|
check "budget_investment_valuator_group_ids_#{health_group.id}"
|
|
|
|
click_button "Update"
|
|
|
|
expect(page).to have_content "Investment project updated succesfully."
|
|
|
|
within("#assigned_valuator_groups") { expect(page).to have_content("Health") }
|
|
within("#assigned_valuators") do
|
|
expect(page).to have_content("Undefined")
|
|
expect(page).not_to have_content("Valentina (v1@valuators.org)")
|
|
end
|
|
end
|
|
|
|
scenario "Adds existing valuation tags" do
|
|
budget_investment1 = create(:budget_investment)
|
|
budget_investment1.set_tag_list_on(:valuation_tags, "Education, Health")
|
|
budget_investment1.save!
|
|
|
|
budget_investment2 = create(:budget_investment)
|
|
|
|
visit edit_admin_budget_budget_investment_path(budget_investment2.budget, budget_investment2)
|
|
|
|
find(".js-add-tag-link", text: "Education").click
|
|
|
|
click_button "Update"
|
|
|
|
expect(page).to have_content "Investment project updated succesfully."
|
|
|
|
within "#tags" do
|
|
expect(page).to have_content "Education"
|
|
expect(page).not_to have_content "Health"
|
|
end
|
|
end
|
|
|
|
scenario "Adds non existent valuation tags" do
|
|
budget_investment = create(:budget_investment)
|
|
|
|
visit admin_budget_budget_investment_path(budget_investment.budget, budget_investment)
|
|
click_link "Edit classification"
|
|
|
|
fill_in "budget_investment_valuation_tag_list", with: "Refugees, Solidarity"
|
|
click_button "Update"
|
|
|
|
expect(page).to have_content "Investment project updated succesfully."
|
|
|
|
within "#tags" do
|
|
expect(page).to have_content "Refugees"
|
|
expect(page).to have_content "Solidarity"
|
|
end
|
|
end
|
|
|
|
scenario "Changes valuation and user generated tags" do
|
|
budget_investment = create(:budget_investment, tag_list: "Park")
|
|
budget_investment.set_tag_list_on(:valuation_tags, "Education")
|
|
budget_investment.save!
|
|
|
|
visit admin_budget_budget_investment_path(budget_investment.budget, budget_investment)
|
|
|
|
within("#tags_budget_investment_#{budget_investment.id}") do
|
|
expect(page).not_to have_content "Education"
|
|
expect(page).to have_content "Park"
|
|
end
|
|
|
|
click_link "Edit classification"
|
|
|
|
fill_in "budget_investment_tag_list", with: "Park, Trees"
|
|
fill_in "budget_investment_valuation_tag_list", with: "Education, Environment"
|
|
click_button "Update"
|
|
|
|
visit admin_budget_budget_investment_path(budget_investment.budget, budget_investment)
|
|
|
|
within("#tags_budget_investment_#{budget_investment.id}") do
|
|
expect(page).not_to have_content "Education"
|
|
expect(page).not_to have_content "Environment"
|
|
expect(page).to have_content "Park"
|
|
expect(page).to have_content "Trees"
|
|
end
|
|
|
|
within("#tags") do
|
|
expect(page).to have_content "Education, Environment"
|
|
expect(page).not_to have_content "Park"
|
|
expect(page).not_to have_content "Trees"
|
|
end
|
|
end
|
|
|
|
scenario "Maintains user tags" do
|
|
budget_investment = create(:budget_investment, tag_list: "Park")
|
|
|
|
visit admin_budget_budget_investment_path(budget_investment.budget, budget_investment)
|
|
|
|
click_link "Edit classification"
|
|
|
|
fill_in "budget_investment_valuation_tag_list", with: "Refugees, Solidarity"
|
|
click_button "Update"
|
|
|
|
expect(page).to have_content "Investment project updated succesfully."
|
|
|
|
visit budget_investment_path(budget_investment.budget, budget_investment)
|
|
expect(page).to have_content "Park"
|
|
expect(page).not_to have_content "Refugees, Solidarity"
|
|
end
|
|
|
|
scenario "Shows alert when 'Valuation finished' is checked" do
|
|
budget_investment = create(:budget_investment)
|
|
|
|
visit admin_budget_budget_investment_path(budget_investment.budget, budget_investment)
|
|
click_link "Edit dossier"
|
|
|
|
expect(page).to have_content("Valuation finished")
|
|
|
|
accept_confirm { check("Valuation finished") }
|
|
|
|
expect(find("#js-investment-report-alert")).to be_checked
|
|
end
|
|
|
|
# The feature tested in this scenario works as expected but some underlying reason
|
|
# we're not aware of makes it fail at random
|
|
xscenario "Shows alert with unfeasible status when 'Valuation finished' is checked" do
|
|
budget_investment = create(:budget_investment, :unfeasible)
|
|
|
|
visit admin_budget_budget_investment_path(budget_investment.budget, budget_investment)
|
|
click_link "Edit dossier"
|
|
|
|
expect(page).to have_content("Valuation finished")
|
|
valuation = find_field("budget_investment[valuation_finished]")
|
|
accept_confirm { check("Valuation finished") }
|
|
|
|
expect(valuation).to be_checked
|
|
end
|
|
|
|
scenario "Undoes check in 'Valuation finished' if user clicks 'cancel' on alert" do
|
|
budget_investment = create(:budget_investment)
|
|
|
|
visit admin_budget_budget_investment_path(budget_investment.budget, budget_investment)
|
|
click_link "Edit dossier"
|
|
|
|
dismiss_confirm { check("Valuation finished") }
|
|
|
|
expect(find("#js-investment-report-alert")).not_to be_checked
|
|
end
|
|
|
|
scenario "Errors on update" do
|
|
budget_investment = create(:budget_investment)
|
|
|
|
visit admin_budget_budget_investment_path(budget_investment.budget, budget_investment)
|
|
click_link "Edit"
|
|
|
|
fill_in "Title", with: ""
|
|
|
|
click_button "Update"
|
|
|
|
expect(page).to have_content "can't be blank"
|
|
end
|
|
|
|
scenario "Add milestone tags" do
|
|
budget_investment = create(:budget_investment)
|
|
|
|
visit admin_budget_budget_investment_path(budget_investment.budget, budget_investment)
|
|
|
|
expect(page).not_to have_content("Milestone Tags:")
|
|
|
|
click_link "Edit classification"
|
|
|
|
fill_in "budget_investment_milestone_tag_list", with: "tag1, tag2"
|
|
|
|
click_button "Update"
|
|
|
|
expect(page).to have_content "Investment project updated succesfully."
|
|
expect(page).to have_content("Milestone Tags: tag1, tag2")
|
|
end
|
|
end
|
|
|
|
context "Selecting" do
|
|
let!(:unfeasible_bi) do
|
|
create(:budget_investment, :unfeasible, budget: budget, title: "Unfeasible project")
|
|
end
|
|
|
|
let!(:feasible_bi) do
|
|
create(:budget_investment, :feasible, budget: budget, title: "Feasible project")
|
|
end
|
|
|
|
let!(:feasible_vf_bi) do
|
|
create(:budget_investment, :feasible, :finished, budget: budget, title: "Feasible, VF project")
|
|
end
|
|
|
|
let!(:selected_bi) do
|
|
create(:budget_investment, :selected, budget: budget, title: "Selected project")
|
|
end
|
|
|
|
let!(:winner_bi) do
|
|
create(:budget_investment, :winner, budget: budget, title: "Winner project")
|
|
end
|
|
|
|
let!(:undecided_bi) do
|
|
create(:budget_investment, :undecided, budget: budget, title: "Undecided project")
|
|
end
|
|
|
|
scenario "Filtering by valuation and selection" do
|
|
visit admin_budget_budget_investments_path(budget)
|
|
|
|
click_link "Advanced filters"
|
|
check "Valuation finished"
|
|
click_button "Filter"
|
|
|
|
expect(page).not_to have_content(unfeasible_bi.title)
|
|
expect(page).not_to have_content(feasible_bi.title)
|
|
expect(page).to have_content(feasible_vf_bi.title)
|
|
expect(page).to have_content(selected_bi.title)
|
|
expect(page).to have_content(winner_bi.title)
|
|
|
|
within("#advanced_filters") { check("Feasible") }
|
|
click_button("Filter")
|
|
|
|
expect(page).not_to have_content(unfeasible_bi.title)
|
|
expect(page).not_to have_content(feasible_bi.title)
|
|
expect(page).to have_content(feasible_vf_bi.title)
|
|
expect(page).to have_content(selected_bi.title)
|
|
expect(page).to have_content(winner_bi.title)
|
|
|
|
within("#advanced_filters") do
|
|
check("Selected")
|
|
uncheck("Feasible")
|
|
end
|
|
|
|
click_button("Filter")
|
|
|
|
expect(page).not_to have_content(unfeasible_bi.title)
|
|
expect(page).not_to have_content(feasible_bi.title)
|
|
expect(page).not_to have_content(feasible_vf_bi.title)
|
|
expect(page).to have_content(selected_bi.title)
|
|
expect(page).to have_content(winner_bi.title)
|
|
|
|
check "Winners"
|
|
click_button "Filter"
|
|
|
|
expect(page).not_to have_content(unfeasible_bi.title)
|
|
expect(page).not_to have_content(feasible_bi.title)
|
|
expect(page).not_to have_content(feasible_vf_bi.title)
|
|
expect(page).not_to have_content(selected_bi.title)
|
|
expect(page).to have_content(winner_bi.title)
|
|
end
|
|
|
|
scenario "Aggregating results" do
|
|
visit admin_budget_budget_investments_path(budget)
|
|
|
|
click_link "Advanced filters"
|
|
|
|
within("#advanced_filters") { check("Undecided") }
|
|
click_button("Filter")
|
|
|
|
expect(page).to have_content(undecided_bi.title)
|
|
expect(page).not_to have_content(winner_bi.title)
|
|
expect(page).not_to have_content(selected_bi.title)
|
|
expect(page).not_to have_content(feasible_bi.title)
|
|
expect(page).not_to have_content(unfeasible_bi.title)
|
|
expect(page).not_to have_content(feasible_vf_bi.title)
|
|
|
|
within("#advanced_filters") { check("Unfeasible") }
|
|
click_button("Filter")
|
|
|
|
expect(page).to have_content(undecided_bi.title)
|
|
expect(page).to have_content(unfeasible_bi.title)
|
|
expect(page).not_to have_content(winner_bi.title)
|
|
expect(page).not_to have_content(selected_bi.title)
|
|
expect(page).not_to have_content(feasible_bi.title)
|
|
expect(page).not_to have_content(feasible_vf_bi.title)
|
|
end
|
|
|
|
scenario "Showing the selection buttons" do
|
|
visit admin_budget_budget_investments_path(budget)
|
|
|
|
within("#budget_investment_#{unfeasible_bi.id}") do
|
|
expect(page).not_to have_link("Select")
|
|
expect(page).not_to have_link("Selected")
|
|
end
|
|
|
|
within("#budget_investment_#{feasible_bi.id}") do
|
|
expect(page).not_to have_link("Select")
|
|
expect(page).not_to have_link("Selected")
|
|
end
|
|
|
|
within("#budget_investment_#{feasible_vf_bi.id}") do
|
|
expect(page).to have_link("Select")
|
|
expect(page).not_to have_link("Selected")
|
|
end
|
|
|
|
within("#budget_investment_#{selected_bi.id}") do
|
|
expect(page).not_to have_link("Select")
|
|
expect(page).to have_link("Selected")
|
|
end
|
|
end
|
|
|
|
scenario "Show only selected text when budget is finished" do
|
|
budget.update!(phase: "finished")
|
|
|
|
visit admin_budget_budget_investments_path(budget)
|
|
|
|
within("#budget_investment_#{unfeasible_bi.id} #selection") do
|
|
expect(page).not_to have_content("Select")
|
|
expect(page).not_to have_content("Selected")
|
|
end
|
|
|
|
within("#budget_investment_#{feasible_bi.id} #selection") do
|
|
expect(page).not_to have_content("Select")
|
|
expect(page).not_to have_content("Selected")
|
|
end
|
|
|
|
within("#budget_investment_#{feasible_vf_bi.id} #selection") do
|
|
expect(page).not_to have_content("Select")
|
|
expect(page).not_to have_content("Selected")
|
|
end
|
|
|
|
within("#budget_investment_#{selected_bi.id} #selection") do
|
|
expect(page).not_to contain_exactly("Select")
|
|
expect(page).to have_content("Selected")
|
|
end
|
|
end
|
|
|
|
scenario "Selecting an investment" do
|
|
visit admin_budget_budget_investments_path(budget)
|
|
|
|
within("#budget_investment_#{feasible_vf_bi.id}") do
|
|
click_link("Select")
|
|
expect(page).to have_link("Selected")
|
|
end
|
|
|
|
click_link "Advanced filters"
|
|
|
|
within("#advanced_filters") { check("Selected") }
|
|
click_button("Filter")
|
|
|
|
within("#budget_investment_#{feasible_vf_bi.id}") do
|
|
expect(page).not_to have_link("Select")
|
|
expect(page).to have_link("Selected")
|
|
end
|
|
end
|
|
|
|
scenario "Unselecting an investment" do
|
|
visit admin_budget_budget_investments_path(budget)
|
|
click_link "Advanced filters"
|
|
|
|
within("#advanced_filters") { check("Selected") }
|
|
click_button("Filter")
|
|
|
|
expect(page).to have_content("There are 2 investments")
|
|
|
|
within("#budget_investment_#{selected_bi.id}") do
|
|
click_link("Selected")
|
|
|
|
expect(page).to have_link("Select")
|
|
end
|
|
|
|
click_button("Filter")
|
|
expect(page).not_to have_content(selected_bi.title)
|
|
expect(page).to have_content("There is 1 investment")
|
|
|
|
visit admin_budget_budget_investments_path(budget)
|
|
|
|
within("#budget_investment_#{selected_bi.id}") do
|
|
expect(page).to have_link("Select")
|
|
expect(page).not_to have_link("Selected")
|
|
end
|
|
end
|
|
|
|
describe "Pagination" do
|
|
before { selected_bi.update(cached_votes_up: 50) }
|
|
|
|
scenario "After unselecting an investment" do
|
|
allow(Budget::Investment).to receive(:default_per_page).and_return(3)
|
|
|
|
visit admin_budget_budget_investments_path(budget)
|
|
|
|
within("#budget_investment_#{selected_bi.id}") do
|
|
click_link("Selected")
|
|
|
|
expect(page).to have_link "Select"
|
|
end
|
|
|
|
click_link("Next")
|
|
|
|
expect(page).to have_link("Previous")
|
|
end
|
|
end
|
|
end
|
|
|
|
context "Mark as visible to valuators" do
|
|
let(:valuator) { create(:valuator) }
|
|
let(:admin) { create(:administrator) }
|
|
|
|
let(:heading) { create(:budget_heading, budget: budget) }
|
|
|
|
let(:investment1) { create(:budget_investment, heading: heading) }
|
|
let(:investment2) { create(:budget_investment, heading: heading) }
|
|
|
|
scenario "Mark as visible to valuator" do
|
|
investment1.valuators << valuator
|
|
investment2.valuators << valuator
|
|
investment1.update!(administrator: admin)
|
|
investment2.update!(administrator: admin)
|
|
|
|
visit admin_budget_budget_investments_path(budget)
|
|
click_link "Advanced filters"
|
|
check "Under valuation"
|
|
click_button "Filter"
|
|
|
|
within("#budget_investment_#{investment1.id}") do
|
|
check "budget_investment_visible_to_valuators"
|
|
end
|
|
|
|
visit admin_budget_budget_investments_path(budget)
|
|
click_link "Advanced filters"
|
|
check "Under valuation"
|
|
click_button "Filter"
|
|
|
|
within("#budget_investment_#{investment1.id}") do
|
|
expect(find("#budget_investment_visible_to_valuators")).to be_checked
|
|
end
|
|
end
|
|
|
|
scenario "Shows the correct investments to valuators" do
|
|
investment1.update!(visible_to_valuators: true)
|
|
investment2.update!(visible_to_valuators: false)
|
|
|
|
investment1.valuators << valuator
|
|
investment2.valuators << valuator
|
|
investment1.update!(administrator: admin)
|
|
investment2.update!(administrator: admin)
|
|
|
|
login_as(valuator.user)
|
|
visit valuation_root_path
|
|
|
|
within "#budget_#{budget.id}" do
|
|
click_link "Evaluate"
|
|
end
|
|
|
|
expect(page).to have_content investment1.title
|
|
expect(page).not_to have_content investment2.title
|
|
end
|
|
|
|
scenario "Unmark as visible to valuator" do
|
|
budget.update!(phase: "valuating")
|
|
|
|
investment1.valuators << valuator
|
|
investment2.valuators << valuator
|
|
investment1.update!(administrator: admin, visible_to_valuators: true)
|
|
investment2.update!(administrator: admin, visible_to_valuators: true)
|
|
|
|
visit admin_budget_budget_investments_path(budget)
|
|
|
|
click_link "Advanced filters"
|
|
check "Under valuation"
|
|
click_button "Filter"
|
|
|
|
within("#budget_investment_#{investment1.id}") do
|
|
uncheck "budget_investment_visible_to_valuators"
|
|
end
|
|
|
|
visit admin_budget_budget_investments_path(budget)
|
|
|
|
click_link "Advanced filters"
|
|
check "Under valuation"
|
|
click_button "Filter"
|
|
|
|
within("#budget_investment_#{investment1.id}") do
|
|
expect(find("#budget_investment_visible_to_valuators")).not_to be_checked
|
|
end
|
|
end
|
|
|
|
scenario "Cannot mark/unmark visible to valuators on finished budgets" do
|
|
budget.update!(phase: "finished")
|
|
create(:budget_investment, budget: budget, title: "Visible", visible_to_valuators: true)
|
|
create(:budget_investment, budget: budget, title: "Invisible", visible_to_valuators: false)
|
|
|
|
visit admin_budget_budget_investments_path(budget)
|
|
|
|
within "tr", text: "Visible" do
|
|
within "td[data-field=visible_to_valuators]" do
|
|
expect(page).to have_text "Yes"
|
|
expect(page).not_to have_field "budget_investment_visible_to_valuators"
|
|
end
|
|
end
|
|
|
|
within "tr", text: "Invisible" do
|
|
within "td[data-field=visible_to_valuators]" do
|
|
expect(page).to have_text "No"
|
|
expect(page).not_to have_field "budget_investment_visible_to_valuators"
|
|
end
|
|
end
|
|
end
|
|
|
|
scenario "Showing the valuating checkbox" do
|
|
investment1 = create(:budget_investment, :with_administrator, :with_valuator, :visible_to_valuators,
|
|
budget: budget)
|
|
investment2 = create(:budget_investment, :with_administrator, :with_valuator, :invisible_to_valuators,
|
|
budget: budget)
|
|
|
|
visit admin_budget_budget_investments_path(budget)
|
|
|
|
expect(page).to have_css("#budget_investment_visible_to_valuators")
|
|
|
|
click_link "Advanced filters"
|
|
check "Under valuation"
|
|
click_button "Filter"
|
|
|
|
within("#budget_investment_#{investment1.id}") do
|
|
valuating_checkbox = find("#budget_investment_visible_to_valuators")
|
|
expect(valuating_checkbox).to be_checked
|
|
end
|
|
|
|
within("#budget_investment_#{investment2.id}") do
|
|
valuating_checkbox = find("#budget_investment_visible_to_valuators")
|
|
expect(valuating_checkbox).not_to be_checked
|
|
end
|
|
end
|
|
|
|
scenario "Keeps the valuation tags" do
|
|
investment1.set_tag_list_on(:valuation_tags, %w[Possimpible Truthiness])
|
|
investment1.save!
|
|
|
|
visit admin_budget_budget_investments_path(budget)
|
|
|
|
within("#budget_investment_#{investment1.id}") do
|
|
check "budget_investment_visible_to_valuators"
|
|
end
|
|
|
|
visit edit_admin_budget_budget_investment_path(budget, investment1)
|
|
|
|
expect(page).to have_content "Possimpible"
|
|
expect(page).to have_content "Truthiness"
|
|
end
|
|
end
|
|
|
|
context "Selecting csv", :no_js do
|
|
scenario "Downloading CSV file" do
|
|
admin = create(:administrator, user: create(:user, username: "Admin"))
|
|
valuator = create(:valuator, user: create(:user, username: "Valuator"))
|
|
valuator_group = create(:valuator_group, name: "Valuator Group")
|
|
budget_group = create(:budget_group, name: "Budget Group", budget: budget)
|
|
first_budget_heading = create(:budget_heading, group: budget_group, name: "Budget Heading")
|
|
second_budget_heading = create(:budget_heading, group: budget_group, name: "Other Heading")
|
|
first_investment = create(:budget_investment, :feasible, :selected, title: "Le Investment",
|
|
budget: budget, group: budget_group,
|
|
heading: first_budget_heading,
|
|
cached_votes_up: 88, price: 99,
|
|
valuators: [],
|
|
valuator_groups: [valuator_group],
|
|
administrator: admin,
|
|
visible_to_valuators: true)
|
|
second_investment = create(:budget_investment, :unfeasible, title: "Alt Investment",
|
|
budget: budget, group: budget_group,
|
|
heading: second_budget_heading,
|
|
cached_votes_up: 66, price: 88,
|
|
valuators: [valuator],
|
|
valuator_groups: [],
|
|
visible_to_valuators: false)
|
|
|
|
visit admin_budget_budget_investments_path(budget)
|
|
|
|
click_link "Download current selection"
|
|
|
|
header = page.response_headers["Content-Disposition"]
|
|
expect(header).to match(/^attachment/)
|
|
expect(header).to match(/filename="budget_investments.csv"$/)
|
|
|
|
csv_contents = "ID,Title,Supports,Administrator,Valuator,Valuation Group,Scope of operation,"\
|
|
"Feasibility,Val. Fin.,Selected,Show to valuators,Author username\n"\
|
|
"#{first_investment.id},Le Investment,88,Admin,-,Valuator Group,"\
|
|
"Budget Heading,Feasible (€99),Yes,Yes,Yes,"\
|
|
"#{first_investment.author.username}\n#{second_investment.id},"\
|
|
"Alt Investment,66,No admin assigned,Valuator,-,Other Heading,"\
|
|
"Unfeasible,No,No,No,#{second_investment.author.username}\n"
|
|
|
|
expect(page.body).to eq(csv_contents)
|
|
end
|
|
|
|
scenario "Downloading CSV file with applied filter" do
|
|
create(:budget_investment, :unfeasible, budget: budget, title: "Unfeasible one")
|
|
create(:budget_investment, :finished, budget: budget, title: "Finished Investment")
|
|
|
|
visit admin_budget_budget_investments_path(budget)
|
|
click_link "Advanced filters"
|
|
check "Valuation finished"
|
|
click_button "Filter"
|
|
|
|
click_link "Download current selection"
|
|
|
|
expect(page).to have_content("Finished Investment")
|
|
expect(page).not_to have_content("Unfeasible one")
|
|
end
|
|
end
|
|
|
|
context "Columns chooser" do
|
|
let!(:investment) do
|
|
create(:budget_investment,
|
|
:winner,
|
|
:visible_to_valuators,
|
|
budget: budget,
|
|
author: create(:user, username: "Jon Doe")
|
|
)
|
|
end
|
|
let(:default_columns) do
|
|
%w[id title supports admin valuator geozone feasibility price
|
|
valuation_finished visible_to_valuators selected]
|
|
end
|
|
let(:selectable_columns) do
|
|
%w[title supports admin author valuator geozone feasibility price
|
|
valuation_finished visible_to_valuators selected]
|
|
end
|
|
|
|
scenario "Display default columns" do
|
|
visit admin_budget_budget_investments_path(budget)
|
|
|
|
within("table.column-selectable") do
|
|
default_columns.each do |default_column|
|
|
columns_header = I18n.t("admin.budget_investments.index.list.#{default_column}")
|
|
expect(page).to have_content(columns_header)
|
|
end
|
|
|
|
expect(page).to have_content(investment.title)
|
|
end
|
|
end
|
|
|
|
scenario "Display incompatible column as default if selected filter was set" do
|
|
visit admin_budget_budget_investments_path(budget, advanced_filters: ["selected"])
|
|
|
|
within("table.column-selectable") do
|
|
expect(page).to have_content("Incompatible")
|
|
end
|
|
|
|
expect(page).to have_content(investment.title)
|
|
end
|
|
|
|
scenario "Set cookie with default columns value if undefined" do
|
|
visit admin_budget_budget_investments_path(budget)
|
|
|
|
cookies = page.driver.browser.manage.all_cookies
|
|
columns_cookie = cookies.find { |cookie| cookie[:name] == "investments-columns" }
|
|
cookie_value = columns_cookie[:value]
|
|
|
|
expect(cookie_value).to eq("id,title,supports,admin,valuator,geozone," +
|
|
"feasibility,price,valuation_finished,visible_to_valuators,selected,incompatible")
|
|
end
|
|
|
|
scenario "Use column selector to display visible columns" do
|
|
visit admin_budget_budget_investments_path(budget)
|
|
|
|
click_button "Columns"
|
|
|
|
within("#js-columns-selector-wrapper") do
|
|
selectable_columns.each do |column|
|
|
check_text = I18n.t("admin.budget_investments.index.list.#{column}")
|
|
|
|
expect(page).to have_content(check_text)
|
|
end
|
|
end
|
|
|
|
within("#js-columns-selector-wrapper") do
|
|
uncheck "Title"
|
|
uncheck "Price"
|
|
check "Author"
|
|
end
|
|
|
|
within("table.column-selectable") do
|
|
expect(page).not_to have_content("Title")
|
|
expect(page).not_to have_content("Price")
|
|
expect(page).to have_content("Author")
|
|
|
|
expect(page).not_to have_content(investment.title)
|
|
expect(page).not_to have_content(investment.formatted_price)
|
|
expect(page).to have_content("Jon Doe")
|
|
end
|
|
end
|
|
|
|
scenario "Cookie will be updated after change columns selection" do
|
|
visit admin_budget_budget_investments_path(budget)
|
|
|
|
click_button "Columns"
|
|
|
|
within("#js-columns-selector-wrapper") do
|
|
uncheck "Title"
|
|
uncheck "Price"
|
|
uncheck "Valuation Group / Valuator"
|
|
check "Author"
|
|
end
|
|
|
|
cookies = page.driver.browser.manage.all_cookies
|
|
columns_cookie = cookies.find { |cookie| cookie[:name] == "investments-columns" }
|
|
cookie_value = columns_cookie[:value]
|
|
|
|
expect(cookie_value).to eq("id,supports,admin,geozone," +
|
|
"feasibility,valuation_finished,visible_to_valuators,selected,incompatible,author")
|
|
|
|
visit admin_budget_budget_investments_path(budget)
|
|
|
|
cookies = page.driver.browser.manage.all_cookies
|
|
columns_cookie = cookies.find { |cookie| cookie[:name] == "investments-columns" }
|
|
cookie_value = columns_cookie[:value]
|
|
|
|
expect(cookie_value).to eq("id,supports,admin,geozone,feasibility,valuation_finished," +
|
|
"visible_to_valuators,selected,incompatible,author")
|
|
end
|
|
|
|
scenario "Select an investment when some columns are not displayed" do
|
|
investment.update!(title: "Don't display me, please!")
|
|
|
|
visit admin_budget_budget_investments_path(budget)
|
|
click_button "Columns"
|
|
within("#js-columns-selector-wrapper") { uncheck "Title" }
|
|
|
|
within("#budget_investment_#{investment.id}") do
|
|
click_link "Selected"
|
|
|
|
expect(page).to have_link "Select"
|
|
expect(page).not_to have_content "Don't display me, please!"
|
|
end
|
|
end
|
|
|
|
scenario "When restoring the page from browser history renders columns selectors only once" do
|
|
visit admin_budget_budget_investments_path(budget)
|
|
|
|
click_link "Proposals"
|
|
|
|
expect(page).to have_content("There are no proposals.")
|
|
|
|
go_back
|
|
|
|
click_button "Columns"
|
|
|
|
within("#js-columns-selector-wrapper") do
|
|
selectable_columns.each do |column|
|
|
check_text = I18n.t("admin.budget_investments.index.list.#{column}")
|
|
|
|
expect(page).to have_content(check_text, count: 1)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|