require 'spec_helper' describe AffiliatePartner do let!(:user) { FactoryGirl.create(:user) } let!(:partner) { AffiliatePartner.create_with_params({:partner_name => 'partner', :partner_code => 'code', :user_email => user.email}) } # Faker::Lorem.word is tripping up the PARTNER_CODE_REGEX. We should not use it. it 'validates required fields' do pending expect(partner.referral_user_count).to eq(0) expect(partner.partner_user).to eq(user) user.reload expect(user.affiliate_partner).to eq(partner) oo = AffiliatePartner.create_with_params({:partner_name => Faker::Company.name, :partner_code => 'a', :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}) 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}) 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}) expect(oo.errors.messages[:partner_user][0]).to eq("can't be blank") 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.downcase) end it 'has user referrals' do pending expect(AffiliatePartner.coded_id(partner.partner_code)).to eq(partner.id) expect(partner.referral_user_count).to eq(0) uu = FactoryGirl.create(:user) uu.affiliate_referral = partner uu.save partner.reload expect(uu.affiliate_referral).to eq(partner) expect(partner.referral_user_count).to eq(1) 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) keys = by_date.keys expect(Date.parse(keys.first)).to eq(Date.parse((Time.now - 2.days).to_s)) expect(by_date[keys.first]).to eq(1) expect(Date.parse(keys.last)).to eq(Date.parse((Time.now - 7.days).to_s)) expect(by_date[keys.last]).to eq(2) end end