Skip to content
Extraits de code Groupes Projets
contacts_controller_spec.rb 3,55 ko
Newer Older
  • Learn to ignore specific revisions
  • #   Copyright (c) 2010, Diaspora Inc.  This file is
    #   licensed under the Affero General Public License version 3 or later.  See
    #   the COPYRIGHT file.
    
    
    require 'spec_helper'
    
    describe ContactsController do
      render_views
    
      before do
    
        @user  = alice
        @user2 = bob
    
        @aspect0  = @user.aspects.first
        @aspect1  = @user.aspects.create(:name => "another aspect")
        @aspect2  = @user2.aspects.first
    
        @contact = @user.contact_for(@user2.person)
        @user.getting_started = false
        @user.save
    
        @controller.stub(:current_user).and_return(@user)
        request.env["HTTP_REFERER"] = 'http://' + request.host
    
      describe '#new' do
    
        it 'assigns a person' do
          get :new, :person_id => @user2.person.id
          assigns[:person].should == @user2.person
        end
    
        it 'assigns aspects without person' do
          get :new, :person_id => @user2.person.id
          assigns[:aspects_without_person].should =~ @user.aspects
    
    maxwell's avatar
    maxwell a validé
    
    
      describe '#create' do
    
    maxwell's avatar
    maxwell a validé
        context 'with an incoming request' do
          before do
            @user3 = Factory.create(:user)
            @user3.send_contact_request_to(@user.person, @user3.aspects.create(:name => "Walruses"))
          end
          it 'deletes the request' do
            post :create,
              :format => 'js',
              :person_id => @user3.person.id,
              :aspect_id => @aspect1.id
            Request.where(:sender_id => @user3.person.id, :recipient_id => @user.person.id).first.should be_nil
          end
          it 'does not leave the contact pending' do
            post :create,
              :format => 'js',
              :person_id => @user3.person.id,
              :aspect_id => @aspect1.id
            @user.contact_for(@user3.person).should_not be_pending
          end
        end
        context 'with a non-contact' do
          before do
            @person = Factory(:person)
          end
    
    maxwell's avatar
    maxwell a validé
          it 'calls send_contact_request_to' do
            @user.should_receive(:send_contact_request_to).with(@person, @aspect1)
            post :create,
              :format => 'js',
              :person_id => @person.id,
              :aspect_id => @aspect1.id
          end
    
    maxwell's avatar
    maxwell a validé
          it 'does not call add_contact_to_aspect' do
            @user.should_not_receive(:add_contact_to_aspect)
            post :create,
              :format => 'js',
              :person_id => @person.id,
              :aspect_id => @aspect1.id
          end
    
    
          it 'failure flashes error' do
            @controller.should_receive(:request_to_aspect).and_return(nil)
            post :create,
              :format => 'js',
              :person_id => @person.id,
              :aspect_id => @aspect1.id
            flash[:error].should_not be_empty
          end
        end
      end
    
      describe '#edit' do
        it 'assigns a contact' do
          get :edit, :id => @contact.id
          assigns[:contact].should == @contact
        end
        
        it 'assigns a person' do
          get :edit, :id => @contact.id
          assigns[:person].should == @contact.person
    
    maxwell's avatar
    maxwell a validé
        end
      end
    
    
      describe '#destroy' do
        it 'disconnects from the person' do
          @user.should_receive(:disconnect).with(@contact)
          delete :destroy, :id => @contact.id
        end
        
        it 'flases success if the contact is not destroyed' do
          @user.stub!(:disconnect).and_return(true)
          delete :destroy, :id => @contact.id
          flash[:notice].should_not be_empty
        end
    
        it 'flases failure if the contact is not destroyed' do
          @user.stub!(:disconnect).and_return(false)
          delete :destroy, :id => @contact.id
          flash[:error].should_not be_empty
        end
    
        it 'redirects back to the person page' do
          delete :destroy, :id => @contact.id
          response.should redirect_to(@contact.person)
        end
      end