diff --git a/app/models/sdg/local_target.rb b/app/models/sdg/local_target.rb index a7328955c..6711519d1 100644 --- a/app/models/sdg/local_target.rb +++ b/app/models/sdg/local_target.rb @@ -17,6 +17,10 @@ class SDG::LocalTarget < ApplicationRecord belongs_to :target + def self.[](code) + find_by!(code: code) + end + def <=>(any_target) if any_target.class == self.class [target, numeric_subcode] <=> [any_target.target, any_target.numeric_subcode] diff --git a/spec/models/sdg/local_target_spec.rb b/spec/models/sdg/local_target_spec.rb index 523baa396..6bea11139 100644 --- a/spec/models/sdg/local_target_spec.rb +++ b/spec/models/sdg/local_target_spec.rb @@ -82,4 +82,16 @@ describe SDG::LocalTarget do expect(local_target).to be < greater_target 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 diff --git a/spec/system/sdg_management/relations_spec.rb b/spec/system/sdg_management/relations_spec.rb index 0fdea91a4..6469df277 100644 --- a/spec/system/sdg_management/relations_spec.rb +++ b/spec/system/sdg_management/relations_spec.rb @@ -168,11 +168,10 @@ describe "SDG Relations", :js do end scenario "local target filter" do - schools = create(:sdg_local_target, code: "4.1.1") - teachers = create(:sdg_local_target, code: "4.1.2") - - create(:debate, title: "Rebuild local schools", sdg_local_targets: [schools]) - create(:debate, title: "Hire teachers", sdg_local_targets: [teachers]) + create(:sdg_local_target, code: "4.1.1") + 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: "Hire teachers", sdg_local_targets: [SDG::LocalTarget["4.1.2"]]) visit sdg_management_debates_path select "4.1.1", from: "target_code"