Replaced 'login_as' with 'do_login_for' using 'management: management_section?' to
handle login requirements correctly for each context.
Also removed the now-unused 'documentable_fill_new_valid_budget_investment' helper
from common actions.
Note that it does not seem necessary to create an administrator with the user, as was
done in the original shared example. Also, as in the previous commit, it appears that
we do not need to set the user as the author when creating the documentable.
While reviewing this, we also noticed that the create(:administrator, user: user) call
was unnecessarily included in the nested_imageable system spec in commit cdfaec5217 when
the path is a management section. So we use this commit to remove the unnecessary condition.
518 lines
19 KiB
Ruby
518 lines
19 KiB
Ruby
require "rails_helper"
|
|
|
|
describe "Budget Investments" do
|
|
let(:manager) { create(:manager) }
|
|
let(:budget) { create(:budget, :selecting, name: "2033", slug: "budget_slug") }
|
|
let(:group) { create(:budget_group, budget: budget, name: "Whole city") }
|
|
let(:heading) { create(:budget_heading, group: group, name: "Health") }
|
|
let(:user) { create(:user, :level_two) }
|
|
|
|
it_behaves_like "mappable",
|
|
"budget_investment",
|
|
"investment",
|
|
"new_management_budget_investment_path",
|
|
"",
|
|
"management_budget_investment_path",
|
|
mappable_path_arguments: { budget_id: "budget_id" },
|
|
management: true
|
|
|
|
context "Load" do
|
|
let(:investment) { create(:budget_investment, budget: budget) }
|
|
|
|
scenario "finds investment using budget slug" do
|
|
login_managed_user(user)
|
|
login_as_manager(manager)
|
|
visit management_budget_investment_path("budget_slug", investment)
|
|
|
|
expect(page).to have_content investment.title
|
|
end
|
|
end
|
|
|
|
context "Create" do
|
|
before { heading.budget.update(phase: "accepting") }
|
|
|
|
scenario "Creating budget investments on behalf of someone, selecting a budget" do
|
|
login_managed_user(user)
|
|
login_as_manager(manager)
|
|
click_link "Create budget investment"
|
|
within "#budget_#{budget.id}" do
|
|
click_link "Create budget investment"
|
|
end
|
|
|
|
within(".account-info") do
|
|
expect(page).to have_content "Identified as"
|
|
expect(page).to have_content user.username
|
|
expect(page).to have_content user.email
|
|
expect(page).to have_content user.document_number
|
|
end
|
|
|
|
fill_in_new_investment_title with: "Build a park in my neighborhood"
|
|
fill_in_ckeditor "Description", with: "There is no parks here..."
|
|
fill_in "budget_investment_location", with: "City center"
|
|
fill_in "budget_investment_organization_name", with: "T.I.A."
|
|
fill_in "budget_investment_tag_list", with: "green"
|
|
|
|
click_button "Create Investment"
|
|
|
|
expect(page).to have_content "Budget Investment created successfully."
|
|
|
|
expect(page).to have_content "Health"
|
|
expect(page).to have_content "Build a park in my neighborhood"
|
|
expect(page).to have_content "There is no parks here..."
|
|
expect(page).to have_content "City center"
|
|
expect(page).to have_content "T.I.A."
|
|
expect(page).to have_content "green"
|
|
expect(page).to have_content user.name
|
|
expect(page).to have_content I18n.l(budget.created_at.to_date)
|
|
end
|
|
|
|
scenario "Should not allow unverified users to create budget investments" do
|
|
login_managed_user(create(:user))
|
|
|
|
login_as_manager(manager)
|
|
click_link "Create budget investment"
|
|
|
|
expect(page).to have_content "User is not verified"
|
|
end
|
|
|
|
scenario "Shows suggestions to unverified managers" do
|
|
login_managed_user(user)
|
|
|
|
expect(manager.user.level_two_or_three_verified?).to be false
|
|
|
|
create(:budget_investment, budget: budget, title: "More parks")
|
|
create(:budget_investment, budget: budget, title: "No more parks")
|
|
create(:budget_investment, budget: budget, title: "Plant trees")
|
|
|
|
login_as_manager(manager)
|
|
click_link "Create budget investment"
|
|
within "#budget_#{budget.id}" do
|
|
click_link "Create budget investment"
|
|
end
|
|
|
|
fill_in "Title", with: "Park"
|
|
fill_in_ckeditor "Description", with: "Wish I had one"
|
|
|
|
within(".js-suggest") do
|
|
expect(page).to have_content "More parks"
|
|
expect(page).to have_content "No more parks"
|
|
expect(page).not_to have_content "Plant trees"
|
|
end
|
|
end
|
|
|
|
scenario "when user has not been selected we can't create a budget investment" do
|
|
Setting["feature.user.skip_verification"] = "true"
|
|
login_as_manager(manager)
|
|
|
|
click_link "Create budget investment"
|
|
|
|
expect(page).to have_content "To perform this action you must select a user"
|
|
expect(page).to have_current_path management_document_verifications_path
|
|
end
|
|
end
|
|
|
|
context "Searching" do
|
|
scenario "by title" do
|
|
budget_investment1 = create(:budget_investment, budget: budget, title: "Show me what you got")
|
|
budget_investment2 = create(:budget_investment, budget: budget, title: "Get Schwifty")
|
|
|
|
login_managed_user(user)
|
|
login_as_manager(manager)
|
|
click_link "Support budget investments"
|
|
expect(page).to have_content(budget.name)
|
|
within "#budget_#{budget.id}" do
|
|
click_link "Support budget investments"
|
|
end
|
|
|
|
fill_in "Search investments", with: "what you got"
|
|
click_button "Search"
|
|
|
|
within("#budget-investments") do
|
|
expect(page).to have_css(".budget-investment", count: 1)
|
|
expect(page).to have_content(budget_investment1.title)
|
|
expect(page).not_to have_content(budget_investment2.title)
|
|
|
|
investment1_path = management_budget_investment_path(budget, budget_investment1)
|
|
expect(page).to have_link(budget_investment1.title, href: investment1_path)
|
|
end
|
|
end
|
|
|
|
scenario "by heading" do
|
|
budget_investment1 = create(:budget_investment, budget: budget, title: "Hey ho",
|
|
heading: create(:budget_heading, name: "District 9"))
|
|
budget_investment2 = create(:budget_investment, budget: budget, title: "Let's go",
|
|
heading: create(:budget_heading, name: "Area 52"))
|
|
|
|
login_managed_user(user)
|
|
login_as_manager(manager)
|
|
click_link "Support budget investments"
|
|
expect(page).to have_content(budget.name)
|
|
within "#budget_#{budget.id}" do
|
|
click_link "Support budget investments"
|
|
end
|
|
|
|
fill_in "Search investments", with: "Area 52"
|
|
click_button "Search"
|
|
|
|
within("#budget-investments") do
|
|
expect(page).to have_css(".budget-investment", count: 1)
|
|
expect(page).not_to have_content(budget_investment1.title)
|
|
expect(page).to have_content(budget_investment2.title)
|
|
|
|
investment2_path = management_budget_investment_path(budget, budget_investment2)
|
|
expect(page).to have_link(budget_investment2.title, href: investment2_path)
|
|
end
|
|
end
|
|
end
|
|
|
|
scenario "Listing" do
|
|
budget_investment1 = create(:budget_investment, budget: budget, title: "Show me what you got")
|
|
budget_investment2 = create(:budget_investment, budget: budget, title: "Get Schwifty")
|
|
|
|
login_managed_user(user)
|
|
login_as_manager(manager)
|
|
click_link "Support budget investments"
|
|
expect(page).to have_content(budget.name)
|
|
within "#budget_#{budget.id}" do
|
|
click_link "Support budget investments"
|
|
end
|
|
|
|
within(".account-info") do
|
|
expect(page).to have_content "Identified as"
|
|
expect(page).to have_content user.username
|
|
expect(page).to have_content user.email
|
|
expect(page).to have_content user.document_number
|
|
end
|
|
|
|
within("#budget-investments") do
|
|
expect(page).to have_css(".budget-investment", count: 2)
|
|
|
|
investment1_path = management_budget_investment_path(budget, budget_investment1)
|
|
expect(page).to have_link(budget_investment1.title, href: investment1_path)
|
|
|
|
investment2_path = management_budget_investment_path(budget, budget_investment2)
|
|
expect(page).to have_link(budget_investment2.title, href: investment2_path)
|
|
end
|
|
end
|
|
|
|
scenario "Listing - managers can see budgets in accepting phase" do
|
|
accepting_budget = create(:budget, :accepting)
|
|
reviewing_budget = create(:budget, :reviewing)
|
|
selecting_budget = create(:budget, :selecting)
|
|
valuating_budget = create(:budget, :valuating)
|
|
balloting_budget = create(:budget, :balloting)
|
|
reviewing_ballots_budget = create(:budget, :reviewing_ballots)
|
|
finished = create(:budget, :finished)
|
|
|
|
login_managed_user(user)
|
|
login_as_manager(manager)
|
|
click_link "Create budget investment"
|
|
|
|
expect(page).to have_content(accepting_budget.name)
|
|
|
|
expect(page).not_to have_content(reviewing_budget.name)
|
|
expect(page).not_to have_content(selecting_budget.name)
|
|
expect(page).not_to have_content(valuating_budget.name)
|
|
expect(page).not_to have_content(balloting_budget.name)
|
|
expect(page).not_to have_content(reviewing_ballots_budget.name)
|
|
expect(page).not_to have_content(finished.name)
|
|
end
|
|
|
|
scenario "Listing - admins can see budgets in accepting, reviewing and selecting phases" do
|
|
accepting_budget = create(:budget, :accepting)
|
|
reviewing_budget = create(:budget, :reviewing)
|
|
selecting_budget = create(:budget, :selecting)
|
|
valuating_budget = create(:budget, :valuating)
|
|
balloting_budget = create(:budget, :balloting)
|
|
reviewing_ballots_budget = create(:budget, :reviewing_ballots)
|
|
finished = create(:budget, :finished)
|
|
|
|
login_managed_user(user)
|
|
login_as(create(:administrator).user)
|
|
|
|
visit management_sign_in_path
|
|
|
|
click_link "Create budget investment"
|
|
|
|
expect(page).to have_content(accepting_budget.name)
|
|
expect(page).to have_content(reviewing_budget.name)
|
|
expect(page).to have_content(selecting_budget.name)
|
|
|
|
expect(page).not_to have_content(valuating_budget.name)
|
|
expect(page).not_to have_content(balloting_budget.name)
|
|
expect(page).not_to have_content(reviewing_ballots_budget.name)
|
|
expect(page).not_to have_content(finished.name)
|
|
end
|
|
|
|
context "Supporting" do
|
|
scenario "Supporting budget investments on behalf of someone in index view" do
|
|
budget_investment = create(:budget_investment, heading: heading)
|
|
|
|
login_managed_user(user)
|
|
login_as_manager(manager)
|
|
click_link "Support budget investments"
|
|
expect(page).to have_content(budget.name)
|
|
within "#budget_#{budget.id}" do
|
|
click_link "Support budget investments"
|
|
end
|
|
expect(page).to have_content(budget_investment.title)
|
|
|
|
within("#budget-investments") do
|
|
click_button "Support"
|
|
|
|
expect(page).to have_content "1 support"
|
|
expect(page).to have_content "You have already supported this investment project. Share it!"
|
|
end
|
|
end
|
|
|
|
scenario "Supporting budget investments on behalf of someone in show view" do
|
|
budget_investment = create(:budget_investment, budget: budget)
|
|
manager.user.update!(level_two_verified_at: Time.current)
|
|
|
|
login_managed_user(user)
|
|
login_as_manager(manager)
|
|
click_link "Support budget investments"
|
|
expect(page).to have_content(budget.name)
|
|
within "#budget_#{budget.id}" do
|
|
click_link "Support budget investments"
|
|
end
|
|
|
|
within("#budget-investments") do
|
|
click_link budget_investment.title
|
|
end
|
|
|
|
expect(page).to have_css "h1", exact_text: budget_investment.title
|
|
|
|
click_button "Support"
|
|
|
|
expect(page).to have_content "1 support"
|
|
expect(page).to have_content "You have already supported this investment project. Share it!"
|
|
|
|
refresh
|
|
|
|
expect(page).to have_content "1 support"
|
|
expect(page).to have_content "You have already supported this investment project. Share it!"
|
|
end
|
|
|
|
scenario "Support investments on behalf of someone else when there are more headings" do
|
|
Setting["org_name"] = "CONSUL"
|
|
|
|
create(:budget_investment, heading: heading, title: "Default heading investment")
|
|
create(:budget_investment, heading: create(:budget_heading, group: group))
|
|
|
|
login_managed_user(user)
|
|
login_as_manager(manager)
|
|
|
|
visit management_budget_investments_path(budget)
|
|
click_link "Default heading investment"
|
|
|
|
expect(page).to have_css "h1", exact_text: "Default heading investment"
|
|
|
|
accept_confirm { click_button "Support" }
|
|
|
|
expect(page).to have_content "1 support"
|
|
expect(page).to have_content "You have already supported this investment project. Share it!"
|
|
expect(page).to have_content "Investment supported successfully"
|
|
expect(page).to have_content "CONSUL\nMANAGEMENT"
|
|
end
|
|
|
|
scenario "Remove support on behalf of someone else in index view" do
|
|
Setting["feature.remove_investments_supports"] = true
|
|
create(:budget_investment, heading: heading)
|
|
|
|
login_managed_user(user)
|
|
login_as_manager(manager)
|
|
|
|
visit management_budget_investments_path(budget)
|
|
click_button "Support"
|
|
|
|
expect(page).to have_content "1 support"
|
|
expect(page).to have_content "You have already supported this investment project. Share it!"
|
|
expect(page).not_to have_button "Support"
|
|
|
|
click_button "Remove your support"
|
|
|
|
expect(page).to have_content "No supports"
|
|
expect(page).to have_button "Support"
|
|
expect(page).not_to have_button "Remove your support"
|
|
end
|
|
|
|
scenario "Remove support on behalf of someone else in show view" do
|
|
Setting["feature.remove_investments_supports"] = true
|
|
create(:budget_investment, heading: heading, title: "Don't support me!")
|
|
|
|
login_managed_user(user)
|
|
login_as_manager(manager)
|
|
|
|
visit management_budget_investments_path(budget)
|
|
click_link "Don't support me!"
|
|
|
|
expect(page).to have_css "h1", exact_text: "Don't support me!"
|
|
|
|
click_button "Support"
|
|
|
|
expect(page).to have_content "1 support"
|
|
expect(page).to have_content "You have already supported this investment project. Share it!"
|
|
expect(page).not_to have_button "Support"
|
|
|
|
click_button "Remove your support"
|
|
|
|
expect(page).to have_content "No supports"
|
|
expect(page).to have_button "Support"
|
|
expect(page).not_to have_button "Remove your support"
|
|
|
|
refresh
|
|
|
|
expect(page).to have_content "No supports"
|
|
expect(page).to have_button "Support"
|
|
expect(page).not_to have_button "Remove your support"
|
|
end
|
|
|
|
scenario "Should not allow unverified users to vote proposals" do
|
|
login_managed_user(create(:user))
|
|
create(:budget_investment, budget: budget)
|
|
|
|
login_as_manager(manager)
|
|
click_link "Support budget investments"
|
|
|
|
expect(page).to have_content "User is not verified"
|
|
end
|
|
|
|
scenario "when user has not been selected we can't support budget investments" do
|
|
Setting["feature.user.skip_verification"] = "true"
|
|
login_as_manager(manager)
|
|
|
|
click_link "Support budget investments"
|
|
|
|
expect(page).to have_content "To perform this action you must select a user"
|
|
expect(page).to have_current_path management_document_verifications_path
|
|
end
|
|
end
|
|
|
|
context "Printing" do
|
|
scenario "Shows all published budgets, last created first" do
|
|
finished_budget = create(:budget, :finished)
|
|
accepting_budget = create(:budget)
|
|
draft_budget = create(:budget, published: false)
|
|
login_as_manager(manager)
|
|
|
|
click_link "Print budget investments"
|
|
|
|
within "#budget_#{accepting_budget.id}" do
|
|
expect(page).to have_link("Print budget investments")
|
|
end
|
|
within "#budget_#{finished_budget.id}" do
|
|
expect(page).to have_link("Print budget investments")
|
|
end
|
|
expect(page).not_to have_content draft_budget.name
|
|
expect(accepting_budget.name).to appear_before(finished_budget.name)
|
|
end
|
|
|
|
scenario "Shows a message when there are no budgets to show" do
|
|
login_as_manager(manager)
|
|
|
|
click_link "Print budget investments"
|
|
|
|
expect(page).to have_content("There are no active participatory budgets.")
|
|
end
|
|
|
|
scenario "Show pagination when needed" do
|
|
allow(Budget).to receive(:default_per_page).and_return(1)
|
|
create(:budget, name: "Children")
|
|
create(:budget, name: "Sports")
|
|
login_as_manager(manager)
|
|
click_link "Print budget investments"
|
|
|
|
expect(page).to have_content("Sports")
|
|
|
|
within("ul.pagination") do
|
|
expect(page).to have_content("1")
|
|
expect(page).to have_link("2", href: print_investments_management_budgets_path(page: "2"))
|
|
expect(page).not_to have_content("3")
|
|
click_link "Next", exact: false
|
|
end
|
|
|
|
expect(page).to have_content("Children")
|
|
end
|
|
|
|
scenario "Printing budget investments" do
|
|
16.times { create(:budget_investment, heading: heading) }
|
|
|
|
login_as_manager(manager)
|
|
click_link "Print budget investments"
|
|
|
|
expect(page).to have_content(budget.name)
|
|
within "#budget_#{budget.id}" do
|
|
click_link "Print budget investments"
|
|
end
|
|
|
|
expect(page).to have_css(".budget-investment", count: 15)
|
|
expect(page).to have_link("Print", href: "javascript:window.print();")
|
|
end
|
|
|
|
scenario "Printing voted budget investments in balloting phase" do
|
|
budget.update!(phase: "balloting")
|
|
|
|
voted_investment = create(:budget_investment, :selected, heading: heading, balloters: [create(:user)])
|
|
|
|
login_as_manager(manager)
|
|
click_link "Print budget investments"
|
|
|
|
within "#budget_#{budget.id}" do
|
|
click_link "Print budget investments"
|
|
end
|
|
|
|
expect(page).to have_content voted_investment.title
|
|
expect(page).to have_link("Print", href: "javascript:window.print();")
|
|
end
|
|
|
|
scenario "Filtering budget investments by heading to be printed" do
|
|
district_9 = create(:budget_heading, group: group, name: "District Nine")
|
|
another_heading = create(:budget_heading, group: group)
|
|
low_investment = create(:budget_investment,
|
|
budget: budget,
|
|
title: "Nuke district 9",
|
|
heading: district_9,
|
|
cached_votes_up: 1)
|
|
mid_investment = create(:budget_investment,
|
|
budget: budget,
|
|
title: "Change district 9",
|
|
heading: district_9,
|
|
cached_votes_up: 10)
|
|
top_investment = create(:budget_investment,
|
|
budget: budget,
|
|
title: "Destroy district 9",
|
|
heading: district_9,
|
|
cached_votes_up: 100)
|
|
unvoted_investment = create(:budget_investment,
|
|
budget: budget,
|
|
heading: another_heading,
|
|
title: "Add new districts to the city")
|
|
|
|
login_as_manager(manager)
|
|
click_link "Print budget investments"
|
|
|
|
expect(page).to have_content(budget.name)
|
|
within "#budget_#{budget.id}" do
|
|
click_link "Print budget investments"
|
|
end
|
|
|
|
within "#budget-investments" do
|
|
expect(page).to have_content(unvoted_investment.title)
|
|
expect(page).to have_content(mid_investment.title)
|
|
expect(page).to have_content(top_investment.title)
|
|
expect(page).to have_content(low_investment.title)
|
|
end
|
|
|
|
select "District Nine", from: "Heading"
|
|
click_button "Search"
|
|
|
|
within "#budget-investments" do
|
|
expect(page).not_to have_content(unvoted_investment.title)
|
|
expect(top_investment.title).to appear_before(mid_investment.title)
|
|
expect(mid_investment.title).to appear_before(low_investment.title)
|
|
end
|
|
end
|
|
end
|
|
end
|