Merge pull request #3727 from consul/simplify_valuator_factories

Simplify valuator factories
This commit is contained in:
Javier Martín
2019-09-30 15:57:34 +02:00
committed by GitHub
8 changed files with 56 additions and 114 deletions

View File

@@ -173,6 +173,10 @@ FactoryBot.define do
administrator administrator
end end
trait :with_valuator do
valuators { [create(:valuator)] }
end
trait :flagged do trait :flagged do
after :create do |investment| after :create do |investment|
Flag.flag(create(:user), investment) Flag.flag(create(:user), investment)

View File

@@ -80,10 +80,6 @@ describe "Admin budget investments" do
end end
scenario "Display admin and valuator assignments" do 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") olga = create(:user, username: "Olga")
miriam = create(:user, username: "Miriam") miriam = create(:user, username: "Miriam")
valuator1 = create(:valuator, user: olga, description: "Valuator Olga") valuator1 = create(:valuator, user: olga, description: "Valuator Olga")
@@ -91,10 +87,10 @@ describe "Admin budget investments" do
valuator_group = create(:valuator_group, name: "Health") valuator_group = create(:valuator_group, name: "Health")
admin = create(:administrator, user: create(:user, username: "Gema")) admin = create(:administrator, user: create(:user, username: "Gema"))
budget_investment1.valuators << valuator1 budget_investment1 = create(:budget_investment, budget: budget, valuators: [valuator1])
budget_investment2.valuators << valuator1 budget_investment2 = create(:budget_investment, budget: budget, valuators: [valuator1, valuator2],
budget_investment2.valuators << valuator2 valuator_groups: [valuator_group])
budget_investment2.valuator_groups << valuator_group budget_investment3 = create(:budget_investment, budget: budget)
visit admin_budget_budget_investments_path(budget_id: budget.id) visit admin_budget_budget_investments_path(budget_id: budget.id)
@@ -212,9 +208,7 @@ describe "Admin budget investments" do
user = create(:user) user = create(:user)
valuator = create(:valuator, user: user, description: "Valuator 1") valuator = create(:valuator, user: user, description: "Valuator 1")
budget_investment = create(:budget_investment, title: "Realocate visitors", budget: budget) create(:budget_investment, title: "Realocate visitors", budget: budget, valuators: [valuator])
budget_investment.valuators << valuator
create(:budget_investment, title: "Destroy the city", budget: budget) create(:budget_investment, title: "Destroy the city", budget: budget)
visit admin_budget_budget_investments_path(budget_id: budget.id) visit admin_budget_budget_investments_path(budget_id: budget.id)
@@ -246,11 +240,8 @@ describe "Admin budget investments" do
health_group = create(:valuator_group, name: "Health") health_group = create(:valuator_group, name: "Health")
culture_group = create(:valuator_group, name: "Culture") culture_group = create(:valuator_group, name: "Culture")
budget_investment1 = create(:budget_investment, title: "Build a hospital", budget: budget) create(:budget_investment, title: "Build a hospital", budget: budget, valuator_groups: [health_group])
budget_investment1.valuator_groups << health_group create(:budget_investment, title: "Build a theatre", budget: budget, valuator_groups: [culture_group])
budget_investment2 = create(:budget_investment, title: "Build a theatre", budget: budget)
budget_investment2.valuator_groups << culture_group
visit admin_budget_budget_investments_path(budget_id: budget) visit admin_budget_budget_investments_path(budget_id: budget)
expect(page).to have_link("Build a hospital") expect(page).to have_link("Build a hospital")
@@ -452,8 +443,7 @@ describe "Admin budget investments" do
scenario "Filtering by assignment status" do scenario "Filtering by assignment status" do
create(:budget_investment, :with_administrator, title: "Assigned idea", budget: budget) create(:budget_investment, :with_administrator, title: "Assigned idea", budget: budget)
create(:budget_investment, title: "Evaluating...", budget: budget, create(:budget_investment, :with_valuator, title: "Evaluating...", budget: budget)
valuators: [create(:valuator)])
create(:budget_investment, title: "With group", budget: budget, create(:budget_investment, title: "With group", budget: budget,
valuator_groups: [create(:valuator_group)]) valuator_groups: [create(:valuator_group)])
@@ -981,8 +971,9 @@ describe "Admin budget investments" do
unfeasibility_explanation: "It is impossible", unfeasibility_explanation: "It is impossible",
price: 1234, price: 1234,
price_first_year: 1000, price_first_year: 1000,
administrator: administrator) administrator: administrator,
budget_investment.valuators << valuator valuators: [valuator]
)
visit admin_budget_budget_investments_path(budget_investment.budget) visit admin_budget_budget_investments_path(budget_investment.budget)
@@ -1656,12 +1647,10 @@ describe "Admin budget investments" do
end end
scenario "Showing the valuating checkbox" do scenario "Showing the valuating checkbox" do
investment1 = create(:budget_investment, :with_administrator, :visible_to_valuators, budget: budget) investment1 = create(:budget_investment, :with_administrator, :with_valuator, :visible_to_valuators,
investment2 = create(:budget_investment, :with_administrator, :invisible_to_valuators, budget: budget) budget: budget)
investment2 = create(:budget_investment, :with_administrator, :with_valuator, :invisible_to_valuators,
investment1.valuators << create(:valuator) budget: budget)
investment2.valuators << create(:valuator)
investment2.valuators << create(:valuator)
visit admin_budget_budget_investments_path(budget) visit admin_budget_budget_investments_path(budget)

View File

@@ -5,10 +5,9 @@ describe "Internal valuation comments on Budget::Investments" do
let(:valuator_user) { create(:valuator).user } let(:valuator_user) { create(:valuator).user }
let(:admin_user) { create(:administrator).user } let(:admin_user) { create(:administrator).user }
let(:budget) { create(:budget, :valuating) } 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 before do
investment.valuators << valuator_user.valuator
login_as(valuator_user) login_as(valuator_user)
end end

View File

@@ -373,10 +373,8 @@ describe "Emails" do
scenario "Unfeasible investment" do scenario "Unfeasible investment" do
budget.update(phase: "valuating") budget.update(phase: "valuating")
investment = create(:budget_investment, author: author, budget: budget)
valuator = create(:valuator) valuator = create(:valuator)
investment.valuators << valuator investment = create(:budget_investment, author: author, budget: budget, valuators: [valuator])
login_as(valuator.user) login_as(valuator.user)
visit edit_valuation_budget_budget_investment_path(budget, investment) visit edit_valuation_budget_budget_investment_path(budget, investment)

View File

@@ -49,11 +49,9 @@ describe "Valuation budget investments" do
describe "Index" do describe "Index" do
scenario "Index shows budget investments assigned to current valuator" 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) investment2 = create(:budget_investment, :visible_to_valuators, budget: budget)
investment1.valuators << valuator
visit valuation_budget_budget_investments_path(budget) visit valuation_budget_budget_investments_path(budget)
expect(page).to have_content(investment1.title) expect(page).to have_content(investment1.title)
@@ -61,11 +59,9 @@ describe "Valuation budget investments" do
end end
scenario "Index shows no budget investment to admins no valuators" do 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) investment2 = create(:budget_investment, :visible_to_valuators, budget: budget)
investment1.valuators << valuator
logout logout
login_as create(:administrator).user login_as create(:administrator).user
visit valuation_budget_budget_investments_path(budget) visit valuation_budget_budget_investments_path(budget)
@@ -76,16 +72,15 @@ describe "Valuation budget investments" do
scenario "Index orders budget investments by votes" do scenario "Index orders budget investments by votes" do
investment10 = create(:budget_investment, :visible_to_valuators, budget: budget, investment10 = create(:budget_investment, :visible_to_valuators, budget: budget,
valuators: [valuator],
cached_votes_up: 10) cached_votes_up: 10)
investment100 = create(:budget_investment, :visible_to_valuators, budget: budget, investment100 = create(:budget_investment, :visible_to_valuators, budget: budget,
valuators: [valuator],
cached_votes_up: 100) cached_votes_up: 100)
investment1 = create(:budget_investment, :visible_to_valuators, budget: budget, investment1 = create(:budget_investment, :visible_to_valuators, budget: budget,
valuators: [valuator],
cached_votes_up: 1) cached_votes_up: 1)
investment1.valuators << valuator
investment10.valuators << valuator
investment100.valuators << valuator
visit valuation_budget_budget_investments_path(budget) visit valuation_budget_budget_investments_path(budget)
expect(investment100.title).to appear_before(investment10.title) expect(investment100.title).to appear_before(investment10.title)
@@ -95,8 +90,7 @@ describe "Valuation budget investments" do
scenario "Index displays investments paginated" do scenario "Index displays investments paginated" do
per_page = Kaminari.config.default_per_page per_page = Kaminari.config.default_per_page
(per_page + 2).times do (per_page + 2).times do
investment = create(:budget_investment, :visible_to_valuators, budget: budget) create(:budget_investment, :visible_to_valuators, budget: budget, valuators: [valuator])
investment.valuators << valuator
end end
visit valuation_budget_budget_investments_path(budget) visit valuation_budget_budget_investments_path(budget)
@@ -204,13 +198,10 @@ describe "Valuation budget investments" do
end end
scenario "Index filtering by valuation status" do scenario "Index filtering by valuation status" do
valuating = create(:budget_investment, :visible_to_valuators, budget: budget, create(:budget_investment, :visible_to_valuators,
title: "Ongoing valuation") budget: budget, valuators: [valuator], title: "Ongoing valuation")
valuated = create(:budget_investment, :visible_to_valuators, :finished, create(:budget_investment, :visible_to_valuators, :finished,
budget: budget, budget: budget, valuators: [valuator], title: "Old idea")
title: "Old idea")
valuating.valuators << valuator
valuated.valuators << valuator
visit valuation_budget_budget_investments_path(budget) visit valuation_budget_budget_investments_path(budget)
@@ -239,11 +230,8 @@ describe "Valuation budget investments" do
let(:investment) do let(:investment) do
create(:budget_investment, :unfeasible, budget: budget, price: 1234, create(:budget_investment, :unfeasible, budget: budget, price: 1234,
unfeasibility_explanation: "It is impossible", unfeasibility_explanation: "It is impossible",
administrator: administrator,) administrator: administrator,
end valuators: [valuator, second_valuator])
before do
investment.valuators << [valuator, second_valuator]
end end
scenario "visible for assigned valuators" do scenario "visible for assigned valuators" do
@@ -320,11 +308,7 @@ describe "Valuation budget investments" do
describe "Valuate" do describe "Valuate" do
let(:admin) { create(:administrator) } let(:admin) { create(:administrator) }
let(:investment) do let(:investment) do
create(:budget_investment, budget: budget, price: nil, administrator: admin) create(:budget_investment, budget: budget, price: nil, administrator: admin, valuators: [valuator])
end
before do
investment.valuators << valuator
end end
scenario "Dossier empty by default" do scenario "Dossier empty by default" do
@@ -521,8 +505,7 @@ describe "Valuation budget investments" do
scenario "not visible to valuators when budget is not valuating" do scenario "not visible to valuators when budget is not valuating" do
budget.update(phase: "publishing_prices") budget.update(phase: "publishing_prices")
investment = create(:budget_investment, budget: budget) investment = create(:budget_investment, budget: budget, valuators: [valuator])
investment.valuators << [valuator]
login_as(valuator.user) login_as(valuator.user)
visit edit_valuation_budget_budget_investment_path(budget, investment) visit edit_valuation_budget_budget_investment_path(budget, investment)
@@ -537,8 +520,7 @@ describe "Valuation budget investments" do
admin = create(:administrator, user: user) admin = create(:administrator, user: user)
valuator = create(:valuator, user: user) valuator = create(:valuator, user: user)
investment = create(:budget_investment, budget: budget) investment = create(:budget_investment, budget: budget, valuators: [valuator])
investment.valuators << [valuator]
login_as(admin.user) login_as(admin.user)
visit valuation_budget_budget_investment_path(budget, investment) visit valuation_budget_budget_investment_path(budget, investment)

View File

@@ -5,21 +5,12 @@ describe Abilities::Valuator do
subject(:ability) { Ability.new(user) } subject(:ability) { Ability.new(user) }
let(:user) { valuator.user } let(:user) { valuator.user }
let(:valuator) { create(:valuator) }
let(:group) { create(:valuator_group) } let(:group) { create(:valuator_group) }
let(:valuator) { create(:valuator, valuator_group: group) }
let(:non_assigned_investment) { create(:budget_investment) } let(:non_assigned_investment) { create(:budget_investment) }
let(:assigned_investment) { create(:budget_investment, budget: create(:budget, :valuating)) } let(:assigned_investment) { create(:budget_investment, budget: create(:budget, :valuating), valuators: [valuator]) }
let(:group_assigned_investment) { create(:budget_investment, budget: create(:budget, :valuating)) } 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)) } let(:finished_assigned_investment) { create(:budget_investment, budget: create(:budget, :finished), valuators: [valuator]) }
before do
assigned_investment.valuators << valuator
group_assigned_investment.valuator_groups << group
valuator.update(valuator_group: group)
finished_assigned_investment.valuators << valuator
end
it "cannot valuate an assigned investment with a finished valuation" do it "cannot valuate an assigned investment with a finished valuation" do
assigned_investment.update(valuation_finished: true) assigned_investment.update(valuation_finished: true)

View File

@@ -337,16 +337,12 @@ describe Budget::Investment do
describe "by_valuator" do describe "by_valuator" do
it "returns investments assigned to specific 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) valuator1 = create(:valuator)
valuator2 = create(:valuator) valuator2 = create(:valuator)
investment1.valuators << valuator1 investment1 = create(:budget_investment, valuators: [valuator1])
investment2.valuators << valuator2 investment2 = create(:budget_investment, valuators: [valuator2])
investment3.valuators << [valuator1, valuator2] investment3 = create(:budget_investment, valuators: [valuator1, valuator2])
by_valuator = Budget::Investment.by_valuator(valuator1.id) by_valuator = Budget::Investment.by_valuator(valuator1.id)
@@ -420,10 +416,9 @@ describe Budget::Investment do
describe "managed" do describe "managed" do
it "returns all open investments with assigned admin but without assigned valuators" 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) investment2 = create(:budget_investment, :with_administrator, :finished)
investment3 = create(:budget_investment, :with_administrator) investment3 = create(:budget_investment, :with_administrator)
investment1.valuators << create(:valuator)
managed = Budget::Investment.managed managed = Budget::Investment.managed
@@ -434,11 +429,8 @@ describe Budget::Investment do
describe "valuating" do describe "valuating" do
it "returns all investments with assigned valuator but valuation not finished" do it "returns all investments with assigned valuator but valuation not finished" do
investment1 = create(:budget_investment) investment1 = create(:budget_investment)
investment2 = create(:budget_investment) investment2 = create(:budget_investment, :with_valuator)
investment3 = create(:budget_investment, :finished) investment3 = create(:budget_investment, :with_valuator, :finished)
investment2.valuators << create(:valuator)
investment3.valuators << create(:valuator)
valuating = Budget::Investment.valuating valuating = Budget::Investment.valuating
@@ -447,11 +439,8 @@ describe Budget::Investment do
it "returns all investments with assigned valuator groups but valuation not finished" do it "returns all investments with assigned valuator groups but valuation not finished" do
investment1 = create(:budget_investment) investment1 = create(:budget_investment)
investment2 = create(:budget_investment) investment2 = create(:budget_investment, valuator_groups: [create(:valuator_group)])
investment3 = create(:budget_investment, :finished) investment3 = create(:budget_investment, :finished, valuator_groups: [create(:valuator_group)])
investment2.valuator_groups << create(:valuator_group)
investment3.valuator_groups << create(:valuator_group)
valuating = Budget::Investment.valuating valuating = Budget::Investment.valuating
@@ -462,11 +451,8 @@ describe Budget::Investment do
describe "valuation_finished" do describe "valuation_finished" do
it "returns all investments with valuation finished" do it "returns all investments with valuation finished" do
investment1 = create(:budget_investment) investment1 = create(:budget_investment)
investment2 = create(:budget_investment) investment2 = create(:budget_investment, :with_valuator)
investment3 = create(:budget_investment, :finished) investment3 = create(:budget_investment, :with_valuator, :finished)
investment2.valuators << create(:valuator)
investment3.valuators << create(:valuator)
valuation_finished = Budget::Investment.valuation_finished valuation_finished = Budget::Investment.valuation_finished
@@ -1166,9 +1152,8 @@ describe Budget::Investment do
describe "with under_valuation filter" do describe "with under_valuation filter" do
let(:params) { { advanced_filters: ["under_valuation"], budget_id: budget.id } } let(:params) { { advanced_filters: ["under_valuation"], budget_id: budget.id } }
it "returns only investment under valuation" do it "returns only investment under valuation" do
valuator1 = create(:valuator) investment1 = create(:budget_investment, :with_administrator, :unfinished, :with_valuator,
investment1 = create(:budget_investment, :with_administrator, :unfinished, budget: budget) budget: budget)
investment1.valuators << valuator1
create(:budget_investment, :with_administrator, budget: budget) create(:budget_investment, :with_administrator, budget: budget)
create(:budget_investment, budget: budget) create(:budget_investment, budget: budget)

View File

@@ -20,13 +20,10 @@ describe Valuator do
it "returns investments assigned to a valuator" do it "returns investments assigned to a valuator" do
valuator = create(:valuator) valuator = create(:valuator)
investment1 = create(:budget_investment) investment1 = create(:budget_investment, valuators: [valuator])
investment2 = create(:budget_investment) investment2 = create(:budget_investment, valuators: [valuator])
investment3 = create(:budget_investment) investment3 = create(:budget_investment)
investment1.valuators << valuator
investment2.valuators << valuator
assigned_investment_ids = valuator.assigned_investment_ids assigned_investment_ids = valuator.assigned_investment_ids
expect(assigned_investment_ids).to match_array [investment1.id, investment2.id] expect(assigned_investment_ids).to match_array [investment1.id, investment2.id]
@@ -37,13 +34,10 @@ describe Valuator do
group = create(:valuator_group) group = create(:valuator_group)
valuator = create(:valuator, valuator_group: group) valuator = create(:valuator, valuator_group: group)
investment1 = create(:budget_investment) investment1 = create(:budget_investment, valuator_groups: [group])
investment2 = create(:budget_investment) investment2 = create(:budget_investment, valuator_groups: [group])
investment3 = create(:budget_investment) investment3 = create(:budget_investment)
investment1.valuator_groups << group
investment2.valuator_groups << group
assigned_investment_ids = valuator.assigned_investment_ids assigned_investment_ids = valuator.assigned_investment_ids
expect(assigned_investment_ids).to match_array [investment1.id, investment2.id] expect(assigned_investment_ids).to match_array [investment1.id, investment2.id]