From cdc166e830b2050f45371fb11528f6dc8135e17f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javi=20Mart=C3=ADn?= Date: Wed, 19 Jul 2023 14:43:42 +0200 Subject: [PATCH] Make it easier to distinguish counts and prices With so many similar numbers, the tests were hard to follow. Besides, we're now making these lines slightly shorter :). --- spec/models/budget/result_spec.rb | 76 +++++++++++++++---------------- 1 file changed, 38 insertions(+), 38 deletions(-) diff --git a/spec/models/budget/result_spec.rb b/spec/models/budget/result_spec.rb index ade4de5e9..37b54729d 100644 --- a/spec/models/budget/result_spec.rb +++ b/spec/models/budget/result_spec.rb @@ -7,80 +7,80 @@ describe Budget::Result do context "When there are no winners" do it "assigns investments ordered by ballot lines until budget is met" do - create(:budget_investment, :selected, heading: heading, price: 100, ballot_lines_count: 500) - create(:budget_investment, :selected, heading: heading, price: 300, ballot_lines_count: 800) - create(:budget_investment, :selected, heading: heading, price: 200, ballot_lines_count: 900) - create(:budget_investment, :selected, heading: heading, price: 500, ballot_lines_count: 600) + create(:budget_investment, :selected, heading: heading, price: 100, ballot_lines_count: 50) + create(:budget_investment, :selected, heading: heading, price: 300, ballot_lines_count: 80) + create(:budget_investment, :selected, heading: heading, price: 200, ballot_lines_count: 90) + create(:budget_investment, :selected, heading: heading, price: 500, ballot_lines_count: 60) Budget::Result.new(budget, heading).calculate_winners - expect(heading.investments.winners.pluck(:ballot_lines_count)).to match_array([900, 800, 600]) + expect(heading.investments.winners.pluck(:ballot_lines_count)).to match_array([90, 80, 60]) end it "selects cheaper investments when running out of budget" do - create(:budget_investment, :selected, heading: heading, price: 800, ballot_lines_count: 900) - create(:budget_investment, :selected, heading: heading, price: 300, ballot_lines_count: 800) - create(:budget_investment, :selected, heading: heading, price: 200, ballot_lines_count: 600) + create(:budget_investment, :selected, heading: heading, price: 800, ballot_lines_count: 90) + create(:budget_investment, :selected, heading: heading, price: 300, ballot_lines_count: 80) + create(:budget_investment, :selected, heading: heading, price: 200, ballot_lines_count: 60) Budget::Result.new(budget, heading).calculate_winners - expect(heading.investments.winners.pluck(:ballot_lines_count)).to match_array([900, 600]) + expect(heading.investments.winners.pluck(:ballot_lines_count)).to match_array([90, 60]) end it "excludes incompatible investments" do - create(:budget_investment, :selected, heading: heading, price: 200, ballot_lines_count: 900) - create(:budget_investment, :selected, heading: heading, price: 300, ballot_lines_count: 800) - create(:budget_investment, :incompatible, heading: heading, price: 500, ballot_lines_count: 700) - create(:budget_investment, :selected, heading: heading, price: 500, ballot_lines_count: 600) - create(:budget_investment, :selected, heading: heading, price: 100, ballot_lines_count: 500) + create(:budget_investment, :selected, heading: heading, price: 200, ballot_lines_count: 90) + create(:budget_investment, :selected, heading: heading, price: 300, ballot_lines_count: 80) + create(:budget_investment, :incompatible, heading: heading, price: 500, ballot_lines_count: 70) + create(:budget_investment, :selected, heading: heading, price: 500, ballot_lines_count: 60) + create(:budget_investment, :selected, heading: heading, price: 100, ballot_lines_count: 50) Budget::Result.new(budget, heading).calculate_winners - expect(heading.investments.winners.pluck(:ballot_lines_count)).to match_array([900, 800, 600]) + expect(heading.investments.winners.pluck(:ballot_lines_count)).to match_array([90, 80, 60]) end end context "When there are winners" do it "removes winners and recalculates" do - create(:budget_investment, :selected, heading: heading, price: 200, ballot_lines_count: 900) - create(:budget_investment, :winner, heading: heading, price: 300, ballot_lines_count: 800) - create(:budget_investment, :winner, :incompatible, heading: heading, price: 500, ballot_lines_count: 700) - create(:budget_investment, :winner, heading: heading, price: 500, ballot_lines_count: 600) - create(:budget_investment, :winner, heading: heading, price: 100, ballot_lines_count: 500) + create(:budget_investment, :selected, heading: heading, price: 200, ballot_lines_count: 90) + create(:budget_investment, :winner, heading: heading, price: 300, ballot_lines_count: 80) + create(:budget_investment, :winner, :incompatible, heading: heading, price: 500, ballot_lines_count: 70) + create(:budget_investment, :winner, heading: heading, price: 500, ballot_lines_count: 60) + create(:budget_investment, :winner, heading: heading, price: 100, ballot_lines_count: 50) Budget::Result.new(budget, heading).calculate_winners - expect(heading.investments.winners.pluck(:ballot_lines_count)).to match_array([900, 800, 600]) + expect(heading.investments.winners.pluck(:ballot_lines_count)).to match_array([90, 80, 60]) end end context "When a winner is flagged as incompatible" do it "recalculates winners leaving it out" do - wrong_win = create(:budget_investment, :winner, heading: heading, price: 200, ballot_lines_count: 900) + wrong_win = create(:budget_investment, :winner, heading: heading, price: 200, ballot_lines_count: 90) - create(:budget_investment, :winner, heading: heading, price: 300, ballot_lines_count: 800) - create(:budget_investment, :winner, heading: heading, price: 500, ballot_lines_count: 700) - create(:budget_investment, :winner, heading: heading, price: 200, ballot_lines_count: 600) - create(:budget_investment, :winner, heading: heading, price: 100, ballot_lines_count: 500) + create(:budget_investment, :winner, heading: heading, price: 300, ballot_lines_count: 80) + create(:budget_investment, :winner, heading: heading, price: 500, ballot_lines_count: 70) + create(:budget_investment, :winner, heading: heading, price: 200, ballot_lines_count: 60) + create(:budget_investment, :winner, heading: heading, price: 100, ballot_lines_count: 50) wrong_win.update!(incompatible: true) - expect(heading.investments.winners.pluck(:ballot_lines_count)).to match_array([800, 700, 600]) + expect(heading.investments.winners.pluck(:ballot_lines_count)).to match_array([80, 70, 60]) end end context "When an incompatible is flagged as compatible again" do it "recalculates winners taking it in consideration" do - miss = create(:budget_investment, :incompatible, heading: heading, price: 200, ballot_lines_count: 900) + miss = create(:budget_investment, :incompatible, heading: heading, price: 200, ballot_lines_count: 90) - create(:budget_investment, :winner, heading: heading, price: 300, ballot_lines_count: 800) - create(:budget_investment, :winner, heading: heading, price: 500, ballot_lines_count: 700) - create(:budget_investment, :winner, heading: heading, price: 200, ballot_lines_count: 600) - create(:budget_investment, :winner, heading: heading, price: 100, ballot_lines_count: 500) + create(:budget_investment, :winner, heading: heading, price: 300, ballot_lines_count: 80) + create(:budget_investment, :winner, heading: heading, price: 500, ballot_lines_count: 70) + create(:budget_investment, :winner, heading: heading, price: 200, ballot_lines_count: 60) + create(:budget_investment, :winner, heading: heading, price: 100, ballot_lines_count: 50) miss.update!(incompatible: false) - expect(heading.investments.winners.pluck(:ballot_lines_count)).to match_array([900, 800, 700]) + expect(heading.investments.winners.pluck(:ballot_lines_count)).to match_array([90, 80, 70]) end end @@ -88,14 +88,14 @@ describe Budget::Result do before { budget.update!(voting_style: "approval", hide_money: true) } it "does not take the price into account" do - create(:budget_investment, :selected, heading: heading, price: 100, ballot_lines_count: 500) - create(:budget_investment, :incompatible, heading: heading, price: 300, ballot_lines_count: 800) - create(:budget_investment, :selected, heading: heading, price: 800, ballot_lines_count: 700) - create(:budget_investment, :selected, heading: heading, price: 500, ballot_lines_count: 600) + create(:budget_investment, :selected, heading: heading, price: 100, ballot_lines_count: 50) + create(:budget_investment, :incompatible, heading: heading, price: 300, ballot_lines_count: 80) + create(:budget_investment, :selected, heading: heading, price: 800, ballot_lines_count: 70) + create(:budget_investment, :selected, heading: heading, price: 500, ballot_lines_count: 60) Budget::Result.new(budget, heading).calculate_winners - expect(heading.investments.winners.pluck(:ballot_lines_count)).to match_array([700, 600, 500]) + expect(heading.investments.winners.pluck(:ballot_lines_count)).to match_array([70, 60, 50]) end end end