Ensure we have a user before checking for their permission in Notes::SlashCommandsService
Signed-off-by: Rémy Coutable <remy@rymai.me>
This commit is contained in:
parent
3970640b48
commit
929ff01ac0
|
@ -11,6 +11,7 @@ module Notes
|
||||||
|
|
||||||
def self.supported?(note, current_user)
|
def self.supported?(note, current_user)
|
||||||
noteable_update_service(note) &&
|
noteable_update_service(note) &&
|
||||||
|
current_user &&
|
||||||
current_user.can?(:"update_#{note.noteable_type.underscore}", note.noteable)
|
current_user.can?(:"update_#{note.noteable_type.underscore}", note.noteable)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -122,6 +122,75 @@ describe Notes::SlashCommandsService, services: true do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe '.noteable_update_service' do
|
||||||
|
include_context 'note on noteable'
|
||||||
|
|
||||||
|
it 'returns Issues::UpdateService for a note on an issue' do
|
||||||
|
note = create(:note_on_issue, project: project)
|
||||||
|
|
||||||
|
expect(described_class.noteable_update_service(note)).to eq(Issues::UpdateService)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'returns Issues::UpdateService for a note on a merge request' do
|
||||||
|
note = create(:note_on_merge_request, project: project)
|
||||||
|
|
||||||
|
expect(described_class.noteable_update_service(note)).to eq(MergeRequests::UpdateService)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'returns nil for a note on a commit' do
|
||||||
|
note = create(:note_on_commit, project: project)
|
||||||
|
|
||||||
|
expect(described_class.noteable_update_service(note)).to be_nil
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe '.supported?' do
|
||||||
|
include_context 'note on noteable'
|
||||||
|
|
||||||
|
let(:note) { create(:note_on_issue, project: project) }
|
||||||
|
|
||||||
|
context 'with no current_user' do
|
||||||
|
it 'returns false' do
|
||||||
|
expect(described_class.supported?(note, nil)).to be_falsy
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when current_user cannot update the noteable' do
|
||||||
|
it 'returns false' do
|
||||||
|
user = create(:user)
|
||||||
|
|
||||||
|
expect(described_class.supported?(note, user)).to be_falsy
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when current_user can update the noteable' do
|
||||||
|
it 'returns true' do
|
||||||
|
expect(described_class.supported?(note, master)).to be_truthy
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'with a note on a commit' do
|
||||||
|
let(:note) { create(:note_on_commit, project: project) }
|
||||||
|
|
||||||
|
it 'returns false' do
|
||||||
|
expect(described_class.supported?(note, nil)).to be_falsy
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe '#supported?' do
|
||||||
|
include_context 'note on noteable'
|
||||||
|
|
||||||
|
it 'delegates to the class method' do
|
||||||
|
service = described_class.new(project, master)
|
||||||
|
note = create(:note_on_issue, project: project)
|
||||||
|
|
||||||
|
expect(described_class).to receive(:supported?).with(note, master)
|
||||||
|
|
||||||
|
service.supported?(note)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
describe '#execute' do
|
describe '#execute' do
|
||||||
let(:service) { described_class.new(project, master) }
|
let(:service) { described_class.new(project, master) }
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue