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
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

View File

@@ -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

View File

@@ -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"

View File

@@ -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)

View File

@@ -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)

View File

@@ -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"

View File

@@ -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)

View File

@@ -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