diff --git a/Changelog.md b/Changelog.md index 9e391da77..e5469b187 100644 --- a/Changelog.md +++ b/Changelog.md @@ -25,6 +25,7 @@ * Fix dynamic loading of asset_sync * Fix login for short passwords [#4123](https://github.com/diaspora/diaspora/issues/4123) * Add loading indicator on tag pages, remove the second one from the profile page [#4041](https://github.com/diaspora/diaspora/issues/4041) +* Leaving the `to` field blank when sending a private message causes a server error [#4227](https://github.com/diaspora/diaspora/issues/4227) ## Features diff --git a/app/controllers/conversations_controller.rb b/app/controllers/conversations_controller.rb index 75ef768bd..9dc6ea2d1 100644 --- a/app/controllers/conversations_controller.rb +++ b/app/controllers/conversations_controller.rb @@ -29,8 +29,9 @@ class ConversationsController < ApplicationController end def create - person_ids = Contact.where(:id => params[:contact_ids].split(',')).map! do |contact| - contact.person_id + # Can't split nil + if params[:contact_ids] + person_ids = Contact.where(:id => params[:contact_ids].split(',')).map(&:person_id) end params[:conversation][:participant_ids] = person_ids | [current_user.person_id] diff --git a/spec/controllers/conversations_controller_spec.rb b/spec/controllers/conversations_controller_spec.rb index 60e3bf739..a0ee29e32 100644 --- a/spec/controllers/conversations_controller_spec.rb +++ b/spec/controllers/conversations_controller_spec.rb @@ -192,6 +192,33 @@ describe ConversationsController do }.should_not change(Message, :count).by(1) end end + + context 'with nil contact' do + before do + @hash = { + :conversation => { + :subject => 'secret stuff', + :text => 'text debug' + }, + :contact_ids => nil + } + Conversation.stub(:new).and_return(double(Conversation, + :save => false, + :id => 1)) + end + + it 'does not create a conversation' do + lambda { + post :create, @hash + }.should_not change(Conversation, :count).by(1) + end + + it 'does not create a message' do + lambda { + post :create, @hash + }.should_not change(Message, :count).by(1) + end + end end describe '#show' do