Add method to easily access a local target by code

Similar to what we do in goals and targets.
This commit is contained in:
Javi Martín
2021-01-20 19:41:50 +01:00
committed by taitus
parent 8542e3e3cf
commit cb57a4696d
3 changed files with 20 additions and 5 deletions

View File

@@ -17,6 +17,10 @@ class SDG::LocalTarget < ApplicationRecord
belongs_to :target belongs_to :target
def self.[](code)
find_by!(code: code)
end
def <=>(any_target) def <=>(any_target)
if any_target.class == self.class if any_target.class == self.class
[target, numeric_subcode] <=> [any_target.target, any_target.numeric_subcode] [target, numeric_subcode] <=> [any_target.target, any_target.numeric_subcode]

View File

@@ -82,4 +82,16 @@ describe SDG::LocalTarget do
expect(local_target).to be < greater_target expect(local_target).to be < greater_target
end end
end end
describe ".[]" do
it "finds existing local targets by code" do
create(:sdg_local_target, code: "1.1.1")
expect(SDG::LocalTarget["1.1.1"].code).to eq "1.1.1"
end
it "raises an exception for non-existing codes" do
expect { SDG::LocalTarget["1.1.99"] }.to raise_exception ActiveRecord::RecordNotFound
end
end
end end

View File

@@ -168,11 +168,10 @@ describe "SDG Relations", :js do
end end
scenario "local target filter" do scenario "local target filter" do
schools = create(:sdg_local_target, code: "4.1.1") create(:sdg_local_target, code: "4.1.1")
teachers = create(:sdg_local_target, code: "4.1.2") create(:sdg_local_target, code: "4.1.2")
create(:debate, title: "Rebuild local schools", sdg_local_targets: [SDG::LocalTarget["4.1.1"]])
create(:debate, title: "Rebuild local schools", sdg_local_targets: [schools]) create(:debate, title: "Hire teachers", sdg_local_targets: [SDG::LocalTarget["4.1.2"]])
create(:debate, title: "Hire teachers", sdg_local_targets: [teachers])
visit sdg_management_debates_path visit sdg_management_debates_path
select "4.1.1", from: "target_code" select "4.1.1", from: "target_code"