VRFS-1576 added referrals_by_date and associated test

This commit is contained in:
Jonathan Kolyer 2014-04-22 07:12:05 +00:00
parent af63b03d6a
commit b232344336
2 changed files with 41 additions and 14 deletions

View File

@ -32,4 +32,13 @@ class JamRuby::AffiliatePartner < ActiveRecord::Base
self.where(:partner_code => code).limit(1).pluck(:id).present?
end
def referrals_by_date
User.where(:affiliate_referral_id => self.id)
.group('DATE(created_at)')
.count
.select { |day,count| 0 != count }
.inject([]) { |rr,kk,vv| rr << kk }
.sort { |a1,a2| a2[0] <=> a1[0] }
end
end

View File

@ -15,28 +15,28 @@ describe AffiliatePartner do
user.reload
expect(user.affiliate_partner).to eq(partner)
expect{AffiliatePartner.create_with_params({:partner_name => Faker::Company.name,
oo = AffiliatePartner.create_with_params({:partner_name => Faker::Company.name,
:partner_code => 'a',
:user_email => user.email})}
.to raise_error(ActiveRecord::RecordInvalid)
expect{AffiliatePartner.create_with_params({:partner_name => Faker::Company.name,
:user_email => user.email})
expect(oo.errors.messages[:partner_code][0]).to eq('is invalid')
oo = AffiliatePartner.create_with_params({:partner_name => Faker::Company.name,
:partner_code => 'foo bar',
:user_email => user.email})}
.to raise_error(ActiveRecord::RecordInvalid)
expect{AffiliatePartner.create_with_params({:partner_name => '',
:user_email => user.email})
expect(oo.errors.messages[:partner_code][0]).to eq('is invalid')
oo = AffiliatePartner.create_with_params({:partner_name => '',
:partner_code => Faker::Lorem.word,
:user_email => user.email})}
.to raise_error(ActiveRecord::RecordInvalid)
expect{AffiliatePartner.create_with_params({:partner_name => Faker::Company.name,
:user_email => user.email})
expect(oo.errors.messages[:partner_name][0]).to eq("can't be blank")
oo = AffiliatePartner.create_with_params({:partner_name => '',
:partner_code => Faker::Lorem.word,
:user_email => Faker::Internet.email})}
.to raise_error(ActiveRecord::RecordInvalid)
:user_email => Faker::Internet.email})
expect(oo.errors.messages[:partner_user][0]).to eq("can't be blank")
code = Faker::Lorem.word
code = Faker::Lorem.word.upcase
oo = AffiliatePartner.create_with_params({:partner_name => Faker::Company.name,
:partner_code => " #{code} ",
:user_email => user.email})
expect(oo.partner_code).to eq(code)
expect(oo.partner_code).to eq(code.downcase)
end
it 'has user referrals' do
@ -51,4 +51,22 @@ describe AffiliatePartner do
expect(partner.user_referrals[0]).to eq(uu)
end
it 'groups referrals properly' do
FactoryGirl.create(:user, :created_at => Time.now - 7.days, :affiliate_referral_id => partner.id)
FactoryGirl.create(:user, :created_at => Time.now - 7.days, :affiliate_referral_id => partner.id)
FactoryGirl.create(:user, :created_at => Time.now - 6.days, :affiliate_referral_id => partner.id)
FactoryGirl.create(:user, :created_at => Time.now - 6.days, :affiliate_referral_id => partner.id)
FactoryGirl.create(:user, :created_at => Time.now - 3.days, :affiliate_referral_id => partner.id)
FactoryGirl.create(:user, :created_at => Time.now - 2.days, :affiliate_referral_id => partner.id)
partner.reload
expect(partner.referral_user_count).to eq(6)
by_date = partner.referrals_by_date
expect(by_date.count).to eq(4)
expect(Date.parse(by_date.first.first.to_s)).to eq(Date.parse((Time.now - 2.days).to_s))
expect(by_date.first.last.to_i).to eq(1)
expect(Date.parse(by_date.last.first.to_s)).to eq(Date.parse((Time.now - 7.days).to_s))
expect(by_date.last.last.to_i).to eq(2)
end
end