jam-cloud/ruby/spec/jam_ruby/models/notification_spec.rb

849 lines
27 KiB
Ruby

require 'spec_helper'
describe Notification do
before(:each) do
UserMailer.deliveries.clear
end
def count_publish_to_user_calls
result = {count: 0}
MQRouter.any_instance.stub(:publish_to_user) do |receiver_id, msg|
result[:count] += 1
result[:msg] = msg
end
result
end
describe "send friend request" do
let(:receiver) {FactoryGirl.create(:user)}
let(:sender) {FactoryGirl.create(:user)}
let(:friend_request) {FactoryGirl.create(:friend_request, user:sender, friend:receiver)}
it "sends email when user is offline and subscribes to emails" do
calls = count_publish_to_user_calls
notification = Notification.send_friend_request(friend_request.id, sender.id, receiver.id)
notification.errors.any?.should be_false
UserMailer.deliveries.length.should == 1
calls[:count].should == 0
end
it "does not send email when user is offline and opts out of emails" do
receiver.subscribe_email = false
receiver.save!
calls = count_publish_to_user_calls
notification = Notification.send_friend_request(friend_request.id, sender.id, receiver.id)
notification.errors.any?.should be_false
UserMailer.deliveries.length.should == 0
calls[:count].should == 0
end
it "success when online" do
receiver_connection = FactoryGirl.create(:connection, user: receiver)
calls = count_publish_to_user_calls
notification = Notification.send_friend_request(friend_request.id, sender.id, receiver.id)
notification.errors.any?.should be_false
UserMailer.deliveries.length.should == 0
calls[:count].should == 1
end
end
describe "send friend request accepted" do
let(:receiver) {FactoryGirl.create(:user)}
let(:sender) {FactoryGirl.create(:user)}
let(:friend_request) {FactoryGirl.create(:friend_request, user:sender, friend:receiver)}
it "sends email when user is offline and subscribes to emails" do
calls = count_publish_to_user_calls
Notification.send_friend_request_accepted(receiver.id, sender.id)
UserMailer.deliveries.length.should == 1
calls[:count].should == 0
end
it "does not send email when user is offline and opts out of emails" do
receiver.subscribe_email = false
receiver.save!
calls = count_publish_to_user_calls
Notification.send_friend_request_accepted(receiver.id, sender.id)
UserMailer.deliveries.length.should == 0
calls[:count].should == 0
end
end
describe "send new user follower" do
let(:receiver) {FactoryGirl.create(:user)}
let(:sender) {FactoryGirl.create(:user)}
it "sends email when user is offline and subscribes to emails" do
calls = count_publish_to_user_calls
Notification.send_new_user_follower(sender, receiver)
UserMailer.deliveries.length.should == 1
calls[:count].should == 0
end
it "does not send email when user is offline and opts out of emails" do
receiver.subscribe_email = false
receiver.save!
calls = count_publish_to_user_calls
Notification.send_new_user_follower(sender, receiver)
UserMailer.deliveries.length.should == 0
calls[:count].should == 0
end
end
describe "send new band follower" do
let(:member) {FactoryGirl.create(:user)}
let(:sender) {FactoryGirl.create(:user)}
let(:band) {FactoryGirl.create(:band)}
it "sends email when user is offline and subscribes to emails" do
band.users << member
calls = count_publish_to_user_calls
Notification.send_new_band_follower(sender, band)
UserMailer.deliveries.length.should == 1
calls[:count].should == 0
end
it "does not send email when user is offline and opts out of emails" do
member.subscribe_email = false
member.save!
band.users << member
calls = count_publish_to_user_calls
Notification.send_new_band_follower(sender, band)
UserMailer.deliveries.length.should == 0
calls[:count].should == 0
end
end
describe "send session invitation" do
let(:receiver) {FactoryGirl.create(:user)}
let(:sender) {FactoryGirl.create(:user)}
let(:session) {FactoryGirl.create(:music_session)}
it "sends email when user is offline and subscribes to emails" do
calls = count_publish_to_user_calls
Notification.send_session_invitation(receiver, sender, session.id)
UserMailer.deliveries.length.should == 1
calls[:count].should == 0
end
it "does not send email when user is offline and opts out of emails" do
receiver.subscribe_email = false
receiver.save!
calls = count_publish_to_user_calls
Notification.send_session_invitation(receiver, sender, session.id)
UserMailer.deliveries.length.should == 0
calls[:count].should == 0
end
end
describe "send musician session join" do
let(:receiver) {FactoryGirl.create(:user)}
let(:sender) {FactoryGirl.create(:user)}
let(:session) {FactoryGirl.create(:music_session)}
it "sends email when user is offline and subscribes to emails" do
session.creator = sender
session.save!
FactoryGirl.create(:friendship, :user => receiver, :friend => sender)
FactoryGirl.create(:friendship, :user => sender, :friend => receiver)
calls = count_publish_to_user_calls
Notification.send_musician_session_join(session, sender)
UserMailer.deliveries.length.should == 1
calls[:count].should == 0
end
it "does not send email when user is offline and opts out of emails" do
session.creator = sender
session.save!
FactoryGirl.create(:friendship, :user => receiver, :friend => sender)
FactoryGirl.create(:friendship, :user => sender, :friend => receiver)
receiver.subscribe_email = false
receiver.save!
calls = count_publish_to_user_calls
Notification.send_musician_session_join(session, sender)
UserMailer.deliveries.length.should == 0
calls[:count].should == 0
end
end
describe "send musician recording saved join" do
let(:receiver) {FactoryGirl.create(:user)}
let(:recording) {FactoryGirl.create(:recording)}
it "sends email when user is offline and subscribes to emails" do
FactoryGirl.create(:friendship, :user => receiver, :friend => recording.owner)
FactoryGirl.create(:friendship, :user => recording.owner, :friend => receiver)
calls = count_publish_to_user_calls
Notification.send_musician_recording_saved(recording)
UserMailer.deliveries.length.should == 1
calls[:count].should == 0
end
it "does not send email when user is offline and opts out of emails" do
FactoryGirl.create(:friendship, :user => receiver, :friend => recording.owner)
FactoryGirl.create(:friendship, :user => recording.owner, :friend => receiver)
receiver.subscribe_email = false
receiver.save!
calls = count_publish_to_user_calls
Notification.send_musician_recording_saved(recording)
UserMailer.deliveries.length.should == 0
calls[:count].should == 0
end
end
describe "send band session join" do
let(:follower) {FactoryGirl.create(:user)}
let(:sender) {FactoryGirl.create(:user)}
let(:band) {FactoryGirl.create(:band)}
let(:session) {FactoryGirl.create(:music_session)}
it "sends email when user is offline and subscribes to emails" do
session.creator = sender
session.save!
f = Follow.new
f.user_id = follower.id
f.followable_id = band.id
f.followable_type = "JamRuby::Band"
f.save!
calls = count_publish_to_user_calls
Notification.send_band_session_join(session, band)
UserMailer.deliveries.length.should == 1
calls[:count].should == 0
end
it "does not send email when user is offline and opts out of emails" do
session.creator = sender
session.save!
follower.subscribe_email = false
follower.save!
f = Follow.new
f.user_id = follower.id
f.followable_id = band.id
f.followable_type = "JamRuby::Band"
f.save!
band.users << sender
calls = count_publish_to_user_calls
Notification.send_band_session_join(session, band)
UserMailer.deliveries.length.should == 0
calls[:count].should == 0
end
end
describe "send band recording saved join" do
let(:follower) {FactoryGirl.create(:user)}
let(:band) {FactoryGirl.create(:band)}
let(:recording) {FactoryGirl.create(:recording)}
it "sends email when user is offline and subscribes to emails" do
f = Follow.new
f.user_id = follower.id
f.followable_id = band.id
f.followable_type = "JamRuby::Band"
f.save!
recording.band = band
recording.save!
calls = count_publish_to_user_calls
Notification.send_band_recording_saved(recording)
UserMailer.deliveries.length.should == 1
calls[:count].should == 0
end
it "does not send email when user is offline and opts out of emails" do
follower.subscribe_email = false
follower.save!
f = Follow.new
f.user_id = follower.id
f.followable_id = band.id
f.followable_type = "JamRuby::Band"
f.save!
recording.band = band
recording.save!
follower.subscribe_email = false
follower.save!
calls = count_publish_to_user_calls
Notification.send_band_recording_saved(recording)
UserMailer.deliveries.length.should == 0
calls[:count].should == 0
end
end
describe "send band invitation" do
end
describe "send band invitation accepted" do
end
describe "send scheduled session invitation" do
let(:receiver) {FactoryGirl.create(:user)}
let(:sender) {FactoryGirl.create(:user)}
let(:session) {FactoryGirl.create(:music_session)}
it "sends email when user is offline and subscribes to emails" do
session.creator = sender
session.save!
calls = count_publish_to_user_calls
notification = Notification.send_scheduled_session_invitation(session, receiver)
UserMailer.deliveries.length.should == 1
calls[:count].should == 1
end
it "does not send email when user is offline and opts out of emails" do
session.creator = sender
session.save!
receiver.subscribe_email = false
receiver.save!
calls = count_publish_to_user_calls
notification = Notification.send_scheduled_session_invitation(session, receiver)
UserMailer.deliveries.length.should == 0
calls[:count].should == 1
end
it "sends no notification if session is nil" do
calls = count_publish_to_user_calls
notification = Notification.send_scheduled_session_invitation(nil, sender)
UserMailer.deliveries.length.should == 0
calls[:count].should == 0
end
it "sends no notification if user is nil" do
calls = count_publish_to_user_calls
notification = Notification.send_scheduled_session_invitation(session, nil)
UserMailer.deliveries.length.should == 0
calls[:count].should == 0
end
end
describe "send scheduled session rsvp" do
let(:receiver) {FactoryGirl.create(:user)}
let(:sender) {FactoryGirl.create(:user)}
let(:session) {FactoryGirl.create(:music_session)}
it "sends email when user is offline and subscribes to emails" do
session.creator = sender
session.save!
calls = count_publish_to_user_calls
notification = Notification.send_scheduled_session_rsvp(session, receiver, nil)
UserMailer.deliveries.length.should == 1
calls[:count].should == 1
end
it "does not send email when user is offline and opts out of emails" do
session.creator = sender
session.save!
session.creator.subscribe_email = false
session.creator.save!
calls = count_publish_to_user_calls
notification = Notification.send_scheduled_session_rsvp(session, receiver, nil)
UserMailer.deliveries.length.should == 0
calls[:count].should == 1
end
it "sends no notification if session is nil" do
calls = count_publish_to_user_calls
notification = Notification.send_scheduled_session_rsvp(nil, receiver, nil)
UserMailer.deliveries.length.should == 0
calls[:count].should == 0
end
it "sends no notification if user is nil" do
calls = count_publish_to_user_calls
notification = Notification.send_scheduled_session_rsvp(session, nil, nil)
UserMailer.deliveries.length.should == 0
calls[:count].should == 0
end
end
describe "send scheduled session rsvp approved" do
let(:receiver) {FactoryGirl.create(:user)}
let(:sender) {FactoryGirl.create(:user)}
let(:session) {FactoryGirl.create(:music_session)}
it "sends email when user is offline and subscribes to emails" do
session.creator = sender
session.save!
calls = count_publish_to_user_calls
notification = Notification.send_scheduled_session_rsvp_approved(session, receiver, nil)
UserMailer.deliveries.length.should == 1
calls[:count].should == 1
end
it "does not send email when user is offline and opts out of emails" do
session.creator = sender
session.save!
receiver.subscribe_email = false
receiver.save!
calls = count_publish_to_user_calls
notification = Notification.send_scheduled_session_rsvp_approved(session, receiver, nil)
UserMailer.deliveries.length.should == 0
calls[:count].should == 1
end
it "sends no notification if session is nil" do
calls = count_publish_to_user_calls
notification = Notification.send_scheduled_session_rsvp_approved(nil, receiver, nil)
UserMailer.deliveries.length.should == 0
calls[:count].should == 0
end
it "sends no notification if user is nil" do
calls = count_publish_to_user_calls
notification = Notification.send_scheduled_session_rsvp_approved(session, nil, nil)
UserMailer.deliveries.length.should == 0
calls[:count].should == 0
end
end
describe "send scheduled session rsvp cancellation" do
let(:receiver) {FactoryGirl.create(:user)}
let(:sender) {FactoryGirl.create(:user)}
let(:session) {FactoryGirl.create(:music_session)}
it "sends email when user is offline and subscribes to emails" do
session.creator = sender
session.save!
calls = count_publish_to_user_calls
notification = Notification.send_scheduled_session_rsvp_cancelled(session, receiver)
UserMailer.deliveries.length.should == 1
calls[:count].should == 1
end
it "does not send email when user is offline and opts out of emails" do
session.creator = sender
session.save!
session.creator.subscribe_email = false
session.creator.save!
calls = count_publish_to_user_calls
notification = Notification.send_scheduled_session_rsvp_cancelled(session, receiver)
UserMailer.deliveries.length.should == 0
calls[:count].should == 1
end
it "sends no notification if session is nil" do
calls = count_publish_to_user_calls
notification = Notification.send_scheduled_session_rsvp_cancelled(nil, receiver)
UserMailer.deliveries.length.should == 0
calls[:count].should == 0
end
it "sends no notification if user is nil" do
calls = count_publish_to_user_calls
notification = Notification.send_scheduled_session_rsvp_cancelled(session, nil)
UserMailer.deliveries.length.should == 0
calls[:count].should == 0
end
end
describe "send scheduled session rsvp cancellation by organizer" do
let(:receiver) {FactoryGirl.create(:user)}
let(:sender) {FactoryGirl.create(:user)}
let(:session) {FactoryGirl.create(:music_session)}
it "sends email when user is offline and subscribes to emails" do
session.creator = sender
session.save!
calls = count_publish_to_user_calls
notification = Notification.send_scheduled_session_rsvp_cancelled_org(session, receiver)
UserMailer.deliveries.length.should == 1
calls[:count].should == 1
end
it "does not send email when user is offline and opts out of emails" do
session.creator = sender
session.save!
receiver.subscribe_email = false
receiver.save!
calls = count_publish_to_user_calls
notification = Notification.send_scheduled_session_rsvp_cancelled_org(session, receiver)
UserMailer.deliveries.length.should == 0
calls[:count].should == 1
end
it "sends no notification if session is nil" do
calls = count_publish_to_user_calls
notification = Notification.send_scheduled_session_rsvp_cancelled_org(nil, receiver)
UserMailer.deliveries.length.should == 0
calls[:count].should == 0
end
it "sends no notification if user is nil" do
calls = count_publish_to_user_calls
notification = Notification.send_scheduled_session_rsvp_cancelled_org(session, nil)
UserMailer.deliveries.length.should == 0
calls[:count].should == 0
end
end
describe "send scheduled session cancellation" do
let(:receiver) {FactoryGirl.create(:user)}
let(:sender) {FactoryGirl.create(:user)}
let(:session) {FactoryGirl.create(:music_session)}
# it "sends email when user is offline and subscribes to emails" do
# session.creator = sender
# session.save!
# calls = count_publish_to_user_calls
# notification = Notification.send_scheduled_session_cancelled(session)
# UserMailer.deliveries.length.should == 1
# calls[:count].should == 1
# end
# it "does not send email when user is offline and opts out of emails" do
# session.creator = sender
# session.save!
# receiver.subscribe_email = false
# receiver.save!
# calls = count_publish_to_user_calls
# notification = Notification.send_scheduled_session_cancelled(session)
# UserMailer.deliveries.length.should == 0
# calls[:count].should == 1
# end
it "sends no notification if session is nil" do
calls = count_publish_to_user_calls
notification = Notification.send_scheduled_session_cancelled(nil)
UserMailer.deliveries.length.should == 0
calls[:count].should == 0
end
it "sends no notification if there are no rsvp requests" do
calls = count_publish_to_user_calls
notification = Notification.send_scheduled_session_cancelled(session)
UserMailer.deliveries.length.should == 0
calls[:count].should == 0
end
end
describe "send scheduled session rescheduled" do
let(:receiver) {FactoryGirl.create(:user)}
let(:sender) {FactoryGirl.create(:user)}
let(:session) {FactoryGirl.create(:music_session)}
# it "sends email when user is offline and subscribes to emails" do
# session.creator = sender
# session.save!
# calls = count_publish_to_user_calls
# notification = Notification.send_scheduled_session_cancelled(session)
# UserMailer.deliveries.length.should == 1
# calls[:count].should == 1
# end
# it "does not send email when user is offline and opts out of emails" do
# session.creator = sender
# session.save!
# receiver.subscribe_email = false
# receiver.save!
# calls = count_publish_to_user_calls
# notification = Notification.send_scheduled_session_cancelled(session)
# UserMailer.deliveries.length.should == 0
# calls[:count].should == 1
# end
it "sends no notification if session is nil" do
calls = count_publish_to_user_calls
notification = Notification.send_scheduled_session_rescheduled(nil)
UserMailer.deliveries.length.should == 0
calls[:count].should == 0
end
it "sends no notification if there are no rsvp requests" do
calls = count_publish_to_user_calls
notification = Notification.send_scheduled_session_rescheduled(session)
UserMailer.deliveries.length.should == 0
calls[:count].should == 0
end
end
describe "send scheduled session reminder" do
let(:receiver) {FactoryGirl.create(:user)}
let(:sender) {FactoryGirl.create(:user)}
let(:session) {FactoryGirl.create(:music_session)}
# it "sends email when user is offline and subscribes to emails" do
# session.creator = sender
# session.save!
# calls = count_publish_to_user_calls
# notification = Notification.send_scheduled_session_cancelled(session)
# UserMailer.deliveries.length.should == 1
# calls[:count].should == 1
# end
# it "does not send email when user is offline and opts out of emails" do
# session.creator = sender
# session.save!
# receiver.subscribe_email = false
# receiver.save!
# calls = count_publish_to_user_calls
# notification = Notification.send_scheduled_session_cancelled(session)
# UserMailer.deliveries.length.should == 0
# calls[:count].should == 1
# end
it "sends no notification if session is nil" do
calls = count_publish_to_user_calls
notification = Notification.send_scheduled_session_reminder(nil)
UserMailer.deliveries.length.should == 0
calls[:count].should == 0
end
it "sends no notification if there are no rsvp requests" do
calls = count_publish_to_user_calls
notification = Notification.send_scheduled_session_reminder(session)
UserMailer.deliveries.length.should == 0
calls[:count].should == 0
end
end
describe "send scheduled session comment" do
let(:receiver) {FactoryGirl.create(:user)}
let(:sender) {FactoryGirl.create(:user)}
let(:session) {FactoryGirl.create(:music_session)}
# it "sends email when user is offline and subscribes to emails" do
# session.creator = sender
# session.save!
# calls = count_publish_to_user_calls
# notification = Notification.send_scheduled_session_cancelled(session)
# UserMailer.deliveries.length.should == 1
# calls[:count].should == 1
# end
# it "does not send email when user is offline and opts out of emails" do
# session.creator = sender
# session.save!
# receiver.subscribe_email = false
# receiver.save!
# calls = count_publish_to_user_calls
# notification = Notification.send_scheduled_session_cancelled(session)
# UserMailer.deliveries.length.should == 0
# calls[:count].should == 1
# end
it "sends no notification if session is nil" do
calls = count_publish_to_user_calls
notification = Notification.send_scheduled_session_comment(nil, sender, 'when are we playing?')
UserMailer.deliveries.length.should == 0
calls[:count].should == 0
end
it "sends no notification if user is nil" do
calls = count_publish_to_user_calls
notification = Notification.send_scheduled_session_comment(session, nil, 'test')
UserMailer.deliveries.length.should == 0
calls[:count].should == 0
end
it "sends no notification if comment is empty" do
calls = count_publish_to_user_calls
notification = Notification.send_scheduled_session_comment(session, sender, '')
UserMailer.deliveries.length.should == 0
calls[:count].should == 0
end
end
describe "send_text_message" do
it "success when offline" do
receiver = FactoryGirl.create(:user)
sender = FactoryGirl.create(:user)
message = "Just a test message!"
calls = count_publish_to_user_calls
notification = Notification.send_text_message(message, sender, receiver)
notification.errors.any?.should be_false
UserMailer.deliveries.length.should == 1
calls[:count].should == 0
end
it "success when online" do
receiver = FactoryGirl.create(:user)
receiver_connection = FactoryGirl.create(:connection, user: receiver)
sender = FactoryGirl.create(:user)
message = "Just a test message!"
calls = count_publish_to_user_calls
notification = Notification.send_text_message(message, sender, receiver)
notification.errors.any?.should be_false
UserMailer.deliveries.length.should == 0
calls[:count].should == 1
calls[:msg].text_message.msg.should == message
calls[:msg].text_message.photo_url.should == ''
calls[:msg].text_message.sender_name.should == sender.name
calls[:msg].text_message.notification_id.should == notification.id
calls[:msg].text_message.created_at = notification.created_date
calls[:msg].text_message.clipped_msg.should be_false
end
it "success when online with long message" do
receiver = FactoryGirl.create(:user)
receiver_connection = FactoryGirl.create(:connection, user: receiver)
sender = FactoryGirl.create(:user)
message = "0" * 203 # 200 is clip size
calls = count_publish_to_user_calls
notification = Notification.send_text_message(message, sender, receiver)
notification.errors.any?.should be_false
UserMailer.deliveries.length.should == 0
calls[:count].should == 1
calls[:msg].text_message.msg.should == "0" * 200
calls[:msg].text_message.photo_url.should == ''
calls[:msg].text_message.sender_name.should == sender.name
calls[:msg].text_message.notification_id.should == notification.id
calls[:msg].text_message.created_at = notification.created_date
calls[:msg].text_message.clipped_msg.should be_true
end
it "fails with profanity" do
receiver = FactoryGirl.create(:user)
sender = FactoryGirl.create(:user)
message = "ass"
calls = count_publish_to_user_calls
notification = Notification.send_text_message(message, sender, receiver)
notification.errors.any?.should be_true
notification.errors[:message].should == ['cannot contain profanity']
UserMailer.deliveries.length.should == 0
calls[:count].should == 0
end
it "fails when target is same as receiver" do
receiver = FactoryGirl.create(:user)
sender = FactoryGirl.create(:user)
message = "yo"
calls = count_publish_to_user_calls
notification = Notification.send_text_message(message, sender, sender)
notification.errors.any?.should be_true
notification.errors[:target_user].should == [ValidationMessages::DIFFERENT_SOURCE_TARGET]
UserMailer.deliveries.length.should == 0
calls[:count].should == 0
end
it "fails when there is no message" do
receiver = FactoryGirl.create(:user)
sender = FactoryGirl.create(:user)
message = ''
calls = count_publish_to_user_calls
notification = Notification.send_text_message(message, sender, receiver)
notification.errors.any?.should be_true
notification.errors[:message].should == ['is too short (minimum is 1 characters)']
UserMailer.deliveries.length.should == 0
calls[:count].should == 0
end
end
end