Sha256: ce2bf03bd2d009bb3fa07abd3c52d2dfd337cab9257159527779b280a2f4d688

Contents?: true

Size: 1.4 KB

Versions: 2

Compression:

Stored size: 1.4 KB

Contents

require "spec_helper"

describe AccessGranted::Rails::ControllerMethods do
  before(:each) do
    @current_user = double("User")
    @controller_class = Class.new
    @controller = @controller_class.new
    allow(@controller_class).to receive(:helper_method).with(:can?, :cannot?, :current_policy)
    @controller_class.send(:include, AccessGranted::Rails::ControllerMethods)
    allow(@controller).to receive(:current_user).and_return(@current_user)
  end

  it "should have current_policy method returning Policy instance" do
    expect(@controller.current_policy).to be_kind_of(AccessGranted::Policy)
  end

  it "provides can? and cannot? method delegated to current_policy" do
    expect(@controller.can?(:read, String)).to eq(false)
    expect(@controller.cannot?(:read, String)).to eq(true)
  end

  describe "#authorize!" do
    it "raises exception when authorization fails" do
      expect { @controller.authorize!(:read, String) }.to raise_error(AccessGranted::AccessDenied)
    end

    it "returns subject if authorization succeeds" do
      klass = Class.new do
        include AccessGranted::Policy

        def configure(user)
          role :member, 1 do
            can :read, String
          end
        end
      end
      policy = klass.new(@current_user)
      allow(@controller).to receive(:current_policy).and_return(policy)
      expect(@controller.authorize!(:read, String)).to eq(String)
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
access-granted-0.2.1 spec/controller_methods_spec.rb
access-granted-0.2 spec/controller_methods_spec.rb