Skip to content
This repository has been archived by the owner on Mar 27, 2023. It is now read-only.

Commit

Permalink
Moves action_count for campaign to Campaign model
Browse files Browse the repository at this point in the history
  • Loading branch information
osahyoun committed Nov 7, 2016
1 parent 4ba7711 commit 8905459
Show file tree
Hide file tree
Showing 4 changed files with 35 additions and 16 deletions.
4 changes: 4 additions & 0 deletions app/models/campaign.rb
Expand Up @@ -16,4 +16,8 @@ class Campaign < ActiveRecord::Base
validates :name, presence: true, uniqueness: true

scope :active, -> { where(active: true) }

def action_count
pages.sum(:action_count)
end
end
4 changes: 2 additions & 2 deletions app/models/page.rb
Expand Up @@ -120,8 +120,8 @@ def slug_candidates
end

def campaign_action_count
@campaign_action_count ||= if campaign_id.present?
Page.where(campaign_id: campaign_id).sum(:action_count)
@campaign_action_count ||= if campaign
campaign.action_count
else
action_count
end
Expand Down
12 changes: 12 additions & 0 deletions spec/models/campaign_spec.rb
Expand Up @@ -9,7 +9,19 @@
# updated_at :datetime
#

require 'rails_helper'

describe Campaign do
describe 'validations' do
end

describe '#action_count' do
let(:campaign) { create(:campaign) }
let!(:page_a) { create(:page, campaign: campaign, action_count: 5) }
let!(:page_b) { create(:page, campaign: campaign, action_count: 5) }

it 'returns sum of counts from associated pages' do
expect(campaign.action_count).to eq(10)
end
end
end
31 changes: 17 additions & 14 deletions spec/models/page_spec.rb
Expand Up @@ -332,20 +332,23 @@
end
end

describe 'campaign_action_count' do
it 'gives action count of just page if no associated campaigns' do
allow(page).to receive(:campaign_id).and_return(nil)
allow(page).to receive(:action_count).and_return(1234)
expect(page.campaign_action_count).to equal 1234
expect(page).to have_received(:campaign_id)
end

it 'gives action count of campaign if one is associated' do
campaign = create :campaign
page1 = create :page, action_count: 2000, campaign: campaign
page2 = create :page, action_count: 2500, campaign: campaign
expect(page1.campaign_action_count).to eq 4500
expect(page2.campaign_action_count).to eq 4500
describe '#campaign_action_count' do
context 'without campaign' do
subject { create(:page, action_count: 5) }

it 'returns action count for page' do
expect(subject.campaign_action_count).to eq(5)
end
end

context 'with campaign' do
let(:campaign) { create(:campaign) }
subject { create(:page, campaign: campaign) }

it 'returns count for all campaign pages' do
expect(campaign).to receive(:action_count)
subject.campaign_action_count
end
end
end

Expand Down

0 comments on commit 8905459

Please sign in to comment.