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

118 lines
5.2 KiB
Ruby

require 'spec_helper'
require 'fileutils'
# these tests avoid the use of ActiveRecord and FactoryGirl to do blackbox, non test-instrumented tests
describe IcecastSourceCheck do
let(:check) { IcecastSourceCheck.new }
describe "integration" do
it "be OK with no mounts" do
IcecastMount.count().should == 0
check.should_not_receive(:handle_notifications)
check.run
end
it "find a mounts if sourced_needs_changing_at is nil and listeners = 1/sourced = false" do
mount = FactoryGirl.create(:iceast_mount_with_music_session, sourced: false, listeners: 1, sourced_needs_changing_at: nil)
check.should_receive(:handle_notifications).once
check.run
end
it "find a mount if source_changed timestamp is nil and listeners = 0/sourced = true" do
mount = FactoryGirl.create(:iceast_mount_with_music_session, sourced: true, listeners: 0, sourced_needs_changing_at: nil)
check.should_receive(:handle_notifications).once
check.run
end
it "find no mounts if source_changed timestamp is nil and listeners = 0/sourced = true" do
mount = FactoryGirl.create(:iceast_mount_with_music_session, sourced: true, listeners: 1)
check.should_not_receive(:handle_notifications)
check.run
end
it "find no mounts if source_changed timestamp is very recent and listeners = 1/sourced = false" do
mount = FactoryGirl.create(:iceast_mount_with_music_session, sourced_needs_changing_at: Time.now, sourced: false, listeners: 1)
check.should_not_receive(:handle_notifications)
check.run
end
it "find no mounts if source_changed timestamp is very recent and listeners = 0/sourced = true" do
mount = FactoryGirl.create(:iceast_mount_with_music_session, sourced_needs_changing_at: Time.now, sourced: true, listeners: 0)
check.should_not_receive(:handle_notifications)
check.run
end
it "sends notify_source_down_requested when old source_changed timestamp, and sourced = true and listeners = 0" do
mount = FactoryGirl.create(:iceast_mount_with_music_session, sourced_needs_changing_at: 2.days.ago, sourced:true, listeners: 0)
check.stub(:handle_notifications) do |mount|
mount.should_receive(:notify_source_down_requested).once
mount.should_not_receive(:notify_source_up_requested)
mount.should_not_receive(:notify_source_up)
mount.should_not_receive(:notify_source_down)
check.unstub!(:handle_notifications)
check.handle_notifications(mount)
end
check.run
end
it "does not send notify_source_down_requested when old source_changed timestamp, and sourced = true and listeners = 1" do
mount = FactoryGirl.create(:iceast_mount_with_music_session, sourced_needs_changing_at: 2.days.ago, sourced:true, listeners: 1)
check.stub(:handle_notifications) do |mount|
mount.should_not_receive(:notify_source_down_requested)
mount.should_not_receive(:notify_source_up_requested)
mount.should_not_receive(:notify_source_up)
mount.should_not_receive(:notify_source_down)
check.unstub!(:handle_notifications)
check.handle_notifications(mount)
end
check.run
end
it "sends notify_source_up_requested when old source_changed timestamp, and sourced = false and listeners = 1" do
mount = FactoryGirl.create(:iceast_mount_with_music_session, sourced_needs_changing_at: 2.days.ago, sourced:false, listeners: 1)
check.stub(:handle_notifications) do |mount|
mount.should_not_receive(:notify_source_down_requested)
mount.should_receive(:notify_source_up_requested).once
mount.should_not_receive(:notify_source_up)
mount.should_not_receive(:notify_source_down)
check.unstub!(:handle_notifications)
check.handle_notifications(mount)
end
check.run
end
it "does not send notify_source_up_requested when old source_changed timestamp, and sourced = false and listeners = 0" do
mount = FactoryGirl.create(:iceast_mount_with_music_session, sourced_needs_changing_at: 2.days.ago, sourced:false, listeners: 0)
check.stub(:handle_notifications) do |mount|
mount.should_not_receive(:notify_source_down_requested)
mount.should_not_receive(:notify_source_up_requested)
mount.should_not_receive(:notify_source_up)
mount.should_not_receive(:notify_source_down)
check.unstub!(:handle_notifications)
check.handle_notifications(mount)
end
check.run
end
it "does not resets source_changed_at when a notification is sent out" do
mount = FactoryGirl.create(:iceast_mount_with_music_session, sourced_needs_changing_at: 2.days.ago, sourced:false, listeners: 1)
check.stub(:handle_notifications) do |mount|
mount.should_not_receive(:notify_source_down_requested)
mount.should_receive(:notify_source_up_requested).once
mount.should_not_receive(:notify_source_up)
mount.should_not_receive(:notify_source_down)
check.unstub!(:handle_notifications)
check.handle_notifications(mount)
end
check.run
mount.reload
(2.days.ago - mount.sourced_needs_changing_at).to_i.abs.should < 10 # less than 5 seconds -- just a little slop for a very slow build server
end
end
end