diff --git a/app/models/concerns/relationable.rb b/app/models/concerns/relationable.rb index 4f4edcd32..26f755f03 100644 --- a/app/models/concerns/relationable.rb +++ b/app/models/concerns/relationable.rb @@ -5,6 +5,14 @@ module Relationable has_many :related_contents, as: :parent_relationable, dependent: :destroy end + def relate_content(relationable) + RelatedContent.find_or_create_by(parent_relationable: self, child_relationable: relationable) + end + + def relationed_contents + related_contents.not_hidden.map { |related_content| related_content.child_relationable } + end + def report_related_content(relationable) related_content = related_contents.find_by(child_relationable: relationable) if related_content.present? diff --git a/spec/models/relation_spec.rb b/spec/models/relation_spec.rb index 9f1b4d70c..86bbe2c14 100644 --- a/spec/models/relation_spec.rb +++ b/spec/models/relation_spec.rb @@ -60,4 +60,17 @@ describe RelatedContent do end end + describe '#relationed_contents' do + before do + create(:related_content, parent_relationable: parent_relationable, child_relationable: create(:proposal), times_reported: 6) + create(:related_content, parent_relationable: parent_relationable, child_relationable: child_relationable) + end + + it 'returns not hidden by reports related contents' do + expect(parent_relationable.relationed_contents.count).to eq(1) + expect(parent_relationable.relationed_contents.first.class.name).to eq(child_relationable.class.name) + expect(parent_relationable.relationed_contents.first.id).to eq(child_relationable.id) + end + end + end