Newer
Older
dmpopidor / spec / actions / stat_created_plan / generate_spec.rb
@Jose Lloret Jose Lloret on 2 Sep 2018 5 KB rebased onto development
require 'rails_helper'
require_relative '../../../app/actions/stat_created_plan/generate'

RSpec.describe Actions::StatCreatedPlan::Generate do
  let(:org) do
    FactoryBot.create(:org, created_at: DateTime.new(2018,04,01))
  end
  let(:template) do
    FactoryBot.create(:template, org: org)
  end
  let(:user1) do
    FactoryBot.create(:user, org: org)
  end
  let(:user2) do
    FactoryBot.create(:user, org: org)
  end
  let(:creator) { Role.access_values_for(:creator).first }
  let(:administrator) { Role.access_values_for(:administrator).first }
  describe '.full' do
    it "returns monthly aggregates since org's creation" do
      plan = FactoryBot.create(:plan, template: template, created_at: DateTime.new(2018,04,01))
      plan2 = FactoryBot.create(:plan, template: template, created_at: DateTime.new(2018,04,03))
      plan3 = FactoryBot.create(:plan, template: template, created_at: DateTime.new(2018,05,02))
      plan4 = FactoryBot.create(:plan, template: template, created_at: DateTime.new(2018,06,02))
      plan5 = FactoryBot.create(:plan, template: template, created_at: DateTime.new(2018,06,03))
      FactoryBot.create(:role, plan: plan, user: user1, access: creator) 
      FactoryBot.create(:role, plan: plan, user: user2, access: administrator)
      FactoryBot.create(:role, plan: plan2, user: user1, access: creator)
      FactoryBot.create(:role, plan: plan3, user: user1, access: creator)
      FactoryBot.create(:role, plan: plan4, user: user2, access: administrator)
      FactoryBot.create(:role, plan: plan5, user: user2, access: administrator)

      described_class.full(org)

      april = StatCreatedPlan.find_by(date: '2018-04-30', org_id: org.id).count
      may = StatCreatedPlan.find_by(date: '2018-05-31', org_id: org.id).count
      june = StatCreatedPlan.find_by(date: '2018-06-30', org_id: org.id).count
      july = StatCreatedPlan.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
      plan = FactoryBot.create(:plan, created_at: Date.today.last_month)
      plan2 = FactoryBot.create(:plan, created_at: Date.today.last_month)
      plan3 = FactoryBot.create(:plan, created_at: Date.today.last_month)
      FactoryBot.create(:role, plan: plan, user: user1, access: creator)
      FactoryBot.create(:role, plan: plan, user: user1, access: administrator)
      FactoryBot.create(:role, plan: plan2, user: user1, access: creator)
      FactoryBot.create(:role, plan: plan3, user: user2, access: creator)

      described_class.last_month(org)

      last_month = StatCreatedPlan.find_by(date: Date.today.last_month.end_of_month, org_id: org.id).count
      expect(last_month).to eq(3)
    end  
  end

  describe '.full_all_orgs' do
    it 'returns monthly aggregates for each org since their creation' do
      Org.stubs(:all).returns([org])
      plan = FactoryBot.create(:plan, template: template, created_at: DateTime.new(2018,04,01))
      plan2 = FactoryBot.create(:plan, template: template, created_at: DateTime.new(2018,04,03))
      plan3 = FactoryBot.create(:plan, template: template, created_at: DateTime.new(2018,05,02))
      plan4 = FactoryBot.create(:plan, template: template, created_at: DateTime.new(2018,06,02))
      plan5 = FactoryBot.create(:plan, template: template, created_at: DateTime.new(2018,06,03))
      FactoryBot.create(:role, plan: plan, user: user1, access: creator) 
      FactoryBot.create(:role, plan: plan, user: user2, access: administrator)
      FactoryBot.create(:role, plan: plan2, user: user1, access: creator)
      FactoryBot.create(:role, plan: plan3, user: user1, access: creator)
      FactoryBot.create(:role, plan: plan4, user: user2, access: administrator)
      FactoryBot.create(:role, plan: plan5, user: user2, access: administrator)

      described_class.full_all_orgs

      april = StatCreatedPlan.find_by(date: '2018-04-30', org_id: org.id).count
      may = StatCreatedPlan.find_by(date: '2018-05-31', org_id: org.id).count
      june = StatCreatedPlan.find_by(date: '2018-06-30', org_id: org.id).count
      july = StatCreatedPlan.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])
      plan = FactoryBot.create(:plan, created_at: Date.today.last_month)
      plan2 = FactoryBot.create(:plan, created_at: Date.today.last_month)
      plan3 = FactoryBot.create(:plan, created_at: Date.today.last_month)
      FactoryBot.create(:role, plan: plan, user: user1, access: creator)
      FactoryBot.create(:role, plan: plan, user: user1, access: administrator)
      FactoryBot.create(:role, plan: plan2, user: user1, access: creator)
      FactoryBot.create(:role, plan: plan3, user: user2, access: creator)

      described_class.last_month_all_orgs

      last_month = StatCreatedPlan.find_by(date: Date.today.last_month.end_of_month, org_id: org.id).count
      expect(last_month).to eq(3)
    end
  end
end