Je la politique suivanteRspec & essai Pundit-Matchers autorisation interdit
module Admin
class PostPolicy < AdminPolicy
def index?
true
end
def show?
scope.where(:id => record.id).exists? && user.present? && user == record.user
end
def create?
true
end
def update?
user.present? && user == record.user
end
def destroy?
user.present? && user == record.user
end
def delete?
destroy?
end
end
end
et j'utilise la gemme pundit-matchers
d'écrire des tests rspec.
RSpec.describe Admin::PostPolicy do
subject { described_class.new(user, [:admin, post]) }
let(:user) { FactoryGirl.create(:user) }
context 'permit authorization' do
let(:post) { FactoryGirl.create(:post, user_id: user.id) }
it { is_expected.to permit_action(:edit) }
it { is_expected.to permit_action(:delete) }
end
context 'deny authorization' do
let(:post) { FactoryGirl.create(:post, user_id: user.id + 1) }
it { is_expected.to forbid_action(:edit) }
it { is_expected.to forbid_action(:delete) }
end
end
Les tests sur permit authorization
sont verts, mais lorsque je tente de tester la deny authorization
je reçois l'erreur suivante
ActiveRecord::RecordInvalid:
Validation failed: User must exist
Comment puis-je résoudre ce problème, afin d'obtenir le test vert? La logique est qu'un utilisateur est autorisé à modifier et supprimer ses propres messages et les utilisateurs de ne pas d'autres