Handle presenters in BasePolicy
Signed-off-by: Rémy Coutable <remy@rymai.me>
This commit is contained in:
parent
b4f67cc229
commit
fd72c0f4c7
|
@ -53,6 +53,10 @@ class BasePolicy
|
|||
def self.class_for(subject)
|
||||
return GlobalPolicy if subject.nil?
|
||||
|
||||
if subject.class.ancestors.include?(Gitlab::View::Presenter::Base)
|
||||
subject = subject.subject
|
||||
end
|
||||
|
||||
subject.class.ancestors.each do |klass|
|
||||
next unless klass.name
|
||||
|
||||
|
|
|
@ -0,0 +1,17 @@
|
|||
require 'spec_helper'
|
||||
|
||||
describe BasePolicy, models: true do
|
||||
let(:build) { create(:ci_build) }
|
||||
|
||||
describe '.class_for' do
|
||||
it 'detects policy class based on the subject ancestors' do
|
||||
expect(described_class.class_for(build)).to eq(Ci::BuildPolicy)
|
||||
end
|
||||
|
||||
it 'detects policy class for a presented subject' do
|
||||
presentee = Ci::Build::Presenter.new(build)
|
||||
|
||||
expect(described_class.class_for(presentee)).to eq(Ci::BuildPolicy)
|
||||
end
|
||||
end
|
||||
end
|
Loading…
Reference in New Issue