diff --git a/spec/factories/budgets.rb b/spec/factories/budgets.rb index d73a13b51..2247b82f3 100644 --- a/spec/factories/budgets.rb +++ b/spec/factories/budgets.rb @@ -183,6 +183,12 @@ FactoryBot.define do trait :with_image do after(:create) { |investment| create(:image, imageable: investment) } end + + transient { voters { [] } } + + after(:create) do |investment, evaluator| + evaluator.voters.each { |voter| create(:vote, votable: investment, voter: voter) } + end end factory :budget_phase, class: "Budget::Phase" do diff --git a/spec/factories/comments.rb b/spec/factories/comments.rb index 368579902..1127836d5 100644 --- a/spec/factories/comments.rb +++ b/spec/factories/comments.rb @@ -35,5 +35,11 @@ FactoryBot.define do valuation.commentable.valuators << valuator end end + + transient { voters { [] } } + + after(:create) do |comment, evaluator| + evaluator.voters.each { |voter| create(:vote, votable: comment, voter: voter) } + end end end diff --git a/spec/factories/debates.rb b/spec/factories/debates.rb index 671c0235b..3293df786 100644 --- a/spec/factories/debates.rb +++ b/spec/factories/debates.rb @@ -37,6 +37,12 @@ FactoryBot.define do 4.times { create(:vote, votable: debate) } end end + + transient { voters { [] } } + + after(:create) do |debate, evaluator| + evaluator.voters.each { |voter| create(:vote, votable: debate, voter: voter) } + end end factory :flag do diff --git a/spec/factories/proposals.rb b/spec/factories/proposals.rb index 1f6faec63..7999c4a46 100644 --- a/spec/factories/proposals.rb +++ b/spec/factories/proposals.rb @@ -78,6 +78,12 @@ FactoryBot.define do after(:create) { |proposal| create(:image, imageable: proposal) } end + transient { voters { [] } } + + after(:create) do |proposal, evaluator| + evaluator.voters.each { |voter| create(:vote, votable: proposal, voter: voter) } + end + factory :retired_proposal, traits: [:retired] end diff --git a/spec/factories/users.rb b/spec/factories/users.rb index 880afce96..d3b7ef172 100644 --- a/spec/factories/users.rb +++ b/spec/factories/users.rb @@ -63,6 +63,12 @@ FactoryBot.define do trait :with_comment do after(:create) { |user| create(:comment, author: user) } end + + transient { votables { [] } } + + after(:create) do |user, evaluator| + evaluator.votables.each { |votable| create(:vote, votable: votable, voter: user) } + end end factory :identity do diff --git a/spec/features/admin/stats_spec.rb b/spec/features/admin/stats_spec.rb index 4f5dcf0b5..a6e49fbcd 100644 --- a/spec/features/admin/stats_spec.rb +++ b/spec/features/admin/stats_spec.rb @@ -25,14 +25,9 @@ describe "Stats" do end scenario "Votes" do - debate = create(:debate) - create(:vote, votable: debate) - - proposal = create(:proposal) - 2.times { create(:vote, votable: proposal) } - - comment = create(:comment) - 3.times { create(:vote, votable: comment) } + create(:debate, voters: Array.new(1) { create(:user) }) + create(:proposal, voters: Array.new(2) { create(:user) }) + create(:comment, voters: Array.new(3) { create(:user) }) visit admin_stats_path @@ -113,11 +108,9 @@ describe "Stats" do scenario "Number of supports in investment projects" do group_2 = create(:budget_group, budget: @budget) - investment1 = create(:budget_investment, heading: create(:budget_heading, group: group_2)) - investment2 = create(:budget_investment, heading: @heading_all_city) - 1.times { create(:vote, votable: investment1) } - 2.times { create(:vote, votable: investment2) } + create(:budget_investment, heading: create(:budget_heading, group: group_2), voters: [create(:user)]) + create(:budget_investment, heading: @heading_all_city, voters: [create(:user), create(:user)]) visit admin_stats_path click_link "Participatory Budgets" @@ -129,17 +122,13 @@ describe "Stats" do end scenario "Number of users that have supported an investment project" do - user1 = create(:user, :level_two) - user2 = create(:user, :level_two) - user3 = create(:user, :level_two) - group_2 = create(:budget_group, budget: @budget) investment1 = create(:budget_investment, heading: create(:budget_heading, group: group_2)) investment2 = create(:budget_investment, heading: @heading_all_city) - create(:vote, votable: investment1, voter: user1) - create(:vote, votable: investment1, voter: user2) - create(:vote, votable: investment2, voter: user1) + create(:user, :level_two, votables: [investment1, investment2]) + create(:user, :level_two, votables: [investment1]) + create(:user, :level_two) visit admin_stats_path click_link "Participatory Budgets" @@ -160,13 +149,9 @@ describe "Stats" do carabanchel = create(:budget_heading, group: group_districts) barajas = create(:budget_heading, group: group_districts) - all_city_investment = create(:budget_investment, heading: all_city) - carabanchel_investment = create(:budget_investment, heading: carabanchel) - carabanchel_investment = create(:budget_investment, heading: carabanchel) - - Budget::Investment.all.each do |investment| - create(:vote, votable: investment) - end + create(:budget_investment, heading: all_city, voters: [create(:user)]) + create(:budget_investment, heading: carabanchel, voters: [create(:user)]) + create(:budget_investment, heading: carabanchel, voters: [create(:user)]) visit admin_stats_path click_link "Participatory Budgets" diff --git a/spec/features/budgets/investments_spec.rb b/spec/features/budgets/investments_spec.rb index 074e4a5cb..f335ffafe 100644 --- a/spec/features/budgets/investments_spec.rb +++ b/spec/features/budgets/investments_spec.rb @@ -789,11 +789,8 @@ describe "Budget Investments" do per_page.times { create(:budget_investment, heading: heading) } - voted_investments = [] - per_page.times do - investment = create(:budget_investment, heading: heading) - create(:vote, votable: investment, voter: voter) - voted_investments << investment + voted_investments = Array.new(per_page) do + create(:budget_investment, heading: heading, voters: [voter]) end login_as(voter) @@ -1354,11 +1351,9 @@ describe "Budget Investments" do carabanchel = create(:budget_heading, group: group) salamanca = create(:budget_heading, group: group) - carabanchel_investment = create(:budget_investment, heading: carabanchel) + carabanchel_investment = create(:budget_investment, heading: carabanchel, voters: [author]) salamanca_investment = create(:budget_investment, heading: salamanca) - create(:vote, votable: carabanchel_investment, voter: author) - login_as(author) visit budget_investments_path(budget, heading_id: carabanchel.id) @@ -1374,11 +1369,9 @@ describe "Budget Investments" do another_heading1 = create(:budget_heading, group: group2) another_heading2 = create(:budget_heading, group: group2) - heading_investment = create(:budget_investment, heading: heading) + heading_investment = create(:budget_investment, heading: heading, voters: [author]) another_group_investment = create(:budget_investment, heading: another_heading1) - create(:vote, votable: heading_investment, voter: author) - login_as(author) visit budget_investments_path(budget, heading_id: another_heading1.id) @@ -1417,8 +1410,7 @@ describe "Budget Investments" do end scenario "Sidebar in show should display support text and count" do - investment = create(:budget_investment, :selected, budget: budget) - create(:vote, votable: investment) + investment = create(:budget_investment, :selected, budget: budget, voters: [create(:user)]) visit budget_investment_path(budget, investment) @@ -1429,8 +1421,7 @@ describe "Budget Investments" do end scenario "Index should display support count" do - investment = create(:budget_investment, budget: budget, heading: heading) - create(:vote, votable: investment) + investment = create(:budget_investment, budget: budget, heading: heading, voters: [create(:user)]) visit budget_investments_path(budget, heading_id: heading.id) @@ -1440,8 +1431,7 @@ describe "Budget Investments" do end scenario "Show should display support text and count" do - investment = create(:budget_investment, budget: budget, heading: heading) - create(:vote, votable: investment) + investment = create(:budget_investment, budget: budget, heading: heading, voters: [create(:user)]) visit budget_investment_path(budget, investment) diff --git a/spec/features/budgets/votes_spec.rb b/spec/features/budgets/votes_spec.rb index 9e004ddf5..2134de1da 100644 --- a/spec/features/budgets/votes_spec.rb +++ b/spec/features/budgets/votes_spec.rb @@ -13,10 +13,9 @@ describe "Votes" do describe "Index" do scenario "Index shows user votes on proposals" do - investment1 = create(:budget_investment, heading: heading) + investment1 = create(:budget_investment, heading: heading, voters: [manuela]) investment2 = create(:budget_investment, heading: heading) investment3 = create(:budget_investment, heading: heading) - create(:vote, voter: manuela, votable: investment1, vote_flag: true) visit budget_investments_path(budget, heading_id: heading.id) diff --git a/spec/features/debates_spec.rb b/spec/features/debates_spec.rb index 4865b174c..7da3ef88c 100644 --- a/spec/features/debates_spec.rb +++ b/spec/features/debates_spec.rb @@ -305,9 +305,8 @@ describe "Debates" do end scenario "Update should not be posible if debate is not editable" do - debate = create(:debate) Setting["max_votes_for_debate_edit"] = 2 - 3.times { create(:vote, votable: debate) } + debate = create(:debate, voters: Array.new(3) { create(:user) }) expect(debate).not_to be_editable login_as(debate.author) diff --git a/spec/features/emails_spec.rb b/spec/features/emails_spec.rb index 7fa9e8f51..127c87bb5 100644 --- a/spec/features/emails_spec.rb +++ b/spec/features/emails_spec.rb @@ -258,13 +258,10 @@ describe "Emails" do scenario "notifications for proposals that I have supported" do user = create(:user, email_digest: true) - proposal1 = create(:proposal) - proposal2 = create(:proposal) + proposal1 = create(:proposal, voters: [user]) + proposal2 = create(:proposal, voters: [user]) proposal3 = create(:proposal) - create(:vote, votable: proposal1, voter: user) - create(:vote, votable: proposal2, voter: user) - reset_mailer notification1 = create_proposal_notification(proposal1) diff --git a/spec/features/proposal_notifications_spec.rb b/spec/features/proposal_notifications_spec.rb index b239f9451..ca8b92b37 100644 --- a/spec/features/proposal_notifications_spec.rb +++ b/spec/features/proposal_notifications_spec.rb @@ -30,9 +30,7 @@ describe "Proposal Notifications" do scenario "Send a notification (Active voter)" do proposal = create(:proposal) - voter = create(:user, :level_two) - create(:vote, voter: voter, votable: proposal) - + create(:user, :level_two, votables: [proposal]) create_proposal_notification(proposal) expect(Notification.count).to eq(1) @@ -49,11 +47,10 @@ describe "Proposal Notifications" do end scenario "Send a notification (Follower and Voter)" do - proposal = create(:proposal) - user_voter_follower = create(:user) + proposal = create(:proposal, voters: [user_voter_follower]) + create(:follow, :followed_proposal, user: user_voter_follower, followable: proposal) - create(:vote, voter: user_voter_follower, votable: proposal) user_follower = create(:user) create(:follow, :followed_proposal, user: user_follower, followable: proposal) @@ -65,11 +62,9 @@ describe "Proposal Notifications" do scenario "Send a notification (Blocked voter)" do proposal = create(:proposal) + voter = create(:user, :level_two, votables: [proposal]) - voter = create(:user, :level_two) - create(:vote, voter: voter, votable: proposal) voter.block - create_proposal_notification(proposal) expect(Notification.count).to eq(0) @@ -77,11 +72,9 @@ describe "Proposal Notifications" do scenario "Send a notification (Erased voter)" do proposal = create(:proposal) + voter = create(:user, :level_two, votables: [proposal]) - voter = create(:user, :level_two) - create(:vote, voter: voter, votable: proposal) voter.erase - create_proposal_notification(proposal) expect(Notification.count).to eq(0) @@ -153,11 +146,10 @@ describe "Proposal Notifications" do scenario "Message about receivers (Same Followers and Voters)" do author = create(:user) - proposal = create(:proposal, author: author) - user_voter_follower = create(:user) + proposal = create(:proposal, author: author, voters: [user_voter_follower]) + create(:follow, :followed_proposal, user: user_voter_follower, followable: proposal) - create(:vote, voter: user_voter_follower, votable: proposal) login_as(author) visit new_proposal_notification_path(proposal_id: proposal.id) @@ -208,15 +200,11 @@ describe "Proposal Notifications" do scenario "Voters should receive a notification", :js do author = create(:user) - - user1 = create(:user) - user2 = create(:user) - user3 = create(:user) - proposal = create(:proposal, author: author) - create(:vote, voter: user1, votable: proposal, vote_flag: true) - create(:vote, voter: user2, votable: proposal, vote_flag: true) + user1 = create(:user, votables: [proposal]) + user2 = create(:user, votables: [proposal]) + user3 = create(:user) login_as(author) visit root_path @@ -322,10 +310,7 @@ describe "Proposal Notifications" do scenario "Proposal hidden", :js do author = create(:user) user = create(:user) - - proposal = create(:proposal, author: author) - - create(:vote, voter: user, votable: proposal, vote_flag: true) + proposal = create(:proposal, author: author, voters: [user]) login_as(author) visit root_path @@ -357,10 +342,7 @@ describe "Proposal Notifications" do scenario "Proposal retired by author", :js do author = create(:user) user = create(:user) - - proposal = create(:proposal, author: author) - - create(:vote, voter: user, votable: proposal, vote_flag: true) + proposal = create(:proposal, author: author, voters: [user]) login_as(author) visit root_path diff --git a/spec/features/proposals_spec.rb b/spec/features/proposals_spec.rb index 8cc3a8561..4d080c360 100644 --- a/spec/features/proposals_spec.rb +++ b/spec/features/proposals_spec.rb @@ -637,9 +637,8 @@ describe "Proposals" do end scenario "Update should not be posible if proposal is not editable" do - proposal = create(:proposal) - Setting["max_votes_for_proposal_edit"] = 10 - 11.times { create(:vote, votable: proposal) } + Setting["max_votes_for_proposal_edit"] = 3 + proposal = create(:proposal, voters: Array.new(4) { create(:user) }) expect(proposal).not_to be_editable diff --git a/spec/features/stats_spec.rb b/spec/features/stats_spec.rb index c28dec444..5c35e2eb6 100644 --- a/spec/features/stats_spec.rb +++ b/spec/features/stats_spec.rb @@ -19,14 +19,9 @@ describe "Stats" do end scenario "Votes" do - debate = create(:debate) - create(:vote, votable: debate) - - proposal = create(:proposal) - 2.times { create(:vote, votable: proposal) } - - comment = create(:comment) - 3.times { create(:vote, votable: comment) } + create(:debate, voters: Array.new(1) { create(:user) }) + create(:proposal, voters: Array.new(2) { create(:user) }) + create(:comment, voters: Array.new(3) { create(:user) }) visit stats_path diff --git a/spec/features/votes_spec.rb b/spec/features/votes_spec.rb index 910be6ac1..827eef4ac 100644 --- a/spec/features/votes_spec.rb +++ b/spec/features/votes_spec.rb @@ -188,10 +188,9 @@ describe "Votes" do before { login_as(@manuela) } scenario "Index shows user votes on proposals" do - proposal1 = create(:proposal) + proposal1 = create(:proposal, voters: [@manuela]) proposal2 = create(:proposal) proposal3 = create(:proposal) - create(:vote, voter: @manuela, votable: proposal1, vote_flag: true) visit proposals_path diff --git a/spec/lib/graphql_spec.rb b/spec/lib/graphql_spec.rb index b10b854b0..1731f4ae6 100644 --- a/spec/lib/graphql_spec.rb +++ b/spec/lib/graphql_spec.rb @@ -189,8 +189,7 @@ describe "Consul Schema" do end it "returns nested votes for a proposal" do - proposal = create(:proposal) - 2.times { create(:vote, votable: proposal) } + proposal = create(:proposal, voters: [create(:user), create(:user)]) response = execute("{ proposal(id: #{proposal.id}) { votes_for { edges { node { public_created_at } } } } }") @@ -535,15 +534,10 @@ describe "Consul Schema" do describe "Votes" do it "only returns votes from proposals, debates and comments" do - proposal = create(:proposal) - debate = create(:debate) - comment = create(:comment) - budget_investment = create(:budget_investment) - - proposal_vote = create(:vote, votable: proposal) - debate_vote = create(:vote, votable: debate) - comment_vote = create(:vote, votable: comment) - budget_investment_vote = create(:vote, votable: budget_investment) + create(:proposal, voters: [create(:user)]) + create(:debate, voters: [create(:user)]) + create(:comment, voters: [create(:user)]) + create(:budget_investment, voters: [create(:user)]) response = execute("{ votes { edges { node { votable_type } } } }") received_votables = extract_fields(response, "votes", "votable_type") @@ -552,11 +546,8 @@ describe "Consul Schema" do end it "does not include votes from hidden debates" do - visible_debate = create(:debate) - hidden_debate = create(:debate, :hidden) - - visible_debate_vote = create(:vote, votable: visible_debate) - hidden_debate_vote = create(:vote, votable: hidden_debate) + visible_debate = create(:debate, voters: [create(:user)]) + hidden_debate = create(:debate, :hidden, voters: [create(:user)]) response = execute("{ votes { edges { node { votable_id } } } }") received_debates = extract_fields(response, "votes", "votable_id") @@ -565,11 +556,8 @@ describe "Consul Schema" do end it "does not include votes of hidden proposals" do - visible_proposal = create(:proposal) - hidden_proposal = create(:proposal, :hidden) - - visible_proposal_vote = create(:vote, votable: visible_proposal) - hidden_proposal_vote = create(:vote, votable: hidden_proposal) + visible_proposal = create(:proposal, voters: [create(:user)]) + hidden_proposal = create(:proposal, :hidden, voters: [create(:user)]) response = execute("{ votes { edges { node { votable_id } } } }") received_proposals = extract_fields(response, "votes", "votable_id") @@ -578,11 +566,8 @@ describe "Consul Schema" do end it "does not include votes of hidden comments" do - visible_comment = create(:comment) - hidden_comment = create(:comment, :hidden) - - visible_comment_vote = create(:vote, votable: visible_comment) - hidden_comment_vote = create(:vote, votable: hidden_comment) + visible_comment = create(:comment, voters: [create(:user)]) + hidden_comment = create(:comment, :hidden, voters: [create(:user)]) response = execute("{ votes { edges { node { votable_id } } } }") received_comments = extract_fields(response, "votes", "votable_id") @@ -594,11 +579,8 @@ describe "Consul Schema" do visible_proposal = create(:proposal) hidden_proposal = create(:proposal, :hidden) - visible_proposal_comment = create(:comment, commentable: visible_proposal) - hidden_proposal_comment = create(:comment, commentable: hidden_proposal) - - visible_proposal_comment_vote = create(:vote, votable: visible_proposal_comment) - hidden_proposal_comment_vote = create(:vote, votable: hidden_proposal_comment) + visible_proposal_comment = create(:comment, commentable: visible_proposal, voters: [create(:user)]) + hidden_proposal_comment = create(:comment, commentable: hidden_proposal, voters: [create(:user)]) response = execute("{ votes { edges { node { votable_id } } } }") received_votables = extract_fields(response, "votes", "votable_id") @@ -610,11 +592,8 @@ describe "Consul Schema" do visible_debate = create(:debate) hidden_debate = create(:debate, :hidden) - visible_debate_comment = create(:comment, commentable: visible_debate) - hidden_debate_comment = create(:comment, commentable: hidden_debate) - - visible_debate_comment_vote = create(:vote, votable: visible_debate_comment) - hidden_debate_comment_vote = create(:vote, votable: hidden_debate_comment) + visible_debate_comment = create(:comment, commentable: visible_debate, voters: [create(:user)]) + hidden_debate_comment = create(:comment, commentable: hidden_debate, voters: [create(:user)]) response = execute("{ votes { edges { node { votable_id } } } }") received_votables = extract_fields(response, "votes", "votable_id") @@ -623,10 +602,8 @@ describe "Consul Schema" do end it "does not include votes of debates that are not public" do - not_public_debate = create(:debate) allow(Vote).to receive(:public_for_api).and_return([]) - - not_public_debate_vote = create(:vote, votable: not_public_debate) + not_public_debate = create(:debate, voters: [create(:user)]) response = execute("{ votes { edges { node { votable_id } } } }") received_votables = extract_fields(response, "votes", "votable_id") @@ -635,10 +612,8 @@ describe "Consul Schema" do end it "does not include votes of a hidden proposals" do - not_public_proposal = create(:proposal) allow(Vote).to receive(:public_for_api).and_return([]) - - not_public_proposal_vote = create(:vote, votable: not_public_proposal) + not_public_proposal = create(:proposal, voters: [create(:user)]) response = execute("{ votes { edges { node { votable_id } } } }") received_votables = extract_fields(response, "votes", "votable_id") @@ -647,10 +622,8 @@ describe "Consul Schema" do end it "does not include votes of a hidden comments" do - not_public_comment = create(:comment) allow(Vote).to receive(:public_for_api).and_return([]) - - not_public_comment_vote = create(:vote, votable: not_public_comment) + not_public_comment = create(:comment, voters: [create(:user)]) response = execute("{ votes { edges { node { votable_id } } } }") received_votables = extract_fields(response, "votes", "votable_id") diff --git a/spec/models/budget/investment_spec.rb b/spec/models/budget/investment_spec.rb index ebd984d15..e03d030c1 100644 --- a/spec/models/budget/investment_spec.rb +++ b/spec/models/budget/investment_spec.rb @@ -748,11 +748,9 @@ describe Budget::Investment do carabanchel = create(:budget_heading, group: group) salamanca = create(:budget_heading, group: group) - carabanchel_investment = create(:budget_investment, heading: carabanchel) + carabanchel_investment = create(:budget_investment, heading: carabanchel, voters: [user]) salamanca_investment = create(:budget_investment, heading: salamanca) - create(:vote, votable: carabanchel_investment, voter: user) - expect(salamanca_investment.valid_heading?(user)).to eq(false) end @@ -762,11 +760,9 @@ describe Budget::Investment do carabanchel = create(:budget_heading, group: group) salamanca = create(:budget_heading, group: group) - carabanchel_investment = create(:budget_investment, heading: carabanchel) + carabanchel_investment = create(:budget_investment, heading: carabanchel, voters: [user]) salamanca_investment = create(:budget_investment, heading: salamanca) - create(:vote, votable: carabanchel_investment, voter: user) - expect(salamanca_investment.valid_heading?(user)).to eq(true) end @@ -776,11 +772,8 @@ describe Budget::Investment do carabanchel = create(:budget_heading, group: group) salamanca = create(:budget_heading, group: group) - carabanchel_investment = create(:budget_investment, heading: carabanchel) - salamanca_investment = create(:budget_investment, heading: salamanca) - - create(:vote, votable: carabanchel_investment, voter: user) - create(:vote, votable: salamanca_investment, voter: user) + carabanchel_investment = create(:budget_investment, heading: carabanchel, voters: [user]) + salamanca_investment = create(:budget_investment, heading: salamanca, voters: [user]) expect(carabanchel_investment.valid_heading?(user)).to eq(true) expect(salamanca_investment.valid_heading?(user)).to eq(true) @@ -792,11 +785,9 @@ describe Budget::Investment do end it "allows votes in a group with a single heading after voting in that heading" do - all_city_investment1 = create(:budget_investment, heading: heading) + all_city_investment1 = create(:budget_investment, heading: heading, voters: [user]) all_city_investment2 = create(:budget_investment, heading: heading) - create(:vote, votable: all_city_investment1, voter: user) - expect(all_city_investment2.valid_heading?(user)).to eq(true) end @@ -805,9 +796,7 @@ describe Budget::Investment do carabanchel = create(:budget_heading, group: districts) all_city_investment = create(:budget_investment, heading: heading) - carabanchel_investment = create(:budget_investment, heading: carabanchel) - - create(:vote, votable: carabanchel_investment, voter: user) + carabanchel_investment = create(:budget_investment, heading: carabanchel, voters: [user]) expect(all_city_investment.valid_heading?(user)).to eq(true) end @@ -817,11 +806,9 @@ describe Budget::Investment do carabanchel = create(:budget_heading, group: districts) salamanca = create(:budget_heading, group: districts) - all_city_investment = create(:budget_investment, heading: heading) + all_city_investment = create(:budget_investment, heading: heading, voters: [user]) carabanchel_investment = create(:budget_investment, heading: carabanchel) - create(:vote, votable: all_city_investment, voter: user) - expect(carabanchel_investment.valid_heading?(user)).to eq(true) end @@ -929,9 +916,8 @@ describe Budget::Investment do describe "#with_supports" do it "returns proposals with supports" do - inv1 = create(:budget_investment) + inv1 = create(:budget_investment, voters: [create(:user)]) inv2 = create(:budget_investment) - create(:vote, votable: inv1) expect(Budget::Investment.with_supports).to eq [inv1] expect(Budget::Investment.with_supports).not_to include(inv2) diff --git a/spec/models/budget/stats_spec.rb b/spec/models/budget/stats_spec.rb index b93514f64..c651da02d 100644 --- a/spec/models/budget/stats_spec.rb +++ b/spec/models/budget/stats_spec.rb @@ -6,21 +6,17 @@ describe Budget::Stats do let(:investment) { create(:budget_investment, :selected, budget: budget) } describe "#participants" do - let(:author) { investment.author } - let(:author_and_voter) { create(:user, :hidden) } - let(:voter) { create(:user) } - let(:voter_and_balloter) { create(:user) } - let(:balloter) { create(:user, :hidden) } - let(:poll_balloter) { create(:user, :level_two) } - let(:non_participant) { create(:user, :level_two) } + 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!(: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(:vote, votable: investment, voter: author_and_voter) - create(:vote, votable: investment, voter: voter) - create(:vote, votable: investment, voter: voter_and_balloter) - create(:budget_ballot_line, investment: investment, user: balloter) create(:budget_ballot_line, investment: investment, user: voter_and_balloter) @@ -46,8 +42,7 @@ describe Budget::Stats do end it "counts a user who is voter and balloter" do - voter_and_balloter = create(:user) - create(:vote, votable: investment, voter: voter_and_balloter) + voter_and_balloter = create(:user, votables: [investment]) create(:budget_ballot_line, investment: investment, user: voter_and_balloter) expect(stats.total_participants_support_phase).to be 1 @@ -63,8 +58,7 @@ describe Budget::Stats do end it "counts a user who is voter and balloter" do - voter_and_balloter = create(:user) - create(:vote, votable: investment, voter: voter_and_balloter) + voter_and_balloter = create(:user, votables: [investment]) create(:budget_ballot_line, investment: investment, user: voter_and_balloter) expect(stats.total_participants_vote_phase).to be 1 diff --git a/spec/models/proposal_spec.rb b/spec/models/proposal_spec.rb index f37f6aad3..61060f228 100644 --- a/spec/models/proposal_spec.rb +++ b/spec/models/proposal_spec.rb @@ -442,24 +442,19 @@ describe Proposal do it "returns users that have voted for the proposal" do proposal = create(:proposal) - voter1 = create(:user, :level_two) - voter2 = create(:user, :level_two) + voter1 = create(:user, :level_two, votables: [proposal]) + voter2 = create(:user, :level_two, votables: [proposal]) voter3 = create(:user, :level_two) - create(:vote, voter: voter1, votable: proposal) - create(:vote, voter: voter2, votable: proposal) - expect(proposal.voters).to match_array [voter1, voter2] expect(proposal.voters).not_to include(voter3) end it "does not return users that have been erased" do proposal = create(:proposal) - voter1 = create(:user, :level_two) - voter2 = create(:user, :level_two) + voter1 = create(:user, :level_two, votables: [proposal]) + voter2 = create(:user, :level_two, votables: [proposal]) - create(:vote, voter: voter1, votable: proposal) - create(:vote, voter: voter2, votable: proposal) voter2.erase expect(proposal.voters).to eq [voter1] @@ -467,11 +462,9 @@ describe Proposal do it "does not return users that have been blocked" do proposal = create(:proposal) - voter1 = create(:user, :level_two) - voter2 = create(:user, :level_two) + voter1 = create(:user, :level_two, votables: [proposal]) + voter2 = create(:user, :level_two, votables: [proposal]) - create(:vote, voter: voter1, votable: proposal) - create(:vote, voter: voter2, votable: proposal) voter2.block expect(proposal.voters).to eq [voter1] @@ -920,32 +913,28 @@ describe Proposal do it "returns voters and followers" do proposal = create(:proposal) - voter = create(:user, :level_two) + voter = create(:user, :level_two, votables: [proposal]) follower = create(:user, :level_two) follow = create(:follow, user: follower, followable: proposal) - create(:vote, voter: voter, votable: proposal) expect(proposal.users_to_notify).to eq([voter, follower]) end it "returns voters and followers discarding duplicates" do proposal = create(:proposal) - voter_and_follower = create(:user, :level_two) + voter_and_follower = create(:user, :level_two, votables: [proposal]) follow = create(:follow, user: voter_and_follower, followable: proposal) - create(:vote, voter: voter_and_follower, votable: proposal) expect(proposal.users_to_notify).to eq([voter_and_follower]) end it "returns voters and followers except the proposal author" do author = create(:user, :level_two) - proposal = create(:proposal, author: author) - voter_and_follower = create(:user, :level_two) + proposal = create(:proposal, author: author, voters: [author]) + voter_and_follower = create(:user, :level_two, votables: [proposal]) create(:follow, user: author, followable: proposal) create(:follow, user: voter_and_follower, followable: proposal) - create(:vote, voter: author, votable: proposal) - create(:vote, voter: voter_and_follower, votable: proposal) expect(proposal.users_to_notify).to eq([voter_and_follower]) end @@ -1014,9 +1003,8 @@ describe Proposal do end it "does not return already supported proposals" do - proposal1 = create(:proposal, tag_list: "Health") + proposal1 = create(:proposal, tag_list: "Health", voters: [user]) proposal2 = create(:proposal, tag_list: "Health") - create(:vote, votable: proposal1, voter: user) create(:follow, followable: proposal2, user: user) results = Proposal.recommendations(user) diff --git a/spec/models/signature_spec.rb b/spec/models/signature_spec.rb index f194f3d22..b237ded42 100644 --- a/spec/models/signature_spec.rb +++ b/spec/models/signature_spec.rb @@ -142,9 +142,8 @@ describe Signature do end it "does not assign vote to user if already voted" do - proposal = create(:proposal) user = create(:user, :level_two, document_number: "123A") - vote = create(:vote, votable: proposal, voter: user) + proposal = create(:proposal, voters: [user]) signature_sheet = create(:signature_sheet, signable: proposal) signature = create(:signature, signature_sheet: signature_sheet, document_number: user.document_number) @@ -154,9 +153,8 @@ describe Signature do end it "does not assign vote to user if already voted on budget investment" do - investment = create(:budget_investment) user = create(:user, :level_two, document_number: "123A") - vote = create(:vote, votable: investment, voter: user) + investment = create(:budget_investment, voters: [user]) signature_sheet = create(:signature_sheet, signable: investment) signature = create(:signature, document_number: user.document_number, signature_sheet: signature_sheet) diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb index ad66de9a5..1d94dc23e 100644 --- a/spec/models/user_spec.rb +++ b/spec/models/user_spec.rb @@ -4,9 +4,6 @@ describe User do describe "#headings_voted_within_group" do it "returns the headings voted by a user" do - user1 = create(:user) - user2 = create(:user) - budget = create(:budget) group = create(:budget_group, budget: budget) @@ -19,9 +16,8 @@ describe User do san_franciso_investment = create(:budget_investment, heading: san_francisco) wyoming_investment = create(:budget_investment, heading: wyoming) - create(:vote, votable: wyoming_investment, voter: user1) - create(:vote, votable: san_franciso_investment, voter: user1) - create(:vote, votable: new_york_investment, voter: user1) + user1 = create(:user, votables: [wyoming_investment, san_franciso_investment, new_york_investment]) + user2 = create(:user) expect(user1.headings_voted_within_group(group)).to match_array [new_york, san_francisco, wyoming] expect(user1.headings_voted_within_group(group)).not_to include(another_heading) @@ -30,10 +26,9 @@ describe User do end it "returns headings with multiple translations only once" do - user = create(:user) group = create(:budget_group) heading = create(:budget_heading, group: group, name_en: "English", name_es: "Spanish") - create(:vote, votable: create(:budget_investment, heading: heading), voter: user) + user = create(:user, votables: [create(:budget_investment, heading: heading)]) expect(user.headings_voted_within_group(group).count).to eq 1 end diff --git a/spec/models/vote_spec.rb b/spec/models/vote_spec.rb index 742f860bf..6e55c9600 100644 --- a/spec/models/vote_spec.rb +++ b/spec/models/vote_spec.rb @@ -5,29 +5,26 @@ describe Vote do describe "#for_debates" do it "does not returns votes for other votables" do debate = create(:debate) - comment = create(:comment) - create(:vote, votable: comment) + create(:vote, votable: create(:comment)) expect(Vote.for_debates(debate).count).to eq(0) end it "returns votes only for debates in parameters" do - debate1 = create(:debate) + debate1 = create(:debate, voters: [create(:user)]) debate2 = create(:debate) - create(:vote, votable: debate1) expect(Vote.for_debates(debate1).count).to eq(1) expect(Vote.for_debates(debate2).count).to eq(0) end it "accepts more than 1 debate" do - debate1 = create(:debate) + debate1 = create(:debate, voters: [create(:user)]) debate2 = create(:debate) - debate3 = create(:debate) - create(:vote, votable: debate1) - create(:vote, votable: debate3) + debate3 = create(:debate, voters: [create(:user)]) expect(Vote.for_debates([debate1, debate2]).count).to eq(1) + expect(Vote.for_debates([debate1, debate3]).count).to eq(2) end end