From cd58ae85f843038b190c5ca011db76883e53d030 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juanjo=20Baz=C3=A1n?= Date: Fri, 4 Mar 2016 17:37:25 +0100 Subject: [PATCH] adds by_valuator search method to SpendingProposal --- app/models/spending_proposal.rb | 5 +++++ spec/models/spending_proposal_spec.rb | 32 +++++++++++++++++++++++++++ 2 files changed, 37 insertions(+) diff --git a/app/models/spending_proposal.rb b/app/models/spending_proposal.rb index 48473640c..cceac00c1 100644 --- a/app/models/spending_proposal.rb +++ b/app/models/spending_proposal.rb @@ -34,6 +34,7 @@ class SpendingProposal < ActiveRecord::Base results = self results = results.by_geozone(params[:geozone_id]) if params[:geozone_id].present? results = results.by_administrator(params[:administrator_id]) if params[:administrator_id].present? + results = results.by_valuator(params[:valuator_id]) if params[:valuator_id].present? results = results.send(current_filter) if current_filter.present? results.for_render end @@ -50,6 +51,10 @@ class SpendingProposal < ActiveRecord::Base where(administrator_id: administrator.presence) end + def self.by_valuator(valuator) + joins(:valuation_assignments).includes(:valuators).where("valuation_assignments.valuator_id = ?", valuator.presence) + end + def feasibility case feasible when true diff --git a/spec/models/spending_proposal_spec.rb b/spec/models/spending_proposal_spec.rb index a3800e85c..9ed96da59 100644 --- a/spec/models/spending_proposal_spec.rb +++ b/spec/models/spending_proposal_spec.rb @@ -61,6 +61,38 @@ describe SpendingProposal do end end + describe "by_administrator" do + it "should return spending proposals assigned to specific administrator" do + spending_proposal1 = create(:spending_proposal, administrator_id: 33) + spending_proposal2 = create(:spending_proposal) + + by_administrator = SpendingProposal.by_administrator(33) + + expect(by_administrator.size).to eq(1) + expect(by_administrator.first).to eq(spending_proposal1) + end + end + + describe "by_valuator" do + it "should return spending proposals assigned to specific valuator" do + spending_proposal1 = create(:spending_proposal) + spending_proposal2 = create(:spending_proposal) + spending_proposal3 = create(:spending_proposal) + + valuator1 = create(:valuator) + valuator2 = create(:valuator) + + spending_proposal1.valuators << valuator1 + spending_proposal2.valuators << valuator2 + spending_proposal3.valuators << [valuator1, valuator2] + + by_valuator = SpendingProposal.by_valuator(valuator1.id) + + expect(by_valuator.size).to eq(2) + expect(by_valuator.sort).to eq([spending_proposal1,spending_proposal3].sort) + end + end + describe "scopes" do describe "valuation_open" do it "should return all spending proposals with false valuation_finished" do