diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 0a934ac9e..d5e74ac11 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -63,4 +63,8 @@ module ApplicationHelper render custom_partial_path if lookup_context.exists?(custom_partial_path, [], true) end + def management_controller? + controller.class.to_s.include?("Management") + end + end diff --git a/app/views/budgets/investments/_investment.html.erb b/app/views/budgets/investments/_investment.html.erb index 96785717e..a1664bfbc 100644 --- a/app/views/budgets/investments/_investment.html.erb +++ b/app/views/budgets/investments/_investment.html.erb @@ -77,7 +77,7 @@ - <% elsif investment.should_show_ballots? %> + <% elsif investment.should_show_ballots? && !management_controller? %>
> diff --git a/spec/features/management/budget_investments_spec.rb b/spec/features/management/budget_investments_spec.rb index b1ef635d4..c482b6be7 100644 --- a/spec/features/management/budget_investments_spec.rb +++ b/spec/features/management/budget_investments_spec.rb @@ -2,12 +2,12 @@ require "rails_helper" feature "Budget Investments" do - background do - login_as_manager - @budget = create(:budget, phase: "selecting", name: "2033") - @group = create(:budget_group, budget: @budget, name: "Whole city") - @heading = create(:budget_heading, group: @group, name: "Health") - end + let(:manager) { create(:manager) } + let(:budget) { create(:budget, phase: "selecting", name: "2033") } + let(:group) { create(:budget_group, budget: budget, name: "Whole city") } + let(:heading) { create(:budget_heading, group: group, name: "Health") } + + before { login_as_manager(manager) } it_behaves_like "mappable", "budget_investment", @@ -19,7 +19,7 @@ feature "Budget Investments" do management = true context "Create" do - before { @budget.update(phase: "accepting") } + before { heading.budget.update(phase: "accepting") } scenario "Creating budget investments on behalf of someone, selecting a budget" do user = create(:user, :level_two) @@ -27,7 +27,7 @@ feature "Budget Investments" do login_managed_user(user) click_link "Create budget investment" - within "#budget_#{@budget.id}" do + within "#budget_#{budget.id}" do click_link "Create budget investment" end @@ -56,7 +56,7 @@ feature "Budget Investments" do 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) + expect(page).to have_content I18n.l(budget.created_at.to_date) end scenario "Should not allow unverified users to create budget investments" do @@ -72,15 +72,15 @@ feature "Budget Investments" do 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") + budget_investment1 = create(:budget_investment, budget: budget, title: "Show me what you got") + budget_investment2 = create(:budget_investment, budget: budget, title: "Get Schwifty") user = create(:user, :level_two) login_managed_user(user) click_link "Support budget investments" - expect(page).to have_content(@budget.name) - within "#budget_#{@budget.id}" do + expect(page).to have_content(budget.name) + within "#budget_#{budget.id}" do click_link "Support budget investments" end @@ -91,23 +91,24 @@ feature "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) - expect(page).to have_css("a[href='#{management_budget_investment_path(@budget, budget_investment1)}']", - text: budget_investment1.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", + 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", + budget_investment2 = create(:budget_investment, budget: budget, title: "Let's go", heading: create(:budget_heading, name: "Area 52")) user = create(:user, :level_two) login_managed_user(user) click_link "Support budget investments" - expect(page).to have_content(@budget.name) - within "#budget_#{@budget.id}" do + expect(page).to have_content(budget.name) + within "#budget_#{budget.id}" do click_link "Support budget investments" end @@ -118,22 +119,23 @@ feature "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) - expect(page).to have_css("a[href='#{management_budget_investment_path(@budget, budget_investment2)}']", - text: 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") + budget_investment1 = create(:budget_investment, budget: budget, title: "Show me what you got") + budget_investment2 = create(:budget_investment, budget: budget, title: "Get Schwifty") user = create(:user, :level_two) login_managed_user(user) click_link "Support budget investments" - expect(page).to have_content(@budget.name) - within "#budget_#{@budget.id}" do + expect(page).to have_content(budget.name) + within "#budget_#{budget.id}" do click_link "Support budget investments" end @@ -146,10 +148,12 @@ feature "Budget Investments" do within("#budget-investments") do expect(page).to have_css(".budget-investment", count: 2) - expect(page).to have_css("a[href='#{management_budget_investment_path(@budget, budget_investment1)}']", - text: budget_investment1.title) - expect(page).to have_css("a[href='#{management_budget_investment_path(@budget, budget_investment2)}']", - text: budget_investment2.title) + + 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 @@ -211,14 +215,14 @@ feature "Budget Investments" do context "Supporting" do scenario "Supporting budget investments on behalf of someone in index view", :js do - budget_investment = create(:budget_investment, budget: @budget, heading: @heading) + budget_investment = create(:budget_investment, budget: budget, heading: heading) user = create(:user, :level_two) login_managed_user(user) click_link "Support budget investments" - expect(page).to have_content(@budget.name) - within "#budget_#{@budget.id}" do + 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) @@ -233,14 +237,14 @@ feature "Budget Investments" do # This test passes ok locally but fails on the last two lines in Travis xscenario "Supporting budget investments on behalf of someone in show view", :js do - budget_investment = create(:budget_investment, budget: @budget) + budget_investment = create(:budget_investment, budget: budget) user = create(:user, :level_two) login_managed_user(user) click_link "Support budget investments" - expect(page).to have_content(@budget.name) - within "#budget_#{@budget.id}" do + expect(page).to have_content(budget.name) + within "#budget_#{budget.id}" do click_link "Support budget investments" end @@ -254,7 +258,7 @@ feature "Budget Investments" do end scenario "Should not allow unverified users to vote proposals" do - budget_investment = create(:budget_investment, budget: @budget) + create(:budget_investment, budget: budget) user = create(:user) login_managed_user(user) @@ -268,34 +272,66 @@ feature "Budget Investments" do context "Printing" do scenario "Printing budget investments" do - 16.times { create(:budget_investment, budget: @budget, heading: @heading) } + 16.times { create(:budget_investment, budget: budget, heading: heading) } click_link "Print budget investments" - expect(page).to have_content(@budget.name) - within "#budget_#{@budget.id}" do + 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_css("a[href='javascript:window.print();']", text: "Print") + 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) + ballot = create(:budget_ballot, user: create(:user, :level_two), budget: budget) + ballot.investments << voted_investment + + 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", :js 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") + 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") user = create(:user, :level_two) login_managed_user(user) click_link "Print budget investments" - expect(page).to have_content(@budget.name) - within "#budget_#{@budget.id}" do + expect(page).to have_content(budget.name) + within "#budget_#{budget.id}" do click_link "Print budget investments" end diff --git a/spec/support/common_actions/users.rb b/spec/support/common_actions/users.rb index 690bdbfdf..c5271273f 100644 --- a/spec/support/common_actions/users.rb +++ b/spec/support/common_actions/users.rb @@ -44,8 +44,7 @@ module Users visit new_officing_residence_path end - def login_as_manager - manager = create(:manager) + def login_as_manager(manager = create(:manager)) login_as(manager.user) visit management_sign_in_path end