From 3387c20b5f4657f4d08e1429f1feb4734590f749 Mon Sep 17 00:00:00 2001
From: Raphael Sofaer <raphael@joindiaspora.com>
Date: Wed, 30 Mar 2011 17:17:16 -0700
Subject: [PATCH] Fix redirect away from conversation

---
 app/controllers/conversations_controller.rb   | 17 +++++++-----
 .../conversations_controller_spec.rb          | 26 +++++++++----------
 2 files changed, 22 insertions(+), 21 deletions(-)

diff --git a/app/controllers/conversations_controller.rb b/app/controllers/conversations_controller.rb
index cd0a01202b..b19efa588a 100644
--- a/app/controllers/conversations_controller.rb
+++ b/app/controllers/conversations_controller.rb
@@ -42,14 +42,17 @@ class ConversationsController < ApplicationController
   end
 
   def show
-    @conversation = Conversation.joins(:conversation_visibilities).where(:id => params[:id],
-                                                                         :conversation_visibilities => {:person_id => current_user.person.id}).first
-    if @visibility = ConversationVisibility.where(:conversation_id => params[:id], :person_id => current_user.person.id).first
-      @visibility.unread = 0
-      @visibility.save
-    end
+    if @conversation = Conversation.joins(:conversation_visibilities).where(:id => params[:id],
+                                                                            :conversation_visibilities => {:person_id => current_user.person.id}).first
+      if @visibility = ConversationVisibility.where(:conversation_id => params[:id], :person_id => current_user.person.id).first
+        @visibility.unread = 0
+        @visibility.save
+      end
 
-    respond_with @conversation
+      respond_with @conversation
+    else
+      redirect_to conversations_path
+    end
   end
 
   def new
diff --git a/spec/controllers/conversations_controller_spec.rb b/spec/controllers/conversations_controller_spec.rb
index 77216148a2..98f706f2d4 100644
--- a/spec/controllers/conversations_controller_spec.rb
+++ b/spec/controllers/conversations_controller_spec.rb
@@ -4,8 +4,7 @@ describe ConversationsController do
   render_views
 
   before do
-    @alice = alice
-    sign_in :user, @alice
+    sign_in :user, alice
   end
 
   describe '#new' do
@@ -16,11 +15,11 @@ describe ConversationsController do
       response.should be_success
     end
     it "assigns a list of the user's contacts" do
-      assigns(:all_contacts_and_ids).should == @alice.contacts.collect{|c| {"value" => c.id, "name" => c.person.name}}
+      assigns(:all_contacts_and_ids).should == alice.contacts.collect{|c| {"value" => c.id, "name" => c.person.name}}
     end
     it "assigns a contact if passed a contact id" do
-      get :new, :contact_id => @alice.contacts.first.id
-      assigns(:contact).should == @alice.contacts.first
+      get :new, :contact_id => alice.contacts.first.id
+      assigns(:contact).should == alice.contacts.first
     end
   end
 
@@ -31,7 +30,7 @@ describe ConversationsController do
     end
 
     it 'retrieves all conversations for a user' do
-      hash = {:author => @alice.person, :participant_ids => [@alice.contacts.first.person.id, @alice.person.id],
+      hash = {:author => alice.person, :participant_ids => [alice.contacts.first.person.id, alice.person.id],
               :subject => 'not spam', :text => 'cool stuff'}
       3.times { Conversation.create(hash) }
 
@@ -46,7 +45,7 @@ describe ConversationsController do
         :conversation => {
           :subject => "secret stuff",
           :text => 'text'},
-        :contact_ids => [@alice.contacts.first.id]
+        :contact_ids => [alice.contacts.first.id]
       }
     end
 
@@ -65,15 +64,15 @@ describe ConversationsController do
     it 'sets the author to the current_user' do
       @hash[:author] = Factory.create(:user)
       post :create, @hash
-      Message.first.author.should == @alice.person
-      Conversation.first.author.should == @alice.person
+      Message.first.author.should == alice.person
+      Conversation.first.author.should == alice.person
     end
 
     it 'dispatches the conversation' do
       cnv = Conversation.create(
-        @hash[:conversation].merge({:author => @alice.person, :participant_ids => [@alice.contacts.first.person.id]}))
+        @hash[:conversation].merge({:author => alice.person, :participant_ids => [alice.contacts.first.person.id]}))
 
-      p = Postzord::Dispatch.new(@alice, cnv)
+      p = Postzord::Dispatch.new(alice, cnv)
       Postzord::Dispatch.stub!(:new).and_return(p)
       p.should_receive(:post)
       post :create, @hash
@@ -82,7 +81,7 @@ describe ConversationsController do
 
   describe '#show' do
     before do
-      hash = {:author => @alice.person, :participant_ids => [@alice.contacts.first.person.id, @alice.person.id],
+      hash = {:author => alice.person, :participant_ids => [alice.contacts.first.person.id, alice.person.id],
               :subject => 'not spam', :text => 'cool stuff'}
       @conversation = Conversation.create(hash)
     end
@@ -94,8 +93,7 @@ describe ConversationsController do
     end
 
     it 'does not let you access conversations where you are not a recipient' do
-      user2 = eve
-      sign_in :user, user2
+      sign_in :user, eve
 
       get :show, :id => @conversation.id
       response.code.should == '302'
-- 
GitLab