Add method to easily access a local target by code
Similar to what we do in goals and targets.
This commit is contained in:
@@ -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]
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user