From 0482eb4098ba9c794bf309a2212aed8143c84e0d Mon Sep 17 00:00:00 2001 From: Bertocq Date: Tue, 28 Nov 2017 01:46:00 +0100 Subject: [PATCH] Add report_related_content helper funcion on Relationable concern with spec --- app/models/concerns/relationable.rb | 8 ++++++++ spec/models/relation_spec.rb | 12 ++++++++++++ 2 files changed, 20 insertions(+) diff --git a/app/models/concerns/relationable.rb b/app/models/concerns/relationable.rb index 84a945bad..4f4edcd32 100644 --- a/app/models/concerns/relationable.rb +++ b/app/models/concerns/relationable.rb @@ -4,4 +4,12 @@ module Relationable included do has_many :related_contents, as: :parent_relationable, dependent: :destroy end + + def report_related_content(relationable) + related_content = related_contents.find_by(child_relationable: relationable) + if related_content.present? + related_content.increment!(:times_reported) + related_content.opposite_related_content.increment!(:times_reported) + end + end end diff --git a/spec/models/relation_spec.rb b/spec/models/relation_spec.rb index ebefa51fa..9f1b4d70c 100644 --- a/spec/models/relation_spec.rb +++ b/spec/models/relation_spec.rb @@ -48,4 +48,16 @@ describe RelatedContent do expect(child_relationable.related_contents).to be_empty end end + + # TODO: Move this into a Relationable shared context + describe '#report_related_content' do + it 'increments both relation and opposite relation times_reported counters' do + related_content = create(:related_content, parent_relationable: parent_relationable, child_relationable: child_relationable) + parent_relationable.report_related_content(child_relationable) + + expect(related_content.reload.times_reported).to eq(1) + expect(related_content.reload.opposite_related_content.times_reported).to eq(1) + end + end + end