Skip to content
Extraits de code Groupes Projets
participations_controller_spec.rb 2,26 ko
Newer Older
  • Learn to ignore specific revisions
  • require 'spec_helper'
    
    describe ParticipationsController, :type => :controller do
      before do
        allow(@controller).to receive(:current_user).and_return(alice)
        sign_in :user, alice
      end
    
      describe '#create' do
        let(:stranger) { FactoryGirl.create(:user) }
    
        shared_examples 'on a visible post' do
          it 'creates the participation' do
            post :create, post_id: @post.id
            expect(alice.participations.where(:target_id => @post.id)).to exist
            expect(response.code).to eq('201')
          end
        end
    
        context 'on my own post' do
          before do
            aspect_to_post = alice.aspects.where(:name => 'generic').first
            @post = alice.post :status_message, :text => 'something', :to => aspect_to_post
          end
    
          it_behaves_like 'on a visible post'
        end
    
        context 'on a post from a contact' do
          before do
            aspect_to_post = bob.aspects.where(:name => 'generic').first
            @post = bob.post :status_message, :text => 'something', :to => aspect_to_post
          end
    
          it_behaves_like 'on a visible post'
        end
    
        context 'on a public post from a stranger' do
          before do
            @post = stranger.post :status_message, :text => 'something', :public => true, :to => 'all'
          end
    
          it_behaves_like 'on a visible post'
        end
    
        context 'on a non visible post' do
          before do
            @post = stranger.post :status_message, :text => 'something', :public => false, :to => 'all'
          end
    
          it 'should not create the participation' do
            post :create, post_id: @post.id
            expect(alice.participations.where(:target_id => @post.id)).not_to exist
            expect(response.code).to eq('403')
          end
        end
      end
    
      describe '#destroy' do
        let(:post) { FactoryGirl.create(:status_message) }
    
        context 'on a post you partecipate to' do
          before { alice.participate! post }
    
          it 'should remove participation' do
            delete :destroy, post_id: post.id
            expect(alice.participations.where(:target_id => post.id)).not_to exist
    
            expect(response.code).to eq('200')
    
          end
        end
    
        context 'on a post you do not partecipate to' do
          it 'says it is an unprocessable request' do
            delete :destroy, post_id: post.id
            expect(response.code).to eq('422')
          end
        end
      end
    end