summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSean McGivern <sean@mcgivern.me.uk>2017-11-16 15:11:06 +0000
committerSean McGivern <sean@mcgivern.me.uk>2017-11-16 15:11:06 +0000
commit5fbda2af920a86e11696cae5b3397c3241f21b77 (patch)
tree0eb5e14019372e0272f2d642cc8fc5bffaa7906e
parent604664b42ac001759e2b76abaca457f5dfb42e7b (diff)
parentf691010d5c66b543c05ed4d53d663986b05dc90f (diff)
downloadgitlab-ce-5fbda2af920a86e11696cae5b3397c3241f21b77.tar.gz
Merge branch 'dm-notes-actions-noteable-for-update' into 'master'
Make sure NotesActions#noteable returns a Noteable in the update action Closes #40208 See merge request gitlab-org/gitlab-ce!15421
-rw-r--r--app/controllers/concerns/notes_actions.rb10
-rw-r--r--app/controllers/snippets/notes_controller.rb1
-rw-r--r--changelogs/unreleased/dm-notes-actions-noteable-for-update.yml5
-rw-r--r--spec/controllers/projects/notes_controller_spec.rb23
4 files changed, 36 insertions, 3 deletions
diff --git a/app/controllers/concerns/notes_actions.rb b/app/controllers/concerns/notes_actions.rb
index 3c64fd964ff..be2e1b47feb 100644
--- a/app/controllers/concerns/notes_actions.rb
+++ b/app/controllers/concerns/notes_actions.rb
@@ -4,7 +4,7 @@ module NotesActions
included do
before_action :set_polling_interval_header, only: [:index]
- before_action :noteable, only: :index
+ before_action :require_noteable!, only: [:index, :create]
before_action :authorize_admin_note!, only: [:update, :destroy]
before_action :note_project, only: [:create]
end
@@ -90,7 +90,7 @@ module NotesActions
if note.persisted?
attrs[:valid] = true
- if noteable.nil? || noteable.discussions_rendered_on_frontend?
+ if noteable.discussions_rendered_on_frontend?
attrs.merge!(note_serializer.represent(note))
else
attrs.merge!(
@@ -191,7 +191,11 @@ module NotesActions
end
def noteable
- @noteable ||= notes_finder.target || render_404
+ @noteable ||= notes_finder.target || @note&.noteable
+ end
+
+ def require_noteable!
+ render_404 unless noteable
end
def last_fetched_at
diff --git a/app/controllers/snippets/notes_controller.rb b/app/controllers/snippets/notes_controller.rb
index f9496787b15..c8b4682e6dc 100644
--- a/app/controllers/snippets/notes_controller.rb
+++ b/app/controllers/snippets/notes_controller.rb
@@ -20,6 +20,7 @@ class Snippets::NotesController < ApplicationController
def snippet
PersonalSnippet.find_by(id: params[:snippet_id])
end
+ alias_method :noteable, :snippet
def note_params
super.merge(noteable_id: params[:snippet_id])
diff --git a/changelogs/unreleased/dm-notes-actions-noteable-for-update.yml b/changelogs/unreleased/dm-notes-actions-noteable-for-update.yml
new file mode 100644
index 00000000000..1d2f58bc765
--- /dev/null
+++ b/changelogs/unreleased/dm-notes-actions-noteable-for-update.yml
@@ -0,0 +1,5 @@
+---
+title: Make sure NotesActions#noteable returns a Noteable in the update action
+merge_request:
+author:
+type: fixed
diff --git a/spec/controllers/projects/notes_controller_spec.rb b/spec/controllers/projects/notes_controller_spec.rb
index 5f5a789d5cc..37e9f863fc4 100644
--- a/spec/controllers/projects/notes_controller_spec.rb
+++ b/spec/controllers/projects/notes_controller_spec.rb
@@ -336,6 +336,29 @@ describe Projects::NotesController do
end
end
+ describe 'PUT update' do
+ let(:request_params) do
+ {
+ namespace_id: project.namespace,
+ project_id: project,
+ id: note,
+ format: :json,
+ note: {
+ note: "New comment"
+ }
+ }
+ end
+
+ before do
+ sign_in(note.author)
+ project.team << [note.author, :developer]
+ end
+
+ it "updates the note" do
+ expect { put :update, request_params }.to change { note.reload.note }
+ end
+ end
+
describe 'DELETE destroy' do
let(:request_params) do
{