Merge pull request #3732 from consul/voters_in_specs

Simplify creating  associations in specs
This commit is contained in:
Javier Martín
2019-09-30 14:38:05 +02:00
committed by GitHub
45 changed files with 396 additions and 575 deletions

View File

@@ -79,6 +79,13 @@ FactoryBot.define do
trait :drafting_budget do
association :group, factory: [:budget_group, :drafting_budget]
end
trait :with_investment_with_milestone do
after(:create) do |heading|
investment = create(:budget_investment, :winner, heading: heading)
create(:milestone, milestoneable: investment)
end
end
end
factory :budget_investment, class: "Budget::Investment" do
@@ -183,6 +190,26 @@ FactoryBot.define do
trait :with_image do
after(:create) { |investment| create(:image, imageable: investment) }
end
transient do
voters { [] }
followers { [] }
ballots { [] }
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.ballots.each do |ballot|
create(:budget_ballot_line, investment: investment, ballot: ballot)
end
evaluator.balloters.each do |balloter|
create(:budget_ballot_line, investment: investment, user: balloter)
end
end
end
factory :budget_phase, class: "Budget::Phase" do
@@ -198,6 +225,14 @@ FactoryBot.define do
factory :budget_ballot, class: "Budget::Ballot" do
association :user, factory: :user
budget
transient { investments { [] } }
after(:create) do |ballot, evaluator|
evaluator.investments.each do |investment|
create(:budget_ballot_line, investment: investment, ballot: ballot)
end
end
end
factory :budget_ballot_line, class: "Budget::Ballot::Line" do

View File

@@ -9,6 +9,14 @@ FactoryBot.define do
trait :milestone do
kind { "milestone" }
end
transient { taggables { [] } }
after(:create) do |tag, evaluator|
evaluator.taggables.each do |taggable|
create(:tagging, tag: tag, taggable: taggable)
end
end
end
factory :tagging, class: "ActsAsTaggableOn::Tagging" do

View File

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

View File

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

View File

@@ -12,7 +12,11 @@ FactoryBot.define do
publication_date { Date.current }
trait :with_image do
after(:create) { |milestone| create(:image, imageable: milestone) }
transient { image_title { "Current status of the project" } }
after(:create) do |milestone, evaluator|
create(:image, imageable: milestone, title: evaluator.image_title)
end
end
factory :milestone_with_description do

View File

@@ -6,6 +6,18 @@ FactoryBot.define do
trait :read do
read_at { Time.current }
end
trait :for_proposal_notification do
association :notifiable, factory: :proposal_notification
end
trait :for_comment do
association :notifiable, factory: :comment
end
trait :for_poll_question do
association :notifiable, factory: :poll_question
end
end
factory :admin_notification do

View File

@@ -42,6 +42,14 @@ FactoryBot.define do
trait :with_image do
after(:create) { |poll| create(:image, imageable: poll) }
end
transient { officers { [] } }
after(:create) do |poll, evaluator|
evaluator.officers.each do |officer|
create(:poll_officer_assignment, poll: poll, officer: officer)
end
end
end
factory :poll_question, class: "Poll::Question" do
@@ -121,16 +129,22 @@ FactoryBot.define do
end
factory :poll_question_answer, class: "Poll::Question::Answer" do
association :question, factory: :poll_question
sequence(:title) { |n| "Answer title #{n}" }
sequence(:description) { |n| "Answer description #{n}" }
sequence(:given_order) { |n| n }
transient { poll { association(:poll) } }
question { association(:poll_question, poll: poll) }
end
factory :poll_answer_video, class: "Poll::Question::Answer::Video" do
association :answer, factory: :poll_question_answer
title { "Sample video title" }
url { "https://youtu.be/nhuNb0XtRhQ" }
transient { poll { association(:poll) } }
answer { association(:poll_question_answer, poll: poll) }
end
factory :poll_booth, class: "Poll::Booth" do
@@ -188,8 +202,10 @@ FactoryBot.define do
trait :from_booth do
origin { "booth" }
transient { booth { association(:poll_booth) } }
booth_assignment do
association :poll_booth_assignment, poll: poll
association :poll_booth_assignment, poll: poll, booth: booth
end
officer_assignment do

View File

@@ -78,6 +78,16 @@ FactoryBot.define do
after(:create) { |proposal| create(:image, imageable: proposal) }
end
transient do
voters { [] }
followers { [] }
end
after(:create) do |proposal, evaluator|
evaluator.voters.each { |voter| create(:vote, votable: proposal, voter: voter) }
evaluator.followers.each { |follower| create(:follow, followable: proposal, user: follower) }
end
factory :retired_proposal, traits: [:retired]
end

View File

@@ -63,6 +63,25 @@ FactoryBot.define do
trait :with_comment do
after(:create) { |user| create(:comment, author: user) }
end
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
factory :identity do
@@ -92,7 +111,18 @@ FactoryBot.define do
end
factory :poll_officer, class: "Poll::Officer" do
user
user { association(:user, username: name) }
transient do
sequence(:name) { |n| "Officer #{n}" }
polls { [] }
end
after(:create) do |officer, evaluator|
evaluator.polls.each do |poll|
create(:poll_officer_assignment, poll: poll, officer: officer)
end
end
end
factory :follow do

View File

@@ -160,9 +160,8 @@ describe "Homepage" do
end
scenario "Recomendations" do
proposal1 = create(:proposal, tag_list: "Sport")
proposal2 = create(:proposal, tag_list: "Sport")
create(:follow, followable: proposal1, user: user)
create(:proposal, tag_list: "Sport", followers: [user])
create(:proposal, tag_list: "Sport")
visit admin_homepage_path
within("#setting_#{user_recommendations.id}") do

View File

@@ -157,9 +157,7 @@ describe "Admin booths assignments" do
booth = create(:poll_booth)
officer_assignment = create(:poll_officer_assignment, poll: poll, booth: booth)
officer = officer_assignment.officer
officer_assignment_2 = create(:poll_officer_assignment, poll: poll)
officer_2 = officer_assignment_2.officer
officer_2 = create(:poll_officer, polls: [poll])
visit admin_poll_path(poll)
click_link "Booths (2)"

View File

@@ -10,37 +10,27 @@ describe "Officer Assignments" do
scenario "Index" do
poll = create(:poll)
officer1 = create(:poll_officer)
officer2 = create(:poll_officer)
officer3 = create(:poll_officer)
officer_assignment = create(:poll_officer_assignment, poll: poll, officer: officer1)
officer_assignment_2 = create(:poll_officer_assignment, poll: poll, officer: officer2)
create(:poll_officer, name: "Bubbles", polls: [poll])
create(:poll_officer, name: "Blossom", polls: [poll])
create(:poll_officer, name: "Buttercup")
visit admin_poll_path(poll)
click_link "Officers (2)"
within("#officer_assignments") do
expect(page).to have_content officer1.name
expect(page).to have_content officer2.name
expect(page).not_to have_content officer3.name
expect(page).to have_content "Bubbles"
expect(page).to have_content "Blossom"
expect(page).not_to have_content "Buttercup"
end
end
scenario "Search", :js do
poll = create(:poll)
user1 = create(:user, username: "John Snow")
user2 = create(:user, username: "John Silver")
user3 = create(:user, username: "John Edwards")
officer1 = create(:poll_officer, user: user1)
officer2 = create(:poll_officer, user: user2)
officer3 = create(:poll_officer, user: user3)
officer_assignment = create(:poll_officer_assignment, poll: poll, officer: officer1)
officer_assignment_2 = create(:poll_officer_assignment, poll: poll, officer: officer2)
create(:poll_officer, name: "John Snow", polls: [poll])
create(:poll_officer, name: "John Silver", polls: [poll])
create(:poll_officer, name: "John Edwards")
visit admin_poll_path(poll)
@@ -50,9 +40,9 @@ describe "Officer Assignments" do
click_button "Search"
within("#search-officers-results") do
expect(page).to have_content officer1.name
expect(page).to have_content officer2.name
expect(page).not_to have_content officer3.name
expect(page).to have_content "John Snow"
expect(page).to have_content "John Silver"
expect(page).not_to have_content "John Edwards"
end
end

View File

@@ -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"
@@ -215,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"
@@ -236,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

@@ -322,9 +322,8 @@ describe "System Emails" do
proposal_notification = create(:proposal_notification, proposal: proposal,
title: "Proposal A Title",
body: "Proposal A Notification Body")
voter = create(:user, :level_two)
voter = create(:user, :level_two, followables: [proposal])
create(:notification, notifiable: proposal_notification, user: voter, emailed_at: nil)
create(:follow, user: voter, followable: proposal)
visit admin_system_emails_path

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

@@ -116,13 +116,10 @@ describe "Executions" do
end
scenario "renders last milestone's image if investment has multiple milestones with images associated" do
milestone1 = create(:milestone, milestoneable: investment1)
milestone2 = create(:milestone, milestoneable: investment1)
milestone3 = create(:milestone, milestoneable: investment1)
milestone4 = create(:milestone, milestoneable: investment1)
create(:image, imageable: milestone2, title: "Image for first milestone with image")
create(:image, imageable: milestone3, title: "Image for second milestone with image")
create(:milestone, milestoneable: investment1)
create(:milestone, :with_image, image_title: "First image", milestoneable: investment1)
create(:milestone, :with_image, image_title: "Second image", milestoneable: investment1)
create(:milestone, milestoneable: investment1)
visit budget_path(budget)
@@ -130,7 +127,7 @@ describe "Executions" do
click_link "Milestones"
expect(page).to have_content(investment1.title)
expect(page).to have_css("img[alt='#{milestone3.image.title}']")
expect(page).to have_css("img[alt='Second image']")
end
end
@@ -276,19 +273,11 @@ describe "Executions" do
end
context "Heading Order" do
def create_heading_with_investment_with_milestone(group:, name:)
heading = create(:budget_heading, group: group, name: name)
investment = create(:budget_investment, :winner, heading: heading)
milestone = create(:milestone, milestoneable: investment)
heading
end
scenario "Non-city headings are displayed in alphabetical order" do
heading.destroy!
z_heading = create_heading_with_investment_with_milestone(group: group, name: "Zzz")
a_heading = create_heading_with_investment_with_milestone(group: group, name: "Aaa")
m_heading = create_heading_with_investment_with_milestone(group: group, name: "Mmm")
z_heading = create(:budget_heading, :with_investment_with_milestone, group: group, name: "Zzz")
a_heading = create(:budget_heading, :with_investment_with_milestone, group: group, name: "Aaa")
m_heading = create(:budget_heading, :with_investment_with_milestone, group: group, name: "Mmm")
visit budget_executions_path(budget)

View File

@@ -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)
@@ -1725,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)
@@ -1746,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

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

View File

@@ -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)
@@ -451,9 +450,8 @@ describe "Debates" do
end
scenario "are shown on index header when account setting is enabled" do
user = create(:user)
proposal = create(:proposal, tag_list: "Sport")
create(:follow, followable: proposal, user: user)
user = create(:user, followables: [proposal])
login_as(user)
visit debates_path
@@ -466,9 +464,8 @@ describe "Debates" do
end
scenario "should display text when there are no results" do
user = create(:user)
proposal = create(:proposal, tag_list: "Distinct_to_sport")
create(:follow, followable: proposal, user: user)
user = create(:user, followables: [proposal])
login_as(user)
visit debates_path
@@ -490,9 +487,8 @@ describe "Debates" do
end
scenario "can be sorted when there's a logged user" do
user = create(:user)
proposal = create(:proposal, tag_list: "Sport")
create(:follow, followable: proposal, user: user)
user = create(:user, followables: [proposal])
login_as(user)
visit debates_path
@@ -511,9 +507,8 @@ describe "Debates" do
end
scenario "are not shown if account setting is disabled" do
user = create(:user, recommended_debates: false)
proposal = create(:proposal, tag_list: "Sport")
create(:follow, followable: proposal, user: user)
user = create(:user, recommended_debates: false, followables: [proposal])
login_as(user)
visit debates_path
@@ -523,9 +518,8 @@ describe "Debates" do
end
scenario "are automatically disabled when dismissed from index", :js do
user = create(:user)
proposal = create(:proposal, tag_list: "Sport")
create(:follow, followable: proposal, user: user)
user = create(:user, followables: [proposal])
login_as(user)
visit debates_path
@@ -960,14 +954,13 @@ describe "Debates" do
end
scenario "Reorder by recommendations results maintaing search" do
user = create(:user, recommended_debates: true)
proposal = create(:proposal, tag_list: "Sport")
user = create(:user, recommended_debates: true, followables: [proposal])
debate1 = create(:debate, title: "Show you got", cached_votes_total: 10, tag_list: "Sport")
debate2 = create(:debate, title: "Show what you got", cached_votes_total: 1, tag_list: "Sport")
debate3 = create(:debate, title: "Do not display with same tag", cached_votes_total: 100, tag_list: "Sport")
debate4 = create(:debate, title: "Do not display", cached_votes_total: 1)
proposal1 = create(:proposal, tag_list: "Sport")
create(:follow, followable: proposal1, user: user)
login_as(user)
visit debates_path

View File

@@ -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)
@@ -306,13 +303,11 @@ describe "Emails" do
scenario "notifications moderated are not sent" do
user = create(:user, email_digest: true)
proposal = create(:proposal)
proposal_notification = create(:proposal_notification, proposal: proposal)
notification = create(:notification, notifiable: proposal_notification)
notification = create(:notification, :for_proposal_notification)
reset_mailer
proposal_notification.moderate_system_email(create(:administrator).user)
notification.notifiable.moderate_system_email(create(:administrator).user)
email_digest = EmailDigest.new(user)
email_digest.deliver(Time.current)

View File

@@ -25,9 +25,8 @@ describe "Home" do
describe "Recommended" do
before do
user = create(:user)
proposal = create(:proposal, tag_list: "Sport")
create(:follow, followable: proposal, user: user)
user = create(:user, followables: [proposal])
login_as(user)
end

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

@@ -128,7 +128,7 @@ describe "Notifications" do
end
scenario "Notification's notifiable model no longer includes Notifiable module" do
create(:notification, notifiable: create(:poll_question), user: user)
create(:notification, :for_poll_question, user: user)
click_notifications_icon
expect(page).to have_content("This resource is not available anymore.", count: 1)

View File

@@ -19,13 +19,9 @@ describe "Officing Results", :with_frozen_time do
end
scenario "Only polls where user is officer for results are accessible" do
regular_officer_assignment_1 = create(:poll_officer_assignment, officer: poll_officer)
regular_officer_assignment_2 = create(:poll_officer_assignment, officer: poll_officer)
not_allowed_poll_1 = create(:poll, :expired)
not_allowed_poll_2 = regular_officer_assignment_1.booth_assignment.poll
not_allowed_poll_2.update(ends_at: 1.day.ago)
not_allowed_poll_3 = regular_officer_assignment_2.booth_assignment.poll
not_allowed_poll_2 = create(:poll, officers: [poll_officer], ends_at: 1.day.ago)
not_allowed_poll_3 = create(:poll, officers: [poll_officer])
visit root_path
click_link "Polling officers"

View File

@@ -136,13 +136,11 @@ describe "Polls" do
end
scenario "Show answers with videos" do
question = create(:poll_question, poll: poll)
answer = create(:poll_question_answer, question: question, title: "Chewbacca")
video = create(:poll_answer_video, answer: answer, title: "Awesome project video", url: "https://www.youtube.com/watch?v=123")
create(:poll_answer_video, poll: poll, title: "Awesome video", url: "youtube.com/watch?v=123")
visit poll_path(poll)
expect(page).to have_link("Awesome project video", href: "https://www.youtube.com/watch?v=123")
expect(page).to have_link("Awesome video", href: "youtube.com/watch?v=123")
end
scenario "Lists questions from proposals as well as regular ones" do

View File

@@ -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)
@@ -40,9 +38,8 @@ describe "Proposal Notifications" do
scenario "Send a notification (Follower)" do
proposal = create(:proposal)
user_follower = create(:user)
create(:follow, :followed_proposal, user: user_follower, followable: proposal)
create(:user, :level_two, followables: [proposal])
create_proposal_notification(proposal)
expect(Notification.count).to eq(1)
@@ -51,12 +48,8 @@ describe "Proposal Notifications" do
scenario "Send a notification (Follower and Voter)" do
proposal = create(:proposal)
user_voter_follower = create(:user)
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)
create(:user, followables: [proposal], votables: [proposal])
create(:user, followables: [proposal])
create_proposal_notification(proposal)
@@ -65,11 +58,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 +68,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 +142,9 @@ describe "Proposal Notifications" do
scenario "Message about receivers (Same Followers and Voters)" do
author = create(:user)
proposal = create(:proposal, author: author)
voter_follower = create(:user)
user_voter_follower = create(:user)
create(:follow, :followed_proposal, user: user_voter_follower, followable: proposal)
create(:vote, voter: user_voter_follower, votable: proposal)
proposal = create(:proposal, author: author, voters: [voter_follower], followers: [voter_follower])
login_as(author)
visit new_proposal_notification_path(proposal_id: proposal.id)
@@ -208,15 +195,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
@@ -266,15 +249,11 @@ describe "Proposal Notifications" do
scenario "Followers should receive a notification", :js do
author = create(:user)
user1 = create(:user)
user2 = create(:user)
user3 = create(:user)
proposal = create(:proposal, author: author)
create(:follow, :followed_proposal, user: user1, followable: proposal)
create(:follow, :followed_proposal, user: user2, followable: proposal)
user1 = create(:user, followables: [proposal])
user2 = create(:user, followables: [proposal])
user3 = create(:user)
login_as author.reload
visit root_path
@@ -322,10 +301,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 +333,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
@@ -376,11 +349,8 @@ describe "Proposal Notifications" do
scenario "for the same proposal", :js do
author = create(:user)
user = create(:user)
proposal = create(:proposal, author: author)
create(:follow, :followed_proposal, user: user, followable: proposal)
user = create(:user, followables: [proposal])
login_as author.reload

View File

@@ -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
@@ -750,9 +749,8 @@ describe "Proposals" do
end
scenario "are shown on index header when account setting is enabled" do
user = create(:user)
proposal = create(:proposal, tag_list: "Sport")
create(:follow, followable: proposal, user: user)
user = create(:user, followables: [proposal])
login_as(user)
visit proposals_path
@@ -765,9 +763,8 @@ describe "Proposals" do
end
scenario "should display text when there are no results" do
user = create(:user)
proposal = create(:proposal, tag_list: "Distinct_to_sport")
create(:follow, followable: proposal, user: user)
user = create(:user, followables: [proposal])
login_as(user)
visit proposals_path
@@ -789,9 +786,8 @@ describe "Proposals" do
end
scenario "can be sorted when there's a logged user" do
user = create(:user)
proposal = create(:proposal, tag_list: "Sport")
create(:follow, followable: proposal, user: user)
user = create(:user, followables: [proposal])
login_as(user)
visit proposals_path
@@ -810,9 +806,8 @@ describe "Proposals" do
end
scenario "are not shown if account setting is disabled" do
user = create(:user, recommended_proposals: false)
proposal = create(:proposal, tag_list: "Sport")
create(:follow, followable: proposal, user: user)
user = create(:user, recommended_proposals: false, followables: [proposal])
login_as(user)
visit proposals_path
@@ -822,9 +817,8 @@ describe "Proposals" do
end
scenario "are automatically disabled when dismissed from index", :js do
user = create(:user)
proposal = create(:proposal, tag_list: "Sport")
create(:follow, followable: proposal, user: user)
user = create(:user, followables: [proposal])
login_as(user)
visit proposals_path
@@ -997,10 +991,10 @@ describe "Proposals" do
end
scenario "do not show recommented proposal in selected proposals list" do
create(:proposal, title: "Recommended", tag_list: "Economy")
user = create(:user)
create(:follow, followable: create(:proposal, tag_list: "Economy"), user: user)
create(:proposal, tag_list: "Economy", followers: [user])
create(:proposal, title: "Recommended", tag_list: "Economy")
login_as(user)
visit proposals_path
@@ -1481,12 +1475,11 @@ describe "Proposals" do
scenario "Reorder by recommendations results maintaing search" do
user = create(:user, recommended_proposals: true)
proposal1 = create(:proposal, title: "Show you got", cached_votes_up: 10, tag_list: "Sport")
proposal2 = create(:proposal, title: "Show what you got", cached_votes_up: 1, tag_list: "Sport")
proposal3 = create(:proposal, title: "Do not display with same tag", cached_votes_up: 100, tag_list: "Sport")
proposal4 = create(:proposal, title: "Do not display", cached_votes_up: 1)
proposal5 = create(:proposal, tag_list: "Sport")
create(:follow, followable: proposal5, user: user)
create(:proposal, title: "Show you got", cached_votes_up: 10, tag_list: "Sport")
create(:proposal, title: "Show what you got", cached_votes_up: 1, tag_list: "Sport")
create(:proposal, title: "Do not display with same tag", cached_votes_up: 100, tag_list: "Sport")
create(:proposal, title: "Do not display", cached_votes_up: 1)
create(:proposal, tag_list: "Sport", followers: [user])
login_as(user)
visit proposals_path

View File

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

View File

@@ -130,28 +130,25 @@ describe "Topics" do
context "Destroy" do
scenario "Can destroy a topic" do
proposal = create(:proposal)
community = proposal.community
user = create(:user)
topic = create(:topic, community: community, author: user)
topic = create(:topic, :with_community, author: user)
login_as(user)
visit community_topic_path(community, topic)
visit community_topic_path(topic.community, topic)
click_link "Delete topic"
expect(page).to have_content "Topic deleted successfully."
expect(page).not_to have_content topic.title
expect(page).to have_current_path(community_path(community))
expect(page).to have_current_path(community_path(topic.community))
end
scenario "Can not destroy a topic when user logged is not an author" do
proposal = create(:proposal)
community = proposal.community
topic = create(:topic, community: community)
user = create(:user)
login_as(user)
topic = create(:topic, :with_community)
visit community_path(community)
login_as(user)
visit community_path(topic.community)
expect(page).not_to have_link "Delete"
end

View File

@@ -239,8 +239,7 @@ describe "Users" do
end
scenario "Display interests" do
proposal = create(:proposal, tag_list: "Sport")
create(:follow, :followed_proposal, followable: proposal, user: @user)
create(:proposal, tag_list: "Sport", followers: [@user])
login_as(@user)
visit account_path
@@ -255,8 +254,7 @@ describe "Users" do
end
scenario "Not display interests when proposal has been destroyed" do
proposal = create(:proposal, tag_list: "Sport")
create(:follow, :followed_proposal, followable: proposal, user: @user)
proposal = create(:proposal, tag_list: "Sport", followers: [@user])
proposal.destroy
login_as(@user)
@@ -279,8 +277,7 @@ describe "Users" do
end
scenario "User can display public page" do
proposal = create(:proposal, tag_list: "Sport")
create(:follow, :followed_proposal, followable: proposal, user: @user)
create(:proposal, tag_list: "Sport", followers: [@user])
login_as(@user)
visit account_path
@@ -296,8 +293,7 @@ describe "Users" do
end
scenario "Is always visible for the owner" do
proposal = create(:proposal, tag_list: "Sport")
create(:follow, :followed_proposal, followable: proposal, user: @user)
create(:proposal, tag_list: "Sport", followers: [@user])
login_as(@user)
visit account_path
@@ -310,8 +306,7 @@ describe "Users" do
end
scenario "Is always visible for admins" do
proposal = create(:proposal, tag_list: "Sport")
create(:follow, :followed_proposal, followable: proposal, user: @user)
create(:proposal, tag_list: "Sport", followers: [@user])
login_as(@user)
visit account_path
@@ -327,8 +322,7 @@ describe "Users" do
end
scenario "Is always visible for moderators" do
proposal = create(:proposal, tag_list: "Sport")
create(:follow, :followed_proposal, followable: proposal, user: @user)
create(:proposal, tag_list: "Sport", followers: [@user])
login_as(@user)
visit account_path
@@ -344,8 +338,7 @@ describe "Users" do
end
scenario "Should display generic interests title" do
proposal = create(:proposal, tag_list: "Sport")
create(:follow, :followed_proposal, followable: proposal, user: @user)
create(:proposal, tag_list: "Sport", followers: [@user])
@user.update(public_interests: true)
visit user_path(@user, filter: "follows", page: "1")
@@ -354,8 +347,7 @@ describe "Users" do
end
scenario "Should display custom interests title when user is visiting own user page" do
proposal = create(:proposal, tag_list: "Sport")
create(:follow, :followed_proposal, followable: proposal, user: @user)
create(:proposal, tag_list: "Sport", followers: [@user])
@user.update(public_interests: true)
login_as(@user)
@@ -431,8 +423,7 @@ describe "Users" do
end
scenario "Active following tab by default when follows filters selected", :js do
proposal = create(:proposal, author: @user)
create(:follow, followable: proposal, user: @user)
create(:proposal, author: @user, followers: [@user])
visit user_path(@user, filter: "follows")
@@ -440,13 +431,9 @@ describe "Users" do
end
scenario "Gracefully handle followables that have been hidden" do
active_proposal = create(:proposal)
hidden_proposal = create(:proposal)
create(:proposal, followers: [@user])
create(:proposal, followers: [@user]) { |proposal| proposal.hide }
create(:follow, followable: active_proposal, user: @user)
create(:follow, followable: hidden_proposal, user: @user)
hidden_proposal.hide
visit user_path(@user)
expect(page).to have_content("1 Following")
@@ -455,8 +442,7 @@ describe "Users" do
describe "Proposals" do
scenario "Display following tab when user is following one proposal at least" do
proposal = create(:proposal)
create(:follow, followable: proposal, user: @user)
create(:proposal, followers: [@user])
visit user_path(@user)
@@ -464,8 +450,7 @@ describe "Users" do
end
scenario "Display proposal tab when user is following one proposal at least" do
proposal = create(:proposal)
create(:follow, followable: proposal, user: @user)
create(:proposal, followers: [@user])
visit user_path(@user, filter: "follows")
@@ -479,8 +464,8 @@ describe "Users" do
end
scenario "Display proposals with link to proposal" do
proposal = create(:proposal, author: @user)
create(:follow, followable: proposal, user: @user)
proposal = create(:proposal, author: @user, followers: [@user])
login_as @user
visit user_path(@user, filter: "follows")
@@ -514,8 +499,7 @@ describe "Users" do
describe "Budget Investments" do
scenario "Display following tab when user is following one budget investment at least" do
budget_investment = create(:budget_investment)
create(:follow, followable: budget_investment, user: @user)
create(:budget_investment, followers: [@user])
visit user_path(@user)
@@ -523,8 +507,7 @@ describe "Users" do
end
scenario "Display budget investment tab when user is following one budget investment at least" do
budget_investment = create(:budget_investment)
create(:follow, followable: budget_investment, user: @user)
create(:budget_investment, followers: [@user])
visit user_path(@user, filter: "follows")
@@ -539,8 +522,7 @@ describe "Users" do
scenario "Display budget investment with link to budget investment" do
user = create(:user, :level_two)
budget_investment = create(:budget_investment, author: user)
create(:follow, followable: budget_investment, user: user)
budget_investment = create(:budget_investment, author: user, followers: [user])
visit user_path(user, filter: "follows")
click_link "Investments"

View File

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

View File

@@ -21,11 +21,8 @@ describe EmailDigest do
it "returns only proposal notifications" do
user = create(:user)
proposal_notification = create(:proposal_notification)
comment = create(:comment)
notification1 = create(:notification, notifiable: proposal_notification, user: user)
notification2 = create(:notification, notifiable: comment, user: user)
notification1 = create(:notification, :for_proposal_notification, user: user)
notification2 = create(:notification, :for_comment, user: user)
email_digest = EmailDigest.new(user)
@@ -40,8 +37,7 @@ describe EmailDigest do
it "returns true when notifications have not been emailed" do
user = create(:user)
proposal_notification = create(:proposal_notification)
notification = create(:notification, notifiable: proposal_notification, user: user)
notification = create(:notification, :for_proposal_notification, user: user)
email_digest = EmailDigest.new(user)
expect(email_digest.pending_notifications?).to be
@@ -50,8 +46,7 @@ describe EmailDigest do
it "returns false when notifications have been emailed" do
user = create(:user)
proposal_notification = create(:proposal_notification)
notification = create(:notification, notifiable: proposal_notification, user: user, emailed_at: Time.current)
notification = create(:notification, :for_proposal_notification, user: user, emailed_at: Time.current)
email_digest = EmailDigest.new(user)
expect(email_digest.pending_notifications?).not_to be
@@ -70,8 +65,7 @@ describe EmailDigest do
it "delivers email if notifications pending" do
user = create(:user)
proposal_notification = create(:proposal_notification)
notification = create(:notification, notifiable: proposal_notification, user: user)
notification = create(:notification, :for_proposal_notification, user: user)
reset_mailer
email_digest = EmailDigest.new(user)
@@ -84,8 +78,7 @@ describe EmailDigest do
it "does not deliver email if no notifications pending" do
user = create(:user)
proposal_notification = create(:proposal_notification)
create(:notification, notifiable: proposal_notification, user: user, emailed_at: Time.current)
create(:notification, :for_proposal_notification, user: user, emailed_at: Time.current)
reset_mailer
email_digest = EmailDigest.new(user)

View File

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

View File

@@ -13,11 +13,8 @@ describe Budget::Ballot do
it "is not valid with the same investment twice" do
budget = create(:budget)
heading = create(:budget_heading, budget: budget)
investment = create(:budget_investment, :selected, heading: heading)
ballot = create(:budget_ballot, budget: budget)
ballot.investments << investment
investment = create(:budget_investment, :selected, budget: budget)
ballot = create(:budget_ballot, budget: budget.reload, investments: [investment])
expect { ballot.investments << investment }.to raise_error(ActiveRecord::RecordNotUnique)
end
@@ -103,16 +100,14 @@ describe Budget::Ballot do
it "returns the heading with balloted investments for a group" do
budget = create(:budget)
ballot = create(:budget_ballot, budget: budget)
group = create(:budget_group, budget: budget)
heading1 = create(:budget_heading, group: group)
heading2 = create(:budget_heading, group: group)
inv1 = create(:budget_investment, :selected, heading: heading1)
inv2 = create(:budget_investment, :selected, heading: heading2)
ballot = create(:budget_ballot, budget: budget)
ballot.investments << inv2
create(:budget_investment, :selected, heading: heading1)
create(:budget_investment, :selected, heading: heading2, ballots: [ballot])
expect(ballot.heading_for_group(group)).to eq heading2
end

View File

@@ -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)
@@ -990,8 +976,7 @@ describe Budget::Investment do
inv1 = create(:budget_investment, :selected, budget: budget, heading: california)
inv2 = create(:budget_investment, :selected, budget: budget, heading: new_york)
ballot = create(:budget_ballot, user: user, budget: budget)
ballot.investments << inv1
ballot = create(:budget_ballot, user: user, budget: budget, investments: [inv1])
expect(inv2.reason_for_not_being_ballotable_by(user, ballot)).to eq(:different_heading_assigned_html)
end
@@ -1003,8 +988,7 @@ describe Budget::Investment do
inv1 = create(:budget_investment, :selected, budget: budget, heading: carabanchel, price: 30)
inv2 = create(:budget_investment, :selected, budget: budget, heading: carabanchel, price: 10)
ballot = create(:budget_ballot, user: user, budget: budget)
ballot.investments << inv1
ballot = create(:budget_ballot, user: user, budget: budget, investments: [inv1])
expect(inv2.reason_for_not_being_ballotable_by(user, ballot)).to eq(:not_enough_money_html)
end
@@ -1074,10 +1058,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)
@@ -1098,10 +1079,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)
@@ -1119,10 +1097,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)
@@ -1137,10 +1112,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

@@ -6,24 +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], 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(: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)
create(:poll_voter, :from_booth, user: poll_balloter, budget: budget)
create(:poll_voter, :from_booth, user: non_participant, budget: create(:budget))
@@ -46,9 +39,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)
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
@@ -63,9 +54,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)
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
@@ -78,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

View File

@@ -749,11 +749,11 @@ describe Debate do
end
it "returns debates related to the user's interests ordered by cached_votes_total" do
create(:proposal, tag_list: "Sport", followers: [user])
debate1 = create(:debate, cached_votes_total: 1, tag_list: "Sport")
debate2 = create(:debate, cached_votes_total: 5, tag_list: "Sport")
debate3 = create(:debate, cached_votes_total: 10, tag_list: "Sport")
proposal = create(:proposal, tag_list: "Sport")
create(:follow, followable: proposal, user: user)
results = Debate.recommendations(user).sort_by_recommendations
@@ -761,9 +761,8 @@ describe Debate do
end
it "does not return debates unrelated to user interests" do
proposal1 = create(:proposal, tag_list: "Sport")
create(:follow, followable: proposal1, user: user)
debate2 = create(:debate, tag_list: "Politics")
create(:proposal, tag_list: "Sport", followers: [user])
create(:debate, tag_list: "Politics")
results = Debate.recommendations(user)
@@ -771,9 +770,8 @@ describe Debate do
end
it "does not return debates when user is the author" do
proposal = create(:proposal, tag_list: "Sport")
create(:follow, followable: proposal, user: user)
debate1 = create(:debate, author: user, tag_list: "Sport")
create(:proposal, tag_list: "Sport", followers: [user])
create(:debate, author: user, tag_list: "Sport")
results = Debate.recommendations(user)

View File

@@ -65,13 +65,9 @@ describe Poll::Officer do
it "returns polls ordered by end date (desc)" do
officer = create(:poll_officer)
poll_1 = create(:poll, ends_at: 1.day.ago)
poll_2 = create(:poll, ends_at: 10.days.from_now)
poll_3 = create(:poll, ends_at: 10.days.ago)
[poll_1, poll_2, poll_3].each do |poll|
create(:poll_officer_assignment, officer: officer, poll: poll)
end
poll_1 = create(:poll, ends_at: 1.day.ago, officers: [officer])
poll_2 = create(:poll, ends_at: 10.days.from_now, officers: [officer])
poll_3 = create(:poll, ends_at: 10.days.ago, officers: [officer])
assigned_polls = officer.voting_days_assigned_polls
@@ -87,9 +83,9 @@ describe Poll::Officer do
poll_2 = create(:poll)
poll_3 = create(:poll)
create(:poll_officer_assignment, poll: poll_1, officer: officer, date: poll_1.starts_at, final: true)
create(:poll_officer_assignment, poll: poll_1, officer: officer, date: poll_1.ends_at, final: true)
create(:poll_officer_assignment, poll: poll_2, officer: officer, final: true)
create(:poll_officer_assignment, :final, poll: poll_1, officer: officer, date: poll_1.starts_at)
create(:poll_officer_assignment, :final, poll: poll_1, officer: officer, date: poll_1.ends_at)
create(:poll_officer_assignment, :final, poll: poll_2, officer: officer)
create(:poll_officer_assignment, poll: poll_3, officer: officer)
assigned_polls = officer.final_days_assigned_polls
@@ -119,7 +115,7 @@ describe Poll::Officer do
poll_3 = create(:poll, ends_at: 10.days.ago)
[poll_1, poll_2, poll_3].each do |poll|
create(:poll_officer_assignment, officer: officer, poll: poll, final: true)
create(:poll_officer_assignment, :final, officer: officer, poll: poll)
end
assigned_polls = officer.final_days_assigned_polls

View File

@@ -51,28 +51,24 @@ describe Poll::Voter do
end
it "is not valid if the user has already voted in different booth in the same poll" do
booth_assignment1 = create(:poll_booth_assignment, poll: poll)
booth_assignment2 = create(:poll_booth_assignment, poll: poll)
user = create(:user, :level_two)
voter1 = create(:poll_voter, user: user, poll: poll, booth_assignment: booth_assignment1)
voter2 = build(:poll_voter, user: user, poll: poll, booth_assignment: booth_assignment2)
create(:poll_voter, :from_booth, user: user, poll: poll, booth: create(:poll_booth))
expect(voter2).not_to be_valid
expect(voter2.errors.messages[:document_number]).to eq(["User has already voted"])
voter = build(:poll_voter, :from_booth, user: user, poll: poll, booth: booth)
expect(voter).not_to be_valid
expect(voter.errors.messages[:document_number]).to eq(["User has already voted"])
end
it "is valid if the user has already voted in the same booth in different poll" do
booth_assignment1 = create(:poll_booth_assignment, booth: booth)
booth_assignment2 = create(:poll_booth_assignment, booth: booth, poll: poll)
user = create(:user, :level_two)
voter1 = create(:poll_voter, user: user, booth_assignment: booth_assignment1)
voter2 = build(:poll_voter, user: user, booth_assignment: booth_assignment2)
create(:poll_voter, :from_booth, user: user, booth: booth, poll: create(:poll))
expect(voter2).to be_valid
voter = build(:poll_voter, :from_booth, user: user, booth: booth, poll: poll)
expect(voter).to be_valid
end
it "is not valid if the user has voted via web" do

View File

@@ -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,25 @@ describe Proposal do
it "returns voters and followers" do
proposal = create(:proposal)
voter = create(:user, :level_two)
follower = create(:user, :level_two)
follow = create(:follow, user: follower, followable: proposal)
create(:vote, voter: voter, votable: proposal)
voter = create(:user, :level_two, votables: [proposal])
follower = create(:user, :level_two, followables: [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)
follow = create(:follow, user: voter_and_follower, followable: proposal)
create(:vote, voter: voter_and_follower, votable: proposal)
voter_and_follower = create(:user, :level_two, votables: [proposal], followables: [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)
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)
proposal = create(:proposal, author: author,
voters: [author, voter_and_follower],
followers: [author, voter_and_follower])
expect(proposal.users_to_notify).to eq([voter_and_follower])
end
@@ -963,11 +949,11 @@ describe Proposal do
end
it "returns proposals related to the user's interests ordered by cached_votes_up" do
create(:proposal, tag_list: "Sport", followers: [user])
proposal1 = create(:proposal, cached_votes_up: 1, tag_list: "Sport")
proposal2 = create(:proposal, cached_votes_up: 5, tag_list: "Sport")
proposal3 = create(:proposal, cached_votes_up: 10, tag_list: "Sport")
proposal4 = create(:proposal, tag_list: "Sport")
create(:follow, followable: proposal4, user: user)
results = Proposal.recommendations(user).sort_by_recommendations
@@ -975,9 +961,8 @@ describe Proposal do
end
it "does not return proposals unrelated to user interests" do
proposal1 = create(:proposal, tag_list: "Sport")
proposal2 = create(:proposal, tag_list: "Politics")
create(:follow, followable: proposal1, user: user)
create(:proposal, tag_list: "Sport", followers: [user])
create(:proposal, tag_list: "Politics")
results = Proposal.recommendations(user)
@@ -985,8 +970,7 @@ describe Proposal do
end
it "does not return proposals when user is follower" do
proposal1 = create(:proposal, tag_list: "Sport")
create(:follow, followable: proposal1, user: user)
create(:proposal, tag_list: "Sport", followers: [user])
results = Proposal.recommendations(user)
@@ -994,9 +978,8 @@ describe Proposal do
end
it "does not return proposals when user is the author" do
proposal1 = create(:proposal, tag_list: "Sport")
proposal2 = create(:proposal, author: user, tag_list: "Sport")
create(:follow, followable: proposal1, user: user)
create(:proposal, tag_list: "Sport", followers: [user])
create(:proposal, author: user, tag_list: "Sport")
results = Proposal.recommendations(user)
@@ -1004,9 +987,8 @@ describe Proposal do
end
it "does not return archived proposals" do
proposal1 = create(:proposal, tag_list: "Sport")
archived_proposal = create(:proposal, :archived, tag_list: "Sport")
create(:follow, followable: proposal1, user: user)
create(:proposal, tag_list: "Sport", followers: [user])
create(:proposal, :archived, tag_list: "Sport")
results = Proposal.recommendations(user)
@@ -1014,10 +996,8 @@ describe Proposal do
end
it "does not return already supported proposals" do
proposal1 = create(:proposal, tag_list: "Health")
proposal2 = create(:proposal, tag_list: "Health")
create(:vote, votable: proposal1, voter: user)
create(:follow, followable: proposal2, user: user)
create(:proposal, tag_list: "Health", followers: [user])
create(:proposal, tag_list: "Health", voters: [user])
results = Proposal.recommendations(user)

View File

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

View File

@@ -4,8 +4,7 @@ describe Tag do
it "decreases tag_count when a debate is hidden" do
debate = create(:debate)
tag = create(:tag)
tagging = create(:tagging, tag: tag, taggable: debate)
tag = create(:tag, taggables: [debate])
expect(tag.taggings_count).to eq(1)
@@ -17,8 +16,7 @@ describe Tag do
it "decreases tag_count when a proposal is hidden" do
proposal = create(:proposal)
tag = create(:tag)
tagging = create(:tagging, tag: tag, taggable: proposal)
tag = create(:tag, taggables: [proposal])
expect(tag.taggings_count).to eq(1)

View File

@@ -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
@@ -695,15 +690,13 @@ describe User do
let(:user) { create(:user) }
it "returns followed object tags" do
proposal = create(:proposal, tag_list: "Sport")
create(:follow, followable: proposal, user: user)
create(:proposal, tag_list: "Sport", followers: [user])
expect(user.interests).to eq ["Sport"]
end
it "deals gracefully with hidden proposals" do
proposal = create(:proposal, tag_list: "Sport")
create(:follow, followable: proposal, user: user)
proposal = create(:proposal, tag_list: "Sport", followers: [user])
proposal.hide
@@ -711,13 +704,9 @@ describe User do
end
it "discards followed objects duplicated tags" do
proposal1 = create(:proposal, tag_list: "Sport")
proposal2 = create(:proposal, tag_list: "Sport")
budget_investment = create(:budget_investment, tag_list: "Sport")
create(:follow, followable: proposal1, user: user)
create(:follow, followable: proposal2, user: user)
create(:follow, followable: budget_investment, user: user)
create(:proposal, tag_list: "Sport", followers: [user])
create(:proposal, tag_list: "Sport", followers: [user])
create(:budget_investment, tag_list: "Sport", followers: [user])
expect(user.interests).to eq ["Sport"]
end

View File

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

View File

@@ -67,8 +67,7 @@ shared_examples "followable" do |followable_class_name, followable_path, followa
end
scenario "Display unfollow button when user already following" do
user = create(:user)
follow = create(:follow, user: user, followable: followable)
user = create(:user, followables: [followable])
login_as(user)
visit send(followable_path, arguments)
@@ -77,8 +76,7 @@ shared_examples "followable" do |followable_class_name, followable_path, followa
end
scenario "Updates follow button & show destroy notice after unfollow button is clicked", :js do
user = create(:user)
follow = create(:follow, user: user, followable: followable)
user = create(:user, followables: [followable])
login_as(user)
visit send(followable_path, arguments)
@@ -91,8 +89,7 @@ shared_examples "followable" do |followable_class_name, followable_path, followa
end
scenario "Should display destroy follower notice after user clicks on unfollow button", :js do
user = create(:user)
follow = create(:follow, user: user, followable: followable)
user = create(:user, followables: [followable])
login_as(user)
destroy_notice_message = t("shared.followable.#{followable_class_name}.destroy.notice_html")