Sha256: 01b81400989e1da784c6b1da2c501ebae8db069d70e8ca386f394b3a456f24a7

Contents?: true

Size: 1.55 KB

Versions: 2

Compression:

Stored size: 1.55 KB

Contents

# frozen_string_literal: true

require "spec_helper"

RSpec.describe PostPolicy do
  let(:user) { double }
  let(:own_post) { double(user: user) }
  let(:other_post) { double(user: double) }
  subject { described_class }

  permissions :update?, :show? do
    it "is successful when all permissions match" do
      should permit(user, own_post)
    end

    it "fails when any permissions do not match" do
      expect do
        should permit(user, other_post)
      end.to raise_error(RSpec::Expectations::ExpectationNotMetError)
    end

    it "uses the default description if not overridden" do
      expect(permit(user, own_post).description).to eq("permit #{user.inspect} and #{own_post.inspect}")
    end

    context "when the matcher description is overridden" do
      after do
        Pundit::RSpec::Matchers.description = nil
      end

      it "sets a custom matcher description with a Proc" do
        allow(user).to receive(:role).and_return("default_role")
        allow(own_post).to receive(:id).and_return(1)

        Pundit::RSpec::Matchers.description = lambda { |user, record|
          "permit user with role #{user.role} to access record with ID #{record.id}"
        }

        description = permit(user, own_post).description
        expect(description).to eq("permit user with role default_role to access record with ID 1")
      end

      it "sets a custom matcher description with a string" do
        Pundit::RSpec::Matchers.description = "permit user"
        expect(permit(user, own_post).description).to eq("permit user")
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
pundit-2.5.0 spec/policies/post_policy_spec.rb
pundit-2.4.0 spec/policies/post_policy_spec.rb