# frozen_string_literal: true
require “rails_helper”
RSpec.describe <%= class_name %>Policy, type: :policy do
subject { described_class.new(user, <%= file_name %>_record) } let(:resolved_scope) { described_class::Scope.new(user, <%= class_name %>.all).resolve } let(:<%= file_name %>_record) { <%= class_name %>.new } context "with a guest" do let(:user) { nil } it { is_expected.to forbid_action(:index) } it { is_expected.to forbid_action(:show) } it { is_expected.to forbid_actions(%i[new create]) } it { is_expected.to forbid_actions(%i[edit update]) } it { is_expected.to forbid_action(:destroy) } it "returns no items in scope" do expect(resolved_scope.to_sql).to eq(<%= class_name %>.none.to_sql) end end context "with a user" do let(:user) { build_stubbed(:user) } it { is_expected.to permit_action(:index) } it { is_expected.to permit_action(:show) } it { is_expected.to forbid_actions(%i[new create]) } it { is_expected.to forbid_actions(%i[edit update]) } it { is_expected.to forbid_action(:destroy) } it "returns all items in scope" do expect(resolved_scope.to_sql).to eq(<%= class_name %>.all.to_sql) end end context "with an admin" do let(:user) { build_stubbed(:user, :admin) } it { is_expected.to permit_action(:index) } it { is_expected.to permit_action(:show) } it { is_expected.to permit_actions(%i[new create]) } it { is_expected.to permit_actions(%i[edit update]) } it { is_expected.to permit_action(:destroy) } # it { is_expected.to permit_mass_assignment_of(:name).for_action(:create) } # it { is_expected.to permit_mass_assignment_of(:name).for_action(:update) } # it { is_expected.to forbid_mass_assignment_of(:birthdate).for_action(:update) } it "returns all items in scope" do expect(resolved_scope.to_sql).to eq(<%= class_name %>.all.to_sql) end end
end