EnterpriseRelationship.relatives can find activated enterprises only

This commit is contained in:
Rohan Mitchell
2015-05-29 12:07:43 +10:00
parent 3ab7df88e6
commit cdbf02ca20
2 changed files with 19 additions and 5 deletions

View File

@@ -28,7 +28,7 @@ class EnterpriseRelationship < ActiveRecord::Base
# Load an array of the relatives of each enterprise (ie. any enterprise related to it in
# either direction). This array is split into distributors and producers, and has the format:
# {enterprise_id => {distributors: [id, ...], producers: [id, ...]} }
def self.relatives
def self.relatives(activated_only=false)
relationships = EnterpriseRelationship.includes(:child, :parent)
relatives = {}
@@ -36,11 +36,15 @@ class EnterpriseRelationship < ActiveRecord::Base
relatives[r.parent_id] ||= {distributors: [], producers: []}
relatives[r.child_id] ||= {distributors: [], producers: []}
relatives[r.parent_id][:producers] << r.child_id if r.child.is_primary_producer
relatives[r.parent_id][:distributors] << r.child_id if r.child.is_distributor
if !activated_only || r.child.activated?
relatives[r.parent_id][:producers] << r.child_id if r.child.is_primary_producer
relatives[r.parent_id][:distributors] << r.child_id if r.child.is_distributor
end
relatives[r.child_id][:producers] << r.parent_id if r.parent.is_primary_producer
relatives[r.child_id][:distributors] << r.parent_id if r.parent.is_distributor
if !activated_only || r.parent.activated?
relatives[r.child_id][:producers] << r.parent_id if r.parent.is_primary_producer
relatives[r.child_id][:distributors] << r.parent_id if r.parent.is_distributor
end
end
relatives

View File

@@ -80,5 +80,15 @@ describe EnterpriseRelationship do
{e1.id => {distributors: [e2.id], producers: [e2.id]},
e2.id => {distributors: [], producers: [e1.id]}}
end
it "finds inactive enterprises by default" do
e1.update_attribute :confirmed_at, nil
EnterpriseRelationship.relatives[e2.id][:producers].should == [e1.id]
end
it "does not find inactive enterprises when requested" do
e1.update_attribute :confirmed_at, nil
EnterpriseRelationship.relatives(true)[e2.id][:producers].should be_empty
end
end
end