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 end