Implemented notes (body) patching in API.
This commit is contained in:
parent
fe104386b1
commit
1fbc010241
4 changed files with 158 additions and 1 deletions
25
app/services/notes/update_service.rb
Normal file
25
app/services/notes/update_service.rb
Normal file
|
@ -0,0 +1,25 @@
|
|||
module Notes
|
||||
class UpdateService < BaseService
|
||||
def execute
|
||||
note = project.notes.find(params[:note_id])
|
||||
note.note = params[:note]
|
||||
if note.save
|
||||
notification_service.new_note(note)
|
||||
|
||||
# Skip system notes, like status changes and cross-references.
|
||||
unless note.system
|
||||
event_service.leave_note(note, note.author)
|
||||
|
||||
# Create a cross-reference note if this Note contains GFM that
|
||||
# names an issue, merge request, or commit.
|
||||
note.references.each do |mentioned|
|
||||
Note.create_cross_reference_note(mentioned, note.noteable,
|
||||
note.author, note.project)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
note
|
||||
end
|
||||
end
|
||||
end
|
|
@ -78,6 +78,21 @@ Parameters:
|
|||
- `issue_id` (required) - The ID of an issue
|
||||
- `body` (required) - The content of a note
|
||||
|
||||
### Modify existing issue note
|
||||
|
||||
Modify existing note of an issue.
|
||||
|
||||
```
|
||||
PUT /projects/:id/issues/:issue_id/notes/:note_id
|
||||
```
|
||||
|
||||
Parameters:
|
||||
|
||||
- `id` (required) - The ID of a project
|
||||
- `issue_id` (required) - The ID of an issue
|
||||
- `note_id` (required) - The ID of a note
|
||||
- `body` (required) - The content of a note
|
||||
|
||||
## Snippets
|
||||
|
||||
### List all snippet notes
|
||||
|
@ -137,7 +152,22 @@ POST /projects/:id/snippets/:snippet_id/notes
|
|||
Parameters:
|
||||
|
||||
- `id` (required) - The ID of a project
|
||||
- `snippet_id` (required) - The ID of an snippet
|
||||
- `snippet_id` (required) - The ID of a snippet
|
||||
- `body` (required) - The content of a note
|
||||
|
||||
### Modify existing snippet note
|
||||
|
||||
Modify existing note of a snippet.
|
||||
|
||||
```
|
||||
PUT /projects/:id/snippets/:snippet_id/notes/:note_id
|
||||
```
|
||||
|
||||
Parameters:
|
||||
|
||||
- `id` (required) - The ID of a project
|
||||
- `snippet_id` (required) - The ID of a snippet
|
||||
- `note_id` (required) - The ID of a note
|
||||
- `body` (required) - The content of a note
|
||||
|
||||
## Merge Requests
|
||||
|
@ -199,3 +229,18 @@ Parameters:
|
|||
- `id` (required) - The ID of a project
|
||||
- `merge_request_id` (required) - The ID of a merge request
|
||||
- `body` (required) - The content of a note
|
||||
|
||||
### Modify existing merge request note
|
||||
|
||||
Modify existing note of a merge request.
|
||||
|
||||
```
|
||||
PUT /projects/:id/merge_requests/:merge_request_id/notes/:note_id
|
||||
```
|
||||
|
||||
Parameters:
|
||||
|
||||
- `id` (required) - The ID of a project
|
||||
- `merge_request_id` (required) - The ID of a merge request
|
||||
- `note_id` (required) - The ID of a note
|
||||
- `body` (required) - The content of a note
|
||||
|
|
|
@ -64,6 +64,39 @@ module API
|
|||
not_found!
|
||||
end
|
||||
end
|
||||
|
||||
# Modify existing +noteable+ note
|
||||
#
|
||||
# Parameters:
|
||||
# id (required) - The ID of a project
|
||||
# noteable_id (required) - The ID of an issue or snippet
|
||||
# node_id (required) - The ID of a note
|
||||
# body (required) - New content of a note
|
||||
# Example Request:
|
||||
# PUT /projects/:id/issues/:noteable_id/notes/:note_id
|
||||
# PUT /projects/:id/snippets/:noteable_id/notes/:node_id
|
||||
put ":id/#{noteables_str}/:#{noteable_id_str}/notes/:note_id" do
|
||||
required_attributes! [:body]
|
||||
|
||||
authorize! :admin_note, user_project.notes.find(params[:note_id])
|
||||
|
||||
opts = {
|
||||
note: params[:body],
|
||||
note_id: params[:note_id],
|
||||
noteable_type: noteables_str.classify,
|
||||
noteable_id: params[noteable_id_str]
|
||||
}
|
||||
|
||||
@note = ::Notes::UpdateService.new(user_project, current_user,
|
||||
opts).execute
|
||||
|
||||
if @note.valid?
|
||||
present @note, with: Entities::Note
|
||||
else
|
||||
bad_request!('Invalid note')
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -131,4 +131,58 @@ describe API::API, api: true do
|
|||
post api("/projects/#{project.id}/issues/#{issue.id}/notes", user), body: 'hi!'
|
||||
end
|
||||
end
|
||||
|
||||
describe 'PUT /projects/:id/noteable/:noteable_id/notes/:note_id' do
|
||||
context 'when noteable is an Issue' do
|
||||
it 'should return modified note' do
|
||||
put api("/projects/#{project.id}/issues/#{issue.id}/"\
|
||||
"notes/#{issue_note.id}", user), body: 'Hello!'
|
||||
response.status.should == 200
|
||||
json_response['body'].should == 'Hello!'
|
||||
end
|
||||
|
||||
it 'should return a 404 error when note id not found' do
|
||||
put api("/projects/#{project.id}/issues/#{issue.id}/notes/123", user),
|
||||
body: 'Hello!'
|
||||
response.status.should == 404
|
||||
end
|
||||
|
||||
it 'should return a 400 bad request error if body not given' do
|
||||
put api("/projects/#{project.id}/issues/#{issue.id}/"\
|
||||
"notes/#{issue_note.id}", user)
|
||||
response.status.should == 400
|
||||
end
|
||||
end
|
||||
|
||||
context 'when noteable is a Snippet' do
|
||||
it 'should return modified note' do
|
||||
put api("/projects/#{project.id}/snippets/#{snippet.id}/"\
|
||||
"notes/#{snippet_note.id}", user), body: 'Hello!'
|
||||
response.status.should == 200
|
||||
json_response['body'].should == 'Hello!'
|
||||
end
|
||||
|
||||
it 'should return a 404 error when note id not found' do
|
||||
put api("/projects/#{project.id}/snippets/#{snippet.id}/"\
|
||||
"notes/123", user), body: "Hello!"
|
||||
response.status.should == 404
|
||||
end
|
||||
end
|
||||
|
||||
context 'when noteable is a Merge Request' do
|
||||
it 'should return modified note' do
|
||||
put api("/projects/#{project.id}/merge_requests/#{merge_request.id}/"\
|
||||
"notes/#{merge_request_note.id}", user), body: 'Hello!'
|
||||
response.status.should == 200
|
||||
json_response['body'].should == 'Hello!'
|
||||
end
|
||||
|
||||
it 'should return a 404 error when note id not found' do
|
||||
put api("/projects/#{project.id}/merge_requests/#{merge_request.id}/"\
|
||||
"notes/123", user), body: "Hello!"
|
||||
response.status.should == 404
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue