jam-cloud/ruby/spec/jam_ruby/resque/google_analytics_event_spec.rb

110 lines
5.1 KiB
Ruby

require 'spec_helper'
describe GoogleAnalyticsEvent do
let(:ga) { GoogleAnalyticsEvent.new }
after(:each) do
Timecop.return
end
describe "track band analytics" do
it 'reports first recording' do
ResqueSpec.reset!
user = FactoryGirl.create(:user)
band = FactoryGirl.create(:band)
music_session = FactoryGirl.create(:active_music_session,
:creator => user,
:musician_access => true,
:band => band)
recording = Recording.start(music_session, user)
expect(Recording.where(:band_id => band.id).count).to eq(1)
GoogleAnalyticsEvent.should have_queued(GoogleAnalyticsEvent::CAT_BAND,
GoogleAnalyticsEvent::ACTION_BAND_REC,
nil)
end
it 'reports first real session' do
ResqueSpec.reset!
JamRuby::GoogleAnalyticsEvent::BandSessionTracker.should have_schedule_size_of(0)
user = FactoryGirl.create(:user)
user1 = FactoryGirl.create(:user)
band = FactoryGirl.create(:band)
band.users << user
band.users << user1
band.reload
music_session = FactoryGirl.create(:active_music_session, :creator => user,
:musician_access => true, :band => band)
expect(band.band_musicians.count).to eq(2)
expect(band.did_real_session).to eq(false)
connection = FactoryGirl.create(:connection, :user => user, :as_musician => true,
:aasm_state => Connection::CONNECT_STATE.to_s,
:music_session => music_session)
connection = FactoryGirl.create(:connection, :user => user1, :as_musician => true,
:aasm_state => Connection::CONNECT_STATE.to_s,
:music_session => music_session)
music_session.reload
expect(music_session.connected_participant_count).to eq(2)
expect(band.did_real_session).to eq(false)
ResqueSpec.queues["#{GoogleAnalyticsEvent::QUEUE_BAND_TRACKER}_scheduled"].select do |qq|
qq[:class] == GoogleAnalyticsEvent::BandSessionTracker.name
end.count.should eq(1)
# GoogleAnalyticsEvent::BandSessionTracker.should have_schedule_size_of_at_least(1)
GoogleAnalyticsEvent.should_not have_queued(GoogleAnalyticsEvent::CAT_BAND, GoogleAnalyticsEvent::ACTION_BAND_SESS, nil)
Timecop.freeze((GoogleAnalyticsEvent::BAND_SESSION_MIN_DURATION + 1).minutes.from_now)
qname = "#{ResqueSpec.queue_name(JamRuby::GoogleAnalyticsEvent::BandSessionTracker)}_scheduled"
expect(ResqueSpec.peek(qname).present?).to eq(true)
ResqueSpec.perform_next(qname)
GoogleAnalyticsEvent.should have_queued(GoogleAnalyticsEvent::CAT_BAND,
GoogleAnalyticsEvent::ACTION_BAND_SESS,
nil)
band.reload
expect(band.did_real_session).to eq(true)
end
end
describe "track session analytics" do
before :each do
ResqueSpec.reset!
end
it 'reports size increment' do
user = FactoryGirl.create(:user)
music_session = FactoryGirl.create(:active_music_session,
:creator => user,
:musician_access => true)
connection = FactoryGirl.create(:connection, :user => user,
:as_musician => true,
:aasm_state => Connection::CONNECT_STATE.to_s,
:music_session => music_session)
GoogleAnalyticsEvent.should have_queued(GoogleAnalyticsEvent::CAT_SESS_SIZE,
GoogleAnalyticsEvent::ACTION_SESS_SIZE,
music_session.connected_participant_count)
end
it 'reports duration' do
user = FactoryGirl.create(:user)
JamRuby::GoogleAnalyticsEvent::SessionDurationTracker.should have_schedule_size_of(0)
music_session = FactoryGirl.create(:active_music_session,
:creator => user,
:musician_access => true)
GoogleAnalyticsEvent::SessionDurationTracker.should have_schedule_size_of(1)
GoogleAnalyticsEvent::SESSION_INTERVALS.each do |interval|
Timecop.travel((interval + 1).minutes.from_now)
qname = "#{ResqueSpec.queue_name(JamRuby::GoogleAnalyticsEvent::SessionDurationTracker)}_scheduled"
next unless ResqueSpec.peek(qname).present?
ResqueSpec.perform_next(qname)
GoogleAnalyticsEvent.should have_queued(GoogleAnalyticsEvent::CAT_SESS_DUR,
GoogleAnalyticsEvent::ACTION_SESS_DUR,
interval)
end
GoogleAnalyticsEvent.should have_queue_size_of(GoogleAnalyticsEvent::SESSION_INTERVALS.count - 1)
end
end
end