Skip to content

Commit

Permalink
Merge pull request consuldemocracy#3727 from consul/simplify_valuator…
Browse files Browse the repository at this point in the history
…_factories

Simplify valuator factories
  • Loading branch information
javierm committed Sep 30, 2019
2 parents 0187ffb + 427cec1 commit 9ddc3e2
Show file tree
Hide file tree
Showing 8 changed files with 56 additions and 114 deletions.
4 changes: 4 additions & 0 deletions spec/factories/budgets.rb
Original file line number Diff line number Diff line change
Expand Up @@ -173,6 +173,10 @@
administrator
end

trait :with_valuator do
valuators { [create(:valuator)] }
end

trait :flagged do
after :create do |investment|
Flag.flag(create(:user), investment)
Expand Down
41 changes: 15 additions & 26 deletions spec/features/admin/budget_investments_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -80,21 +80,17 @@
end

scenario "Display admin and valuator assignments" do
budget_investment1 = create(:budget_investment, budget: budget)
budget_investment2 = create(:budget_investment, budget: budget)
budget_investment3 = create(:budget_investment, budget: budget)

olga = create(:user, username: "Olga")
miriam = create(:user, username: "Miriam")
valuator1 = create(:valuator, user: olga, description: "Valuator Olga")
valuator2 = create(:valuator, user: miriam, description: "Valuator Miriam")
valuator_group = create(:valuator_group, name: "Health")
admin = create(:administrator, user: create(:user, username: "Gema"))

budget_investment1.valuators << valuator1
budget_investment2.valuators << valuator1
budget_investment2.valuators << valuator2
budget_investment2.valuator_groups << valuator_group
budget_investment1 = create(:budget_investment, budget: budget, valuators: [valuator1])
budget_investment2 = create(:budget_investment, budget: budget, valuators: [valuator1, valuator2],
valuator_groups: [valuator_group])
budget_investment3 = create(:budget_investment, budget: budget)

visit admin_budget_budget_investments_path(budget_id: budget.id)

Expand Down Expand Up @@ -212,9 +208,7 @@
user = create(:user)
valuator = create(:valuator, user: user, description: "Valuator 1")

budget_investment = create(:budget_investment, title: "Realocate visitors", budget: budget)
budget_investment.valuators << valuator

create(:budget_investment, title: "Realocate visitors", budget: budget, valuators: [valuator])
create(:budget_investment, title: "Destroy the city", budget: budget)

visit admin_budget_budget_investments_path(budget_id: budget.id)
Expand Down Expand Up @@ -246,11 +240,8 @@
health_group = create(:valuator_group, name: "Health")
culture_group = create(:valuator_group, name: "Culture")

budget_investment1 = create(:budget_investment, title: "Build a hospital", budget: budget)
budget_investment1.valuator_groups << health_group

budget_investment2 = create(:budget_investment, title: "Build a theatre", budget: budget)
budget_investment2.valuator_groups << culture_group
create(:budget_investment, title: "Build a hospital", budget: budget, valuator_groups: [health_group])
create(:budget_investment, title: "Build a theatre", budget: budget, valuator_groups: [culture_group])

visit admin_budget_budget_investments_path(budget_id: budget)
expect(page).to have_link("Build a hospital")
Expand Down Expand Up @@ -452,8 +443,7 @@

scenario "Filtering by assignment status" do
create(:budget_investment, :with_administrator, title: "Assigned idea", budget: budget)
create(:budget_investment, title: "Evaluating...", budget: budget,
valuators: [create(:valuator)])
create(:budget_investment, :with_valuator, title: "Evaluating...", budget: budget)
create(:budget_investment, title: "With group", budget: budget,
valuator_groups: [create(:valuator_group)])

Expand Down Expand Up @@ -981,8 +971,9 @@
unfeasibility_explanation: "It is impossible",
price: 1234,
price_first_year: 1000,
administrator: administrator)
budget_investment.valuators << valuator
administrator: administrator,
valuators: [valuator]
)

visit admin_budget_budget_investments_path(budget_investment.budget)

Expand Down Expand Up @@ -1656,12 +1647,10 @@
end

scenario "Showing the valuating checkbox" do
investment1 = create(:budget_investment, :with_administrator, :visible_to_valuators, budget: budget)
investment2 = create(:budget_investment, :with_administrator, :invisible_to_valuators, budget: budget)

investment1.valuators << create(:valuator)
investment2.valuators << create(:valuator)
investment2.valuators << create(:valuator)
investment1 = create(:budget_investment, :with_administrator, :with_valuator, :visible_to_valuators,
budget: budget)
investment2 = create(:budget_investment, :with_administrator, :with_valuator, :invisible_to_valuators,
budget: budget)

visit admin_budget_budget_investments_path(budget)

Expand Down
3 changes: 1 addition & 2 deletions spec/features/comments/budget_investments_valuation_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,9 @@
let(:valuator_user) { create(:valuator).user }
let(:admin_user) { create(:administrator).user }
let(:budget) { create(:budget, :valuating) }
let(:investment) { create(:budget_investment, budget: budget) }
let(:investment) { create(:budget_investment, budget: budget, valuators: [valuator_user.valuator]) }

before do
investment.valuators << valuator_user.valuator
login_as(valuator_user)
end

Expand Down
4 changes: 1 addition & 3 deletions spec/features/emails_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -373,10 +373,8 @@

scenario "Unfeasible investment" do
budget.update(phase: "valuating")
investment = create(:budget_investment, author: author, budget: budget)

valuator = create(:valuator)
investment.valuators << valuator
investment = create(:budget_investment, author: author, budget: budget, valuators: [valuator])

login_as(valuator.user)
visit edit_valuation_budget_budget_investment_path(budget, investment)
Expand Down
48 changes: 15 additions & 33 deletions spec/features/valuation/budget_investments_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -49,23 +49,19 @@

describe "Index" do
scenario "Index shows budget investments assigned to current valuator" do
investment1 = create(:budget_investment, :visible_to_valuators, budget: budget)
investment1 = create(:budget_investment, :visible_to_valuators, budget: budget, valuators: [valuator])
investment2 = create(:budget_investment, :visible_to_valuators, budget: budget)

investment1.valuators << valuator

visit valuation_budget_budget_investments_path(budget)

expect(page).to have_content(investment1.title)
expect(page).not_to have_content(investment2.title)
end

scenario "Index shows no budget investment to admins no valuators" do
investment1 = create(:budget_investment, :visible_to_valuators, budget: budget)
investment1 = create(:budget_investment, :visible_to_valuators, budget: budget, valuators: [valuator])
investment2 = create(:budget_investment, :visible_to_valuators, budget: budget)

investment1.valuators << valuator

logout
login_as create(:administrator).user
visit valuation_budget_budget_investments_path(budget)
Expand All @@ -76,16 +72,15 @@

scenario "Index orders budget investments by votes" do
investment10 = create(:budget_investment, :visible_to_valuators, budget: budget,
valuators: [valuator],
cached_votes_up: 10)
investment100 = create(:budget_investment, :visible_to_valuators, budget: budget,
valuators: [valuator],
cached_votes_up: 100)
investment1 = create(:budget_investment, :visible_to_valuators, budget: budget,
valuators: [valuator],
cached_votes_up: 1)

investment1.valuators << valuator
investment10.valuators << valuator
investment100.valuators << valuator

visit valuation_budget_budget_investments_path(budget)

expect(investment100.title).to appear_before(investment10.title)
Expand All @@ -95,8 +90,7 @@
scenario "Index displays investments paginated" do
per_page = Kaminari.config.default_per_page
(per_page + 2).times do
investment = create(:budget_investment, :visible_to_valuators, budget: budget)
investment.valuators << valuator
create(:budget_investment, :visible_to_valuators, budget: budget, valuators: [valuator])
end

visit valuation_budget_budget_investments_path(budget)
Expand Down Expand Up @@ -204,13 +198,10 @@
end

scenario "Index filtering by valuation status" do
valuating = create(:budget_investment, :visible_to_valuators, budget: budget,
title: "Ongoing valuation")
valuated = create(:budget_investment, :visible_to_valuators, :finished,
budget: budget,
title: "Old idea")
valuating.valuators << valuator
valuated.valuators << valuator
create(:budget_investment, :visible_to_valuators,
budget: budget, valuators: [valuator], title: "Ongoing valuation")
create(:budget_investment, :visible_to_valuators, :finished,
budget: budget, valuators: [valuator], title: "Old idea")

visit valuation_budget_budget_investments_path(budget)

Expand Down Expand Up @@ -239,11 +230,8 @@
let(:investment) do
create(:budget_investment, :unfeasible, budget: budget, price: 1234,
unfeasibility_explanation: "It is impossible",
administrator: administrator,)
end

before do
investment.valuators << [valuator, second_valuator]
administrator: administrator,
valuators: [valuator, second_valuator])
end

scenario "visible for assigned valuators" do
Expand Down Expand Up @@ -320,11 +308,7 @@
describe "Valuate" do
let(:admin) { create(:administrator) }
let(:investment) do
create(:budget_investment, budget: budget, price: nil, administrator: admin)
end

before do
investment.valuators << valuator
create(:budget_investment, budget: budget, price: nil, administrator: admin, valuators: [valuator])
end

scenario "Dossier empty by default" do
Expand Down Expand Up @@ -521,8 +505,7 @@
scenario "not visible to valuators when budget is not valuating" do
budget.update(phase: "publishing_prices")

investment = create(:budget_investment, budget: budget)
investment.valuators << [valuator]
investment = create(:budget_investment, budget: budget, valuators: [valuator])

login_as(valuator.user)
visit edit_valuation_budget_budget_investment_path(budget, investment)
Expand All @@ -537,8 +520,7 @@
admin = create(:administrator, user: user)
valuator = create(:valuator, user: user)

investment = create(:budget_investment, budget: budget)
investment.valuators << [valuator]
investment = create(:budget_investment, budget: budget, valuators: [valuator])

login_as(admin.user)
visit valuation_budget_budget_investment_path(budget, investment)
Expand Down
17 changes: 4 additions & 13 deletions spec/models/abilities/valuator_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -5,21 +5,12 @@
subject(:ability) { Ability.new(user) }

let(:user) { valuator.user }
let(:valuator) { create(:valuator) }
let(:group) { create(:valuator_group) }
let(:valuator) { create(:valuator, valuator_group: group) }
let(:non_assigned_investment) { create(:budget_investment) }
let(:assigned_investment) { create(:budget_investment, budget: create(:budget, :valuating)) }
let(:group_assigned_investment) { create(:budget_investment, budget: create(:budget, :valuating)) }
let(:finished_assigned_investment) { create(:budget_investment, budget: create(:budget, :finished)) }

before do
assigned_investment.valuators << valuator

group_assigned_investment.valuator_groups << group
valuator.update(valuator_group: group)

finished_assigned_investment.valuators << valuator
end
let(:assigned_investment) { create(:budget_investment, budget: create(:budget, :valuating), valuators: [valuator]) }
let(:group_assigned_investment) { create(:budget_investment, budget: create(:budget, :valuating), valuator_groups: [group]) }
let(:finished_assigned_investment) { create(:budget_investment, budget: create(:budget, :finished), valuators: [valuator]) }

it "cannot valuate an assigned investment with a finished valuation" do
assigned_investment.update(valuation_finished: true)
Expand Down
39 changes: 12 additions & 27 deletions spec/models/budget/investment_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -337,16 +337,12 @@

describe "by_valuator" do
it "returns investments assigned to specific valuator" do
investment1 = create(:budget_investment)
investment2 = create(:budget_investment)
investment3 = create(:budget_investment)

valuator1 = create(:valuator)
valuator2 = create(:valuator)

investment1.valuators << valuator1
investment2.valuators << valuator2
investment3.valuators << [valuator1, valuator2]
investment1 = create(:budget_investment, valuators: [valuator1])
investment2 = create(:budget_investment, valuators: [valuator2])
investment3 = create(:budget_investment, valuators: [valuator1, valuator2])

by_valuator = Budget::Investment.by_valuator(valuator1.id)

Expand Down Expand Up @@ -420,10 +416,9 @@

describe "managed" do
it "returns all open investments with assigned admin but without assigned valuators" do
investment1 = create(:budget_investment, :with_administrator)
investment1 = create(:budget_investment, :with_administrator, :with_valuator)
investment2 = create(:budget_investment, :with_administrator, :finished)
investment3 = create(:budget_investment, :with_administrator)
investment1.valuators << create(:valuator)

managed = Budget::Investment.managed

Expand All @@ -434,11 +429,8 @@
describe "valuating" do
it "returns all investments with assigned valuator but valuation not finished" do
investment1 = create(:budget_investment)
investment2 = create(:budget_investment)
investment3 = create(:budget_investment, :finished)

investment2.valuators << create(:valuator)
investment3.valuators << create(:valuator)
investment2 = create(:budget_investment, :with_valuator)
investment3 = create(:budget_investment, :with_valuator, :finished)

valuating = Budget::Investment.valuating

Expand All @@ -447,11 +439,8 @@

it "returns all investments with assigned valuator groups but valuation not finished" do
investment1 = create(:budget_investment)
investment2 = create(:budget_investment)
investment3 = create(:budget_investment, :finished)

investment2.valuator_groups << create(:valuator_group)
investment3.valuator_groups << create(:valuator_group)
investment2 = create(:budget_investment, valuator_groups: [create(:valuator_group)])
investment3 = create(:budget_investment, :finished, valuator_groups: [create(:valuator_group)])

valuating = Budget::Investment.valuating

Expand All @@ -462,11 +451,8 @@
describe "valuation_finished" do
it "returns all investments with valuation finished" do
investment1 = create(:budget_investment)
investment2 = create(:budget_investment)
investment3 = create(:budget_investment, :finished)

investment2.valuators << create(:valuator)
investment3.valuators << create(:valuator)
investment2 = create(:budget_investment, :with_valuator)
investment3 = create(:budget_investment, :with_valuator, :finished)

valuation_finished = Budget::Investment.valuation_finished

Expand Down Expand Up @@ -1166,9 +1152,8 @@
describe "with under_valuation filter" do
let(:params) { { advanced_filters: ["under_valuation"], budget_id: budget.id } }
it "returns only investment under valuation" do
valuator1 = create(:valuator)
investment1 = create(:budget_investment, :with_administrator, :unfinished, budget: budget)
investment1.valuators << valuator1
investment1 = create(:budget_investment, :with_administrator, :unfinished, :with_valuator,
budget: budget)
create(:budget_investment, :with_administrator, budget: budget)
create(:budget_investment, budget: budget)

Expand Down
14 changes: 4 additions & 10 deletions spec/models/valuator_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -20,13 +20,10 @@

it "returns investments assigned to a valuator" do
valuator = create(:valuator)
investment1 = create(:budget_investment)
investment2 = create(:budget_investment)
investment1 = create(:budget_investment, valuators: [valuator])
investment2 = create(:budget_investment, valuators: [valuator])
investment3 = create(:budget_investment)

investment1.valuators << valuator
investment2.valuators << valuator

assigned_investment_ids = valuator.assigned_investment_ids

expect(assigned_investment_ids).to match_array [investment1.id, investment2.id]
Expand All @@ -37,13 +34,10 @@
group = create(:valuator_group)
valuator = create(:valuator, valuator_group: group)

investment1 = create(:budget_investment)
investment2 = create(:budget_investment)
investment1 = create(:budget_investment, valuator_groups: [group])
investment2 = create(:budget_investment, valuator_groups: [group])
investment3 = create(:budget_investment)

investment1.valuator_groups << group
investment2.valuator_groups << group

assigned_investment_ids = valuator.assigned_investment_ids

expect(assigned_investment_ids).to match_array [investment1.id, investment2.id]
Expand Down

0 comments on commit 9ddc3e2

Please sign in to comment.