require 'rails_helper' require_relative '../../../app/actions/stat_joined_user/generate' RSpec.describe Actions::StatJoinedUser::Generate do let(:org) do FactoryBot.create(:org, created_at: DateTime.new(2018,04,01)) end describe '.full' do it "returns monthly aggregates since org's creation" do april = [FactoryBot.create(:user, org: org, created_at: DateTime.new(2018,04,03,0,0,0)), FactoryBot.create(:user, org: org, created_at: DateTime.new(2018,04,04,0,0,0))] may = [FactoryBot.create(:user, org: org, created_at: DateTime.new(2018,05,03,0,0,0))] june = [FactoryBot.create(:user, org: org, created_at: DateTime.new(2018,06,03,0,0,0)), FactoryBot.create(:user, org: org, created_at: DateTime.new(2018,06,04,0,0,0))] described_class.full(org) april = StatJoinedUser.find_by(date: '2018-04-30', org_id: org.id).count may = StatJoinedUser.find_by(date: '2018-05-31', org_id: org.id).count june = StatJoinedUser.find_by(date: '2018-06-30', org_id: org.id).count july = StatJoinedUser.find_by(date: '2018-07-31', org_id: org.id).count expect([april, may, june, july]).to eq([2,1,2,0]) end end describe '.last_month' do it "returns aggregates from today's last month" do 5.times do FactoryBot.create(:user, org: org, created_at: Date.today.last_month) end described_class.last_month(org) last_month = StatJoinedUser.find_by(date: Date.today.last_month.end_of_month, org_id: org.id).count expect(last_month).to eq(5) end end describe '.full_all_orgs' do it "returns monthly aggregates for each org since their creation" do Org.expects(:all).returns([org]) april = [FactoryBot.create(:user, org: org, created_at: DateTime.new(2018,04,03,0,0,0)), FactoryBot.create(:user, org: org, created_at: DateTime.new(2018,04,04,0,0,0))] may = [FactoryBot.create(:user, org: org, created_at: DateTime.new(2018,05,03,0,0,0))] june = [FactoryBot.create(:user, org: org, created_at: DateTime.new(2018,06,03,0,0,0)), FactoryBot.create(:user, org: org, created_at: DateTime.new(2018,06,04,0,0,0))] described_class.full_all_orgs april = StatJoinedUser.find_by(date: '2018-04-30', org_id: org.id).count may = StatJoinedUser.find_by(date: '2018-05-31', org_id: org.id).count june = StatJoinedUser.find_by(date: '2018-06-30', org_id: org.id).count july = StatJoinedUser.find_by(date: '2018-07-31', org_id: org.id).count expect([april, may, june, july]).to eq([2,1,2,0]) end end describe '.last_month_all_orgs' do it "returns aggregates from today's last month" do Org.expects(:all).returns([org]) 5.times do FactoryBot.create(:user, org: org, created_at: Date.today.last_month) end described_class.last_month_all_orgs last_month = StatJoinedUser.find_by(date: Date.today.last_month.end_of_month, org_id: org.id).count expect(last_month).to eq(5) end end end