Directly assign valuators in specs

Creating a record and then assigning an association makes the code even
harder to follow.
This commit is contained in:
Javi Martín
2019-09-21 16:57:38 +02:00
parent 3ecab8af13
commit a9159e0ec8
7 changed files with 43 additions and 89 deletions

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,9 +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 budget_investment3 = create(:budget_investment, budget: budget)
budget_investment2.valuator_groups << valuator_group budget_investment2.valuator_groups << valuator_group
visit admin_budget_budget_investments_path(budget_id: budget.id) visit admin_budget_budget_investments_path(budget_id: budget.id)
@@ -212,9 +209,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)
@@ -981,8 +976,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 +1652,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, :visible_to_valuators,
investment2 = create(:budget_investment, :with_administrator, :invisible_to_valuators, budget: budget) budget: budget, valuators: [create(:valuator)])
investment2 = create(:budget_investment, :with_administrator, :invisible_to_valuators,
investment1.valuators << create(:valuator) budget: budget, valuators: [create(:valuator), create(:valuator)])
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

@@ -8,17 +8,13 @@ describe Abilities::Valuator do
let(:valuator) { create(:valuator) } let(:valuator) { create(:valuator) }
let(:group) { create(:valuator_group) } let(:group) { create(:valuator_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)) }
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 before do
assigned_investment.valuators << valuator
group_assigned_investment.valuator_groups << group group_assigned_investment.valuator_groups << group
valuator.update(valuator_group: group) valuator.update(valuator_group: group)
finished_assigned_investment.valuators << valuator
end end
it "cannot valuate an assigned investment with a finished valuation" do it "cannot valuate an assigned investment with a finished valuation" do

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, valuators: [create(: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, valuators: [create(:valuator)])
investment3 = create(:budget_investment, :finished) investment3 = create(:budget_investment, :finished, valuators: [create(:valuator)])
investment2.valuators << create(:valuator)
investment3.valuators << create(:valuator)
valuating = Budget::Investment.valuating valuating = Budget::Investment.valuating
@@ -462,11 +454,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, valuators: [create(:valuator)])
investment3 = create(:budget_investment, :finished) investment3 = create(:budget_investment, :finished, valuators: [create(:valuator)])
investment2.valuators << create(:valuator)
investment3.valuators << create(:valuator)
valuation_finished = Budget::Investment.valuation_finished valuation_finished = Budget::Investment.valuation_finished
@@ -1166,9 +1155,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,
investment1 = create(:budget_investment, :with_administrator, :unfinished, budget: budget) budget: budget, valuators: [create(:valuator)])
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]