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 "success when offline" 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 "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_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 describe "send scheduled session invitation" do it "sends pop-up notification" do end it "sends email notification" do end it "sends no notification if session is nil" do sender = FactoryGirl.create(:user) 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 session = FactoryGirl.create(:music_session) 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 it "sends pop-up notification" do end it "sends email notification" do end it "sends no notification if session is nil" do sender = FactoryGirl.create(:user) calls = count_publish_to_user_calls notification = Notification.send_scheduled_session_rsvp(nil, sender, nil) UserMailer.deliveries.length.should == 0 calls[:count].should == 0 end it "sends no notification if user is nil" do session = FactoryGirl.create(:music_session) 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 it "sends pop-up notification" do end it "sends email notification" do end it "sends no notification if session is nil" do receiver = FactoryGirl.create(:user) 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 session = FactoryGirl.create(:music_session) 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 it "sends pop-up notification" do end it "sends email notification" do end it "sends no notification if session is nil" do sender = FactoryGirl.create(:user) calls = count_publish_to_user_calls notification = Notification.send_scheduled_session_rsvp_cancelled(nil, sender) UserMailer.deliveries.length.should == 0 calls[:count].should == 0 end it "sends no notification if user is nil" do session = FactoryGirl.create(:music_session) 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 it "sends pop-up notification" do end it "sends email notification" do end it "sends no notification if session is nil" do receiver = FactoryGirl.create(:user) 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 session = FactoryGirl.create(:music_session) 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 it "sends pop-up notification" do end it "sends email notification" do 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 session = FactoryGirl.create(:music_session) 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 it "sends pop-up notification" do end it "sends email notification" do 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 session = FactoryGirl.create(:music_session) 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 it "sends pop-up notification" do end it "sends email notification" do 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 session = FactoryGirl.create(:music_session) 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 it "sends pop-up notification" do end it "sends email notification" do end it "sends no notification if session is nil" do sender = FactoryGirl.create(:user) 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 session = FactoryGirl.create(:music_session) 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 sender = FactoryGirl.create(:user) session = FactoryGirl.create(:music_session) 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 end