diff --git a/app/controllers/private_messages_controller.rb b/app/controllers/private_messages_controller.rb index 8e74aa97411874c040d6b6bf847fe352d8784dcc..4128faa1461ef4de04a356bbe87f6480109afca3 100644 --- a/app/controllers/private_messages_controller.rb +++ b/app/controllers/private_messages_controller.rb @@ -1,2 +1,38 @@ class PrivateMessagesController < ApplicationController + before_filter :authenticate_user! + + respond_to :html + + def index + @messages = PrivateMessage.joins(:private_message_visibilities).where( + :private_message_visibilities => {:person_id => current_user.person.id}).all + end + + def create + person_ids = Contact.where(:id => params[:private_message][:contact_ids]).map! do |contact| + contact.person_id + end + + person_ids = person_ids | [current_user.person.id] + + @message = PrivateMessage.new( :author => current_user.person, :participant_ids => person_ids, :message => params[:private_message][:message] ) + + if @message.save + Rails.logger.info("event=create type=private_message chars=#{params[:private_message][:message].length}") + end + + respond_with @message + end + + def show + @message = PrivateMessage.joins(:private_message_visibilities).where(:id => params[:id], + :private_message_visibilities => {:person_id => current_user.person.id}).first + + if @message + respond_with @message + else + redirect_to private_messages_path + end + end + end diff --git a/app/controllers/status_messages_controller.rb b/app/controllers/status_messages_controller.rb index 77a6b3e5a508e72ff9e62f8057bd3d1cd64c333d..27806867159e602cd9f0a043bf5eb121eed3bc3c 100644 --- a/app/controllers/status_messages_controller.rb +++ b/app/controllers/status_messages_controller.rb @@ -80,7 +80,7 @@ class StatusMessagesController < ApplicationController def show @status_message = current_user.find_visible_post_by_id params[:id] - if @status_message + if @status_messag @object_aspect_ids = @status_message.aspects.map{|a| a.id} # mark corresponding notification as read diff --git a/app/models/private_message.rb b/app/models/private_message.rb index bf8079fe3891510b2809686c71c0a697ede80848..899e55784f8f006bc44e5a4565bb494757f0310a 100644 --- a/app/models/private_message.rb +++ b/app/models/private_message.rb @@ -1,5 +1,12 @@ class PrivateMessage < ActiveRecord::Base + include ROXML + include Diaspora::Guid + belongs_to :author, :class_name => 'Person' has_many :private_message_visibilities - has_many :recipients, :class_name => 'Person', :through => :private_message_visibilities, :source => :person + has_many :participants, :class_name => 'Person', :through => :private_message_visibilities, :source => :person + + def recipients + self.participants - [self.author] + end end diff --git a/app/views/private_messages/index.haml b/app/views/private_messages/index.haml index 7fae50376f8cb086505d05ce1546c4088d0a89be..57780c3023836c53513d8ac2f0060b96da2bb122 100644 --- a/app/views/private_messages/index.haml +++ b/app/views/private_messages/index.haml @@ -3,3 +3,15 @@ -# the COPYRIGHT file. += link_to 'new message', new_private_message_path + +%br +%br +%br + +- for message in @messages + %b + = message.author.name + %br + = link_to message.message, message + %hr diff --git a/app/views/private_messages/new.haml b/app/views/private_messages/new.haml index ae2a260f6ed82d4333b06c852a313bea734c4b9b..ccc945125b401220a3c44d02b3ca9d2e97099b9c 100644 --- a/app/views/private_messages/new.haml +++ b/app/views/private_messages/new.haml @@ -9,7 +9,7 @@ = form_for PrivateMessage.new do |private_message| %h4 to - = private_message.text_field :recipients + = text_field_tag "private_message[contact_ids]" %h4 message diff --git a/app/views/private_messages/show.haml b/app/views/private_messages/show.haml index 7fae50376f8cb086505d05ce1546c4088d0a89be..b80ca5e12dfa3e9595f1228a8f83b56b58db259d 100644 --- a/app/views/private_messages/show.haml +++ b/app/views/private_messages/show.haml @@ -2,4 +2,28 @@ -# licensed under the Affero General Public License version 3 or later. See -# the COPYRIGHT file. += link_to 'back', private_messages_path +%br +%br +%br +%br + +%h4 + from += @message.author.name + +%br +%br + +%h4 + to +- for recipient in @message.recipients + = recipient.name + +%br +%br + +%h4 + message += @message.message diff --git a/spec/controllers/private_messages_controller_spec.rb b/spec/controllers/private_messages_controller_spec.rb index 26bf325218ec9f2ee0dbaa292588f4220bf0a64a..4c30bc1ad22adbe54d0299b440d1cbc9cbed1173 100644 --- a/spec/controllers/private_messages_controller_spec.rb +++ b/spec/controllers/private_messages_controller_spec.rb @@ -1,5 +1,70 @@ require 'spec_helper' describe PrivateMessagesController do + render_views + before do + @user1 = alice + sign_in :user, @user1 + end + + describe '#new' do + it 'succeeds' do + get :new + response.should be_success + end + end + + describe '#index' do + it 'succeeds' do + get :index + response.should be_success + end + + it 'retrieves all messages for a user' do + @create_hash = { :participant_ids => [@user1.contacts.first.person.id, @user1.person.id], + :author => @user1.person, :message => "cool stuff" } + 3.times do + PrivateMessage.create(@create_hash) + end + + get :index + assigns[:messages].count.should == 3 + end + end + + describe '#create' do + it 'creates a private message' do + message_hash = {:private_message => { + :contact_ids => [@user1.contacts.first.id], + :message => "secret stuff"}} + + + lambda { + post :create, message_hash + }.should change(PrivateMessage, :count).by(1) + end + end + + describe '#show' do + before do + @create_hash = { :participant_ids => [@user1.contacts.first.person.id, @user1.person.id], + :author => @user1.person, :message => "cool stuff" } + @message = PrivateMessage.create(@create_hash) + end + + it 'succeeds' do + get :show, :id => @message.id + response.should be_success + assigns[:message].should == @message + end + + it 'does not let you access messages where you are not a recipient' do + user2 = eve + sign_in :user, user2 + + get :show, :id => @message.id + response.code.should == '302' + end + end end diff --git a/spec/models/private_message_spec.rb b/spec/models/private_message_spec.rb index 983209daee2f456b7997c3a471bbde1ae45a45c1..b37a57fbe44d5efb4b46dbaa3d58f325b7ed8fb0 100644 --- a/spec/models/private_message_spec.rb +++ b/spec/models/private_message_spec.rb @@ -1,5 +1,4 @@ require 'spec_helper' describe PrivateMessage do - pending "add some examples to (or delete) #{__FILE__}" end