Simplify creating ballot lines in specs

This commit is contained in:
Javi Martín
2019-09-27 02:56:08 +02:00
parent 5ff1162038
commit 71c24f844d
8 changed files with 46 additions and 93 deletions

View File

@@ -187,11 +187,15 @@ FactoryBot.define do
transient do transient do
voters { [] } voters { [] }
followers { [] } followers { [] }
balloters { [] }
end end
after(:create) do |investment, evaluator| after(:create) do |investment, evaluator|
evaluator.voters.each { |voter| create(:vote, votable: investment, voter: voter) } evaluator.voters.each { |voter| create(:vote, votable: investment, voter: voter) }
evaluator.followers.each { |follower| create(:follow, followable: investment, user: follower) } 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
end end

View File

@@ -67,11 +67,20 @@ FactoryBot.define do
transient do transient do
votables { [] } votables { [] }
followables { [] } followables { [] }
ballot_lines { [] }
end end
after(:create) do |user, evaluator| after(:create) do |user, evaluator|
evaluator.votables.each { |votable| create(:vote, votable: votable, voter: user) } evaluator.votables.each { |votable| create(:vote, votable: votable, voter: user) }
evaluator.followables.each { |followable| create(:follow, followable: followable, user: 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
end end

View File

@@ -200,16 +200,10 @@ describe "Stats" do
end end
scenario "Number of votes in investment projects" do scenario "Number of votes in investment projects" do
ballot_1 = create(:budget_ballot, budget: @budget) investment_2 = create(:budget_investment, :feasible, :selected, budget: @budget)
ballot_2 = create(:budget_ballot, budget: @budget)
group_2 = create(:budget_group, budget: @budget) create(:user, ballot_lines: [@investment, investment_2])
heading_2 = create(:budget_heading, group: group_2) create(:user, ballot_lines: [investment_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)
visit admin_stats_path visit admin_stats_path
click_link "Participatory Budgets" click_link "Participatory Budgets"
@@ -221,16 +215,9 @@ describe "Stats" do
end end
scenario "Number of users that have voted a investment project" do scenario "Number of users that have voted a investment project" do
user_1 = create(:user, :level_two) create(:user, ballot_lines: [@investment])
user_2 = create(:user, :level_two) create(:user, ballot_lines: [@investment])
user_3 = create(:user, :level_two) create(:user)
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)
visit admin_stats_path visit admin_stats_path
click_link "Participatory Budgets" click_link "Participatory Budgets"

View File

@@ -2,19 +2,19 @@ require "rails_helper"
describe "Ballots" do describe "Ballots" do
let!(:user) { create(:user, :level_two) } let(:user) { create(:user, :level_two) }
let!(:budget) { create(:budget, :balloting) } let!(:budget) { create(:budget, :balloting) }
let!(:states) { create(:budget_group, budget: budget, name: "States") } let!(:states) { create(:budget_group, budget: budget, name: "States") }
let!(:california) { create(:budget_heading, group: states, name: "California", price: 1000) } let!(:california) { create(:budget_heading, group: states, name: "California", price: 1000) }
let!(:new_york) { create(:budget_heading, group: states, name: "New York", price: 1000000) } let!(:new_york) { create(:budget_heading, group: states, name: "New York", price: 1000000) }
context "Load" do context "Load" do
let(:user) do
let(:ballot) { create(:budget_ballot, user: user, budget: budget) } create(:user, :level_two, ballot_lines: [create(:budget_investment, :selected, heading: california)])
end
before do before do
budget.update(slug: "budget_slug") budget.update(slug: "budget_slug")
ballot.investments << create(:budget_investment, :selected, heading: california)
login_as(user) login_as(user)
end end
@@ -43,7 +43,6 @@ describe "Ballots" do
let!(:investment) { create(:budget_investment, :selected, heading: california) } let!(:investment) { create(:budget_investment, :selected, heading: california) }
before do before do
create(:budget_ballot, user: user, budget: budget)
budget.update(slug: "budget_slug") budget.update(slug: "budget_slug")
login_as(user) login_as(user)
end end
@@ -179,9 +178,7 @@ describe "Ballots" do
end end
scenario "Removing a investment", :js do scenario "Removing a investment", :js do
investment = create(:budget_investment, :selected, heading: new_york, price: 10000) investment = create(:budget_investment, :selected, heading: new_york, price: 10000, balloters: [user])
ballot = create(:budget_ballot, user: user, budget: budget)
ballot.investments << investment
visit budget_path(budget) visit budget_path(budget)
click_link "States" click_link "States"
@@ -343,12 +340,9 @@ describe "Ballots" do
end end
scenario "Change my heading", :js do 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) 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) visit budget_investments_path(budget, heading_id: california.id)
within("#budget_investment_#{investment1.id}") do within("#budget_investment_#{investment1.id}") do
@@ -367,10 +361,7 @@ describe "Ballots" do
end end
scenario "View another heading" do scenario "View another heading" do
investment = create(:budget_investment, :selected, heading: california) create(:budget_investment, :selected, heading: california, balloters: [user])
ballot = create(:budget_ballot, user: user, budget: budget)
ballot.investments << investment
visit budget_investments_path(budget, heading_id: new_york.id) 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) investment4 = create(:budget_investment, :selected, price: 5, heading: heading2)
investment5 = 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) user = create(:user, :level_two,
ballot_lines: [investment1, investment2, investment3, investment4, investment5])
ballot.investments << investment1 << investment2 << investment3 << investment4 << investment5
login_as(user) login_as(user)
visit budget_ballot_path(budget) visit budget_ballot_path(budget)
@@ -442,8 +432,7 @@ describe "Ballots" do
scenario "Removing investments from ballot", :js do scenario "Removing investments from ballot", :js do
investment = create(:budget_investment, :selected, price: 10, heading: new_york) investment = create(:budget_investment, :selected, price: 10, heading: new_york)
ballot = create(:budget_ballot, user: user, budget: budget) user = create(:user, :level_two, ballot_lines: [investment])
ballot.investments << investment
login_as(user) login_as(user)
visit budget_ballot_path(budget) visit budget_ballot_path(budget)
@@ -461,9 +450,7 @@ describe "Ballots" do
scenario "Removing investments from ballot (sidebar)", :js do scenario "Removing investments from ballot (sidebar)", :js do
investment1 = create(:budget_investment, :selected, price: 10000, heading: new_york) investment1 = create(:budget_investment, :selected, price: 10000, heading: new_york)
investment2 = create(:budget_investment, :selected, price: 20000, heading: new_york) investment2 = create(:budget_investment, :selected, price: 20000, heading: new_york)
user = create(:user, :level_two, ballot_lines: [investment1, investment2])
ballot = create(:budget_ballot, budget: budget, user: user)
ballot.investments << investment1 << investment2
login_as(user) login_as(user)
visit budget_investments_path(budget, heading_id: new_york.id) visit budget_investments_path(budget, heading_id: new_york.id)
@@ -588,9 +575,7 @@ describe "Ballots" do
scenario "Different district", :js do scenario "Different district", :js do
bi1 = create(:budget_investment, :selected, heading: california) bi1 = create(:budget_investment, :selected, heading: california)
bi2 = create(:budget_investment, :selected, heading: new_york) bi2 = create(:budget_investment, :selected, heading: new_york)
user = create(:user, :level_two, ballot_lines: [bi1])
ballot = create(:budget_ballot, budget: budget, user: user)
ballot.investments << bi1
login_as(user) login_as(user)
visit budget_investments_path(budget, heading: new_york) visit budget_investments_path(budget, heading: new_york)
@@ -605,9 +590,7 @@ describe "Ballots" do
scenario "Insufficient funds (on page load)", :js do scenario "Insufficient funds (on page load)", :js do
bi1 = create(:budget_investment, :selected, heading: california, price: 600) bi1 = create(:budget_investment, :selected, heading: california, price: 600)
bi2 = create(:budget_investment, :selected, heading: california, price: 500) bi2 = create(:budget_investment, :selected, heading: california, price: 500)
user = create(:user, :level_two, ballot_lines: [bi1])
ballot = create(:budget_ballot, budget: budget, user: user)
ballot.investments << bi1
login_as(user) login_as(user)
visit budget_investments_path(budget, heading_id: california.id) visit budget_investments_path(budget, heading_id: california.id)
@@ -645,9 +628,7 @@ describe "Ballots" do
scenario "Insufficient funds (removed after destroy)", :js do scenario "Insufficient funds (removed after destroy)", :js do
bi1 = create(:budget_investment, :selected, heading: california, price: 600) bi1 = create(:budget_investment, :selected, heading: california, price: 600)
bi2 = create(:budget_investment, :selected, heading: california, price: 500) bi2 = create(:budget_investment, :selected, heading: california, price: 500)
user = create(:user, :level_two, ballot_lines: [bi1])
ballot = create(:budget_ballot, budget: budget, user: user)
ballot.investments << bi1
login_as(user) login_as(user)
visit budget_investments_path(budget, heading_id: california.id) 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 scenario "Insufficient funds (removed after destroying from sidebar)", :js do
bi1 = create(:budget_investment, :selected, heading: california, price: 600) bi1 = create(:budget_investment, :selected, heading: california, price: 600)
bi2 = create(:budget_investment, :selected, heading: california, price: 500) bi2 = create(:budget_investment, :selected, heading: california, price: 500)
user = create(:user, :level_two, ballot_lines: [bi1])
ballot = create(:budget_ballot, budget: budget, user: user)
ballot.investments << bi1
login_as(user) login_as(user)
visit budget_investments_path(budget, heading_id: california.id) visit budget_investments_path(budget, heading_id: california.id)

View File

@@ -1715,13 +1715,10 @@ describe "Budget Investments" do
describe "Reclassification" do describe "Reclassification" do
scenario "Due to heading change" do scenario "Due to heading change" do
user = create(:user, :level_two)
investment = create(:budget_investment, :selected, heading: heading) investment = create(:budget_investment, :selected, heading: heading)
user = create(:user, :level_two, ballot_lines: [investment])
heading2 = create(:budget_heading, group: group) heading2 = create(:budget_heading, group: group)
ballot = create(:budget_ballot, user: user, budget: budget)
ballot.investments << investment
login_as(user) login_as(user)
visit budget_ballot_path(budget) visit budget_ballot_path(budget)
@@ -1736,11 +1733,8 @@ describe "Budget Investments" do
end end
scenario "Due to being unfeasible" do scenario "Due to being unfeasible" do
user = create(:user, :level_two)
investment = create(:budget_investment, :selected, heading: heading) investment = create(:budget_investment, :selected, heading: heading)
user = create(:user, :level_two, ballot_lines: [investment])
ballot = create(:budget_ballot, user: user, budget: budget)
ballot.investments << investment
login_as(user) login_as(user)
visit budget_ballot_path(budget) visit budget_ballot_path(budget)

View File

@@ -338,9 +338,7 @@ describe "Budget Investments" do
scenario "Printing voted budget investments in balloting phase" do scenario "Printing voted budget investments in balloting phase" do
budget.update(phase: "balloting") budget.update(phase: "balloting")
voted_investment = create(:budget_investment, :selected, heading: heading) voted_investment = create(:budget_investment, :selected, heading: heading, balloters: [create(:user)])
ballot = create(:budget_ballot, user: create(:user, :level_two), budget: budget)
ballot.investments << voted_investment
click_link "Print budget investments" click_link "Print budget investments"

View File

@@ -1060,10 +1060,7 @@ describe Budget::Investment do
it "stores the votes for a reclassified investment" do it "stores the votes for a reclassified investment" do
investment = create(:budget_investment, :selected, heading: heading1) investment = create(:budget_investment, :selected, heading: heading1)
3.times do 3.times { create(:user, ballot_lines: [investment]) }
ballot = create(:budget_ballot, budget: budget)
ballot.investments << investment
end
expect(investment.ballot_lines_count).to eq(3) expect(investment.ballot_lines_count).to eq(3)
@@ -1084,10 +1081,7 @@ describe Budget::Investment do
it "removes votes from invesment" do it "removes votes from invesment" do
investment = create(:budget_investment, :selected, heading: heading1) investment = create(:budget_investment, :selected, heading: heading1)
3.times do 3.times { create(:user, ballot_lines: [investment]) }
ballot = create(:budget_ballot, budget: budget)
ballot.investments << investment
end
expect(investment.ballot_lines_count).to eq(3) 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 it "stores reclassfied votes and removes actual votes if an investment has been reclassified" do
investment = create(:budget_investment, :selected, heading: heading1) investment = create(:budget_investment, :selected, heading: heading1)
3.times do 3.times { create(:user, ballot_lines: [investment]) }
ballot = create(:budget_ballot, budget: budget)
ballot.investments << investment
end
expect(investment.ballot_lines_count).to eq(3) 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 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) investment = create(:budget_investment, :selected, heading: heading1)
3.times do 3.times { create(:user, ballot_lines: [investment]) }
ballot = create(:budget_ballot, budget: budget)
ballot.investments << investment
end
expect(investment.ballot_lines_count).to eq(3) expect(investment.ballot_lines_count).to eq(3)

View File

@@ -9,17 +9,14 @@ describe Budget::Stats do
let!(:author) { investment.author } let!(:author) { investment.author }
let!(:author_and_voter) { create(:user, :hidden, votables: [investment]) } let!(:author_and_voter) { create(:user, :hidden, votables: [investment]) }
let!(:voter) { create(:user, votables: [investment]) } let!(:voter) { create(:user, votables: [investment]) }
let!(:voter_and_balloter) { create(:user, votables: [investment]) } let!(:voter_and_balloter) { create(:user, votables: [investment], ballot_lines: [investment]) }
let!(:balloter) { create(:user, :hidden) } let!(:balloter) { create(:user, :hidden, ballot_lines: [investment]) }
let!(:poll_balloter) { create(:user, :level_two) } let!(:poll_balloter) { create(:user, :level_two) }
let!(:non_participant) { create(:user, :level_two) } let!(:non_participant) { create(:user, :level_two) }
before do before do
create(:budget_investment, :selected, budget: budget, author: author_and_voter) 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: poll_balloter, budget: budget)
create(:poll_voter, :from_booth, user: non_participant, budget: create(:budget)) create(:poll_voter, :from_booth, user: non_participant, budget: create(:budget))
@@ -42,8 +39,7 @@ describe Budget::Stats do
end end
it "counts a user who is voter and balloter" do it "counts a user who is voter and balloter" do
voter_and_balloter = create(:user, votables: [investment]) create(:user, votables: [investment], ballot_lines: [investment])
create(:budget_ballot_line, investment: investment, user: voter_and_balloter)
expect(stats.total_participants_support_phase).to be 1 expect(stats.total_participants_support_phase).to be 1
end end
@@ -58,8 +54,7 @@ describe Budget::Stats do
end end
it "counts a user who is voter and balloter" do it "counts a user who is voter and balloter" do
voter_and_balloter = create(:user, votables: [investment]) create(:user, votables: [investment], ballot_lines: [investment])
create(:budget_ballot_line, investment: investment, user: voter_and_balloter)
expect(stats.total_participants_vote_phase).to be 1 expect(stats.total_participants_vote_phase).to be 1
end end
@@ -72,8 +67,7 @@ describe Budget::Stats do
end end
it "counts once a user who is balloter and poll balloter" do it "counts once a user who is balloter and poll balloter" do
poller_and_balloter = create(:user, :level_two) poller_and_balloter = create(:user, :level_two, ballot_lines: [investment])
create(:budget_ballot_line, investment: investment, user: poller_and_balloter)
create(:poll_voter, :from_booth, user: poller_and_balloter, budget: budget) create(:poll_voter, :from_booth, user: poller_and_balloter, budget: budget)
expect(stats.total_participants_vote_phase).to be 1 expect(stats.total_participants_vote_phase).to be 1