ownership_authentication_spec.rb 4.84 KB
require 'spec_helper'

describe OwnershipAuthentication, type: :controller do
  #TODO: test other methods

  describe 'reading_group_owner?' do
    let(:reading_group) { FactoryGirl.build(:reading_group) }

    context 'Not ReadingGroupsController nor ReadingsController' do
      let!(:projects_controller) { ProjectsController.new }

      before do
        projects_controller.extend(OwnershipAuthentication)
      end

      it 'should raise an exception' do
        expect { projects_controller.reading_group_owner? }.to raise_error("Not supported")
      end
    end

    context 'within ReadingsController' do
      let! (:readings_controller) { ReadingsController.new }

      before do
        readings_controller.params = {}
        readings_controller.params[:reading_group_id] = reading_group.id
      end

      context 'with a user logged in' do
        let! (:current_user) { FactoryGirl.create(:user) }

        before do
          readings_controller.expects(:current_user).returns(current_user)
        end

        context 'when the user owns the ReadingGroup' do
          let!(:reading_group_ownership) { FactoryGirl.build(:reading_group_ownership, {user_id: current_user.id, reading_group_id: reading_group.id}) }

          before do
            reading_group_ownerships = Object.new
            reading_group_ownerships.expects(:find_by_reading_group_id).with(reading_group.id).returns(reading_group_ownership)
            current_user.expects(:reading_group_ownerships).returns(reading_group_ownerships)
          end

          it 'should return true' do
            readings_controller.reading_group_owner?.should be_true
          end
        end

        context 'when the user does not own the ReadingGroup' do
          before do
            reading_group_ownerships = Object.new
            reading_group_ownerships.expects(:find_by_reading_group_id).with(reading_group.id).returns(nil)
            current_user.expects(:reading_group_ownerships).returns(reading_group_ownerships)
          end

          it 'should respond' do # FIXME: this is not the best test, but it it's the closest we can do I think
            readings_controller.expects(:respond_to)

            readings_controller.reading_group_owner?
          end
        end
      end
    end
  end

  describe 'mezuro_configuration_owner?' do
    let(:mezuro_configuration) { FactoryGirl.build(:mezuro_configuration) }

    context 'Not MezuroConfigurationsController nor MetricConfigurationsController nor CompoundMetricConfigurationsController' do
      let!(:projects_controller) { ProjectsController.new }

      before do
        projects_controller.extend(OwnershipAuthentication)
      end

      it 'should raise an exception' do
        expect { projects_controller.mezuro_configuration_owner? }.to raise_error("Not supported")
      end
    end
  end

  describe 'project_owner?' do
    let(:project) { FactoryGirl.build(:project) }

    context 'Not ProjectsController nor RepositoriesController' do
      let!(:reading_group_controller) { ReadingGroupsController.new }

      before do
        reading_group_controller.extend(OwnershipAuthentication)
      end

      it 'should raise an exception' do
        expect { reading_group_controller.project_owner? }.to raise_error("Not supported")
      end
    end

    context 'within RepositoriesController' do
      let! (:repositories_controller) { RepositoriesController.new }

      before do
        repositories_controller.params = {}
        repositories_controller.params[:project_id] = project.id
      end

      context 'with a user logged in' do
        let! (:current_user) { FactoryGirl.create(:user) }

        before do
          repositories_controller.expects(:current_user).returns(current_user)
        end

        context 'when the user owns the Repository' do
          let!(:project_ownership) { FactoryGirl.build(:project_ownership, {user_id: current_user.id, project_id: project.id}) }

          before do
            project_ownerships = Object.new
            project_ownerships.expects(:find_by_project_id).with(project.id).returns(project_ownership)
            current_user.expects(:project_ownerships).returns(project_ownerships)
          end

          it 'should return true' do
            repositories_controller.project_owner?.should be_true
          end
        end

        context 'when the user does not own the Repository' do
          before do
            project_ownerships = Object.new
            project_ownerships.expects(:find_by_project_id).with(project.id).returns(nil)
            current_user.expects(:project_ownerships).returns(project_ownerships)
          end

          it 'should respond' do # FIXME: this is not the best test, but it it's the closest we can do I think
            repositories_controller.expects(:respond_to)

            repositories_controller.project_owner?
          end
        end
      end
    end
  end
end