diff --git a/spec/factories/budgets.rb b/spec/factories/budgets.rb index 9e2bd1e89..83751bf75 100644 --- a/spec/factories/budgets.rb +++ b/spec/factories/budgets.rb @@ -187,11 +187,15 @@ FactoryBot.define do transient do voters { [] } followers { [] } + balloters { [] } end after(:create) do |investment, evaluator| evaluator.voters.each { |voter| create(:vote, votable: investment, voter: voter) } evaluator.followers.each { |follower| create(:follow, followable: investment, user: follower) } + evaluator.balloters.each do |balloter| + create(:budget_ballot_line, investment: investment, user: balloter) + end end end diff --git a/spec/factories/users.rb b/spec/factories/users.rb index 748d8f23f..c6a824f48 100644 --- a/spec/factories/users.rb +++ b/spec/factories/users.rb @@ -67,11 +67,20 @@ FactoryBot.define do transient do votables { [] } followables { [] } + ballot_lines { [] } end after(:create) do |user, evaluator| evaluator.votables.each { |votable| create(:vote, votable: votable, voter: user) } evaluator.followables.each { |followable| create(:follow, followable: followable, user: user) } + + if evaluator.ballot_lines.any? + ballot = create(:budget_ballot, budget: evaluator.ballot_lines.first.budget.reload, user: user) + + evaluator.ballot_lines.each do |investment| + create(:budget_ballot_line, investment: investment, ballot: ballot) + end + end end end diff --git a/spec/features/admin/stats_spec.rb b/spec/features/admin/stats_spec.rb index a6e49fbcd..5bccc9abd 100644 --- a/spec/features/admin/stats_spec.rb +++ b/spec/features/admin/stats_spec.rb @@ -200,16 +200,10 @@ describe "Stats" do end scenario "Number of votes in investment projects" do - ballot_1 = create(:budget_ballot, budget: @budget) - ballot_2 = create(:budget_ballot, budget: @budget) + investment_2 = create(:budget_investment, :feasible, :selected, budget: @budget) - group_2 = create(:budget_group, budget: @budget) - heading_2 = create(:budget_heading, group: group_2) - investment_2 = create(:budget_investment, :feasible, :selected, heading: heading_2) - - create(:budget_ballot_line, ballot: ballot_1, investment: @investment) - create(:budget_ballot_line, ballot: ballot_1, investment: investment_2) - create(:budget_ballot_line, ballot: ballot_2, investment: investment_2) + create(:user, ballot_lines: [@investment, investment_2]) + create(:user, ballot_lines: [investment_2]) visit admin_stats_path click_link "Participatory Budgets" @@ -221,16 +215,9 @@ describe "Stats" do end scenario "Number of users that have voted a investment project" do - user_1 = create(:user, :level_two) - user_2 = create(:user, :level_two) - user_3 = create(:user, :level_two) - - ballot_1 = create(:budget_ballot, budget: @budget, user: user_1) - ballot_2 = create(:budget_ballot, budget: @budget, user: user_2) - ballot_3 = create(:budget_ballot, budget: @budget, user: user_3) - - create(:budget_ballot_line, ballot: ballot_1, investment: @investment) - create(:budget_ballot_line, ballot: ballot_2, investment: @investment) + create(:user, ballot_lines: [@investment]) + create(:user, ballot_lines: [@investment]) + create(:user) visit admin_stats_path click_link "Participatory Budgets" diff --git a/spec/features/budgets/ballots_spec.rb b/spec/features/budgets/ballots_spec.rb index af6389666..34ef8d517 100644 --- a/spec/features/budgets/ballots_spec.rb +++ b/spec/features/budgets/ballots_spec.rb @@ -2,19 +2,19 @@ require "rails_helper" describe "Ballots" do - let!(:user) { create(:user, :level_two) } + let(:user) { create(:user, :level_two) } let!(:budget) { create(:budget, :balloting) } let!(:states) { create(:budget_group, budget: budget, name: "States") } let!(:california) { create(:budget_heading, group: states, name: "California", price: 1000) } let!(:new_york) { create(:budget_heading, group: states, name: "New York", price: 1000000) } context "Load" do - - let(:ballot) { create(:budget_ballot, user: user, budget: budget) } + let(:user) do + create(:user, :level_two, ballot_lines: [create(:budget_investment, :selected, heading: california)]) + end before do budget.update(slug: "budget_slug") - ballot.investments << create(:budget_investment, :selected, heading: california) login_as(user) end @@ -43,7 +43,6 @@ describe "Ballots" do let!(:investment) { create(:budget_investment, :selected, heading: california) } before do - create(:budget_ballot, user: user, budget: budget) budget.update(slug: "budget_slug") login_as(user) end @@ -179,9 +178,7 @@ describe "Ballots" do end scenario "Removing a investment", :js do - investment = create(:budget_investment, :selected, heading: new_york, price: 10000) - ballot = create(:budget_ballot, user: user, budget: budget) - ballot.investments << investment + investment = create(:budget_investment, :selected, heading: new_york, price: 10000, balloters: [user]) visit budget_path(budget) click_link "States" @@ -343,12 +340,9 @@ describe "Ballots" do end scenario "Change my heading", :js do - investment1 = create(:budget_investment, :selected, heading: california) + investment1 = create(:budget_investment, :selected, heading: california, balloters: [user]) investment2 = create(:budget_investment, :selected, heading: new_york) - ballot = create(:budget_ballot, user: user, budget: budget) - ballot.investments << investment1 - visit budget_investments_path(budget, heading_id: california.id) within("#budget_investment_#{investment1.id}") do @@ -367,10 +361,7 @@ describe "Ballots" do end scenario "View another heading" do - investment = create(:budget_investment, :selected, heading: california) - - ballot = create(:budget_ballot, user: user, budget: budget) - ballot.investments << investment + create(:budget_investment, :selected, heading: california, balloters: [user]) visit budget_investments_path(budget, heading_id: new_york.id) @@ -407,9 +398,8 @@ describe "Ballots" do investment4 = create(:budget_investment, :selected, price: 5, heading: heading2) investment5 = create(:budget_investment, :selected, price: 5, heading: heading2) - ballot = create(:budget_ballot, user: user, budget: budget) - - ballot.investments << investment1 << investment2 << investment3 << investment4 << investment5 + user = create(:user, :level_two, + ballot_lines: [investment1, investment2, investment3, investment4, investment5]) login_as(user) visit budget_ballot_path(budget) @@ -442,8 +432,7 @@ describe "Ballots" do scenario "Removing investments from ballot", :js do investment = create(:budget_investment, :selected, price: 10, heading: new_york) - ballot = create(:budget_ballot, user: user, budget: budget) - ballot.investments << investment + user = create(:user, :level_two, ballot_lines: [investment]) login_as(user) visit budget_ballot_path(budget) @@ -461,9 +450,7 @@ describe "Ballots" do scenario "Removing investments from ballot (sidebar)", :js do investment1 = create(:budget_investment, :selected, price: 10000, heading: new_york) investment2 = create(:budget_investment, :selected, price: 20000, heading: new_york) - - ballot = create(:budget_ballot, budget: budget, user: user) - ballot.investments << investment1 << investment2 + user = create(:user, :level_two, ballot_lines: [investment1, investment2]) login_as(user) visit budget_investments_path(budget, heading_id: new_york.id) @@ -588,9 +575,7 @@ describe "Ballots" do scenario "Different district", :js do bi1 = create(:budget_investment, :selected, heading: california) bi2 = create(:budget_investment, :selected, heading: new_york) - - ballot = create(:budget_ballot, budget: budget, user: user) - ballot.investments << bi1 + user = create(:user, :level_two, ballot_lines: [bi1]) login_as(user) visit budget_investments_path(budget, heading: new_york) @@ -605,9 +590,7 @@ describe "Ballots" do scenario "Insufficient funds (on page load)", :js do bi1 = create(:budget_investment, :selected, heading: california, price: 600) bi2 = create(:budget_investment, :selected, heading: california, price: 500) - - ballot = create(:budget_ballot, budget: budget, user: user) - ballot.investments << bi1 + user = create(:user, :level_two, ballot_lines: [bi1]) login_as(user) visit budget_investments_path(budget, heading_id: california.id) @@ -645,9 +628,7 @@ describe "Ballots" do scenario "Insufficient funds (removed after destroy)", :js do bi1 = create(:budget_investment, :selected, heading: california, price: 600) bi2 = create(:budget_investment, :selected, heading: california, price: 500) - - ballot = create(:budget_ballot, budget: budget, user: user) - ballot.investments << bi1 + user = create(:user, :level_two, ballot_lines: [bi1]) login_as(user) visit budget_investments_path(budget, heading_id: california.id) @@ -673,9 +654,7 @@ describe "Ballots" do scenario "Insufficient funds (removed after destroying from sidebar)", :js do bi1 = create(:budget_investment, :selected, heading: california, price: 600) bi2 = create(:budget_investment, :selected, heading: california, price: 500) - - ballot = create(:budget_ballot, budget: budget, user: user) - ballot.investments << bi1 + user = create(:user, :level_two, ballot_lines: [bi1]) login_as(user) visit budget_investments_path(budget, heading_id: california.id) diff --git a/spec/features/budgets/investments_spec.rb b/spec/features/budgets/investments_spec.rb index f335ffafe..af5a13756 100644 --- a/spec/features/budgets/investments_spec.rb +++ b/spec/features/budgets/investments_spec.rb @@ -1715,13 +1715,10 @@ describe "Budget Investments" do describe "Reclassification" do scenario "Due to heading change" do - user = create(:user, :level_two) investment = create(:budget_investment, :selected, heading: heading) + user = create(:user, :level_two, ballot_lines: [investment]) heading2 = create(:budget_heading, group: group) - ballot = create(:budget_ballot, user: user, budget: budget) - ballot.investments << investment - login_as(user) visit budget_ballot_path(budget) @@ -1736,11 +1733,8 @@ describe "Budget Investments" do end scenario "Due to being unfeasible" do - user = create(:user, :level_two) investment = create(:budget_investment, :selected, heading: heading) - - ballot = create(:budget_ballot, user: user, budget: budget) - ballot.investments << investment + user = create(:user, :level_two, ballot_lines: [investment]) login_as(user) visit budget_ballot_path(budget) diff --git a/spec/features/management/budget_investments_spec.rb b/spec/features/management/budget_investments_spec.rb index e8c52633d..f72889276 100644 --- a/spec/features/management/budget_investments_spec.rb +++ b/spec/features/management/budget_investments_spec.rb @@ -338,9 +338,7 @@ describe "Budget Investments" do 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 + voted_investment = create(:budget_investment, :selected, heading: heading, balloters: [create(:user)]) click_link "Print budget investments" diff --git a/spec/models/budget/investment_spec.rb b/spec/models/budget/investment_spec.rb index e03d030c1..aa7ae9845 100644 --- a/spec/models/budget/investment_spec.rb +++ b/spec/models/budget/investment_spec.rb @@ -1060,10 +1060,7 @@ describe Budget::Investment do it "stores the votes for a reclassified investment" do investment = create(:budget_investment, :selected, heading: heading1) - 3.times do - ballot = create(:budget_ballot, budget: budget) - ballot.investments << investment - end + 3.times { create(:user, ballot_lines: [investment]) } expect(investment.ballot_lines_count).to eq(3) @@ -1084,10 +1081,7 @@ describe Budget::Investment do it "removes votes from invesment" do investment = create(:budget_investment, :selected, heading: heading1) - 3.times do - ballot = create(:budget_ballot, budget: budget) - ballot.investments << investment - end + 3.times { create(:user, ballot_lines: [investment]) } expect(investment.ballot_lines_count).to eq(3) @@ -1105,10 +1099,7 @@ describe Budget::Investment do it "stores reclassfied votes and removes actual votes if an investment has been reclassified" do investment = create(:budget_investment, :selected, heading: heading1) - 3.times do - ballot = create(:budget_ballot, budget: budget) - ballot.investments << investment - end + 3.times { create(:user, ballot_lines: [investment]) } expect(investment.ballot_lines_count).to eq(3) @@ -1123,10 +1114,7 @@ describe Budget::Investment do it "does not store reclassified votes nor remove actual votes if the investment has not been reclassifed" do investment = create(:budget_investment, :selected, heading: heading1) - 3.times do - ballot = create(:budget_ballot, budget: budget) - ballot.investments << investment - end + 3.times { create(:user, ballot_lines: [investment]) } expect(investment.ballot_lines_count).to eq(3) diff --git a/spec/models/budget/stats_spec.rb b/spec/models/budget/stats_spec.rb index c651da02d..93c831d7a 100644 --- a/spec/models/budget/stats_spec.rb +++ b/spec/models/budget/stats_spec.rb @@ -9,17 +9,14 @@ describe Budget::Stats do let!(:author) { investment.author } let!(:author_and_voter) { create(:user, :hidden, votables: [investment]) } let!(:voter) { create(:user, votables: [investment]) } - let!(:voter_and_balloter) { create(:user, votables: [investment]) } - let!(:balloter) { create(:user, :hidden) } + let!(:voter_and_balloter) { create(:user, votables: [investment], ballot_lines: [investment]) } + let!(:balloter) { create(:user, :hidden, ballot_lines: [investment]) } let!(:poll_balloter) { create(:user, :level_two) } let!(:non_participant) { create(:user, :level_two) } before do create(:budget_investment, :selected, budget: budget, author: author_and_voter) - create(:budget_ballot_line, investment: investment, user: balloter) - create(:budget_ballot_line, investment: investment, user: voter_and_balloter) - create(:poll_voter, :from_booth, user: poll_balloter, budget: budget) create(:poll_voter, :from_booth, user: non_participant, budget: create(:budget)) @@ -42,8 +39,7 @@ describe Budget::Stats do end it "counts a user who is voter and balloter" do - voter_and_balloter = create(:user, votables: [investment]) - create(:budget_ballot_line, investment: investment, user: voter_and_balloter) + create(:user, votables: [investment], ballot_lines: [investment]) expect(stats.total_participants_support_phase).to be 1 end @@ -58,8 +54,7 @@ describe Budget::Stats do end it "counts a user who is voter and balloter" do - voter_and_balloter = create(:user, votables: [investment]) - create(:budget_ballot_line, investment: investment, user: voter_and_balloter) + create(:user, votables: [investment], ballot_lines: [investment]) expect(stats.total_participants_vote_phase).to be 1 end @@ -72,8 +67,7 @@ describe Budget::Stats do end it "counts once a user who is balloter and poll balloter" do - poller_and_balloter = create(:user, :level_two) - create(:budget_ballot_line, investment: investment, user: poller_and_balloter) + poller_and_balloter = create(:user, :level_two, ballot_lines: [investment]) create(:poll_voter, :from_booth, user: poller_and_balloter, budget: budget) expect(stats.total_participants_vote_phase).to be 1