Fix bug where editing a comment with "+1" or "-1" would cause a server error
Closes #1151
This commit is contained in:
		
							parent
							
								
									f84bd771d4
								
							
						
					
					
						commit
						b8c9257fb1
					
				| 
						 | 
					@ -1,6 +1,7 @@
 | 
				
			||||||
Please view this file on the master branch, on stable branches it's out of date.
 | 
					Please view this file on the master branch, on stable branches it's out of date.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
v 7.9.0 (unreleased)
 | 
					v 7.9.0 (unreleased)
 | 
				
			||||||
 | 
					  - Fix bug that caused a server error when editing a comment to "+1" or "-1" (Stan Hu)
 | 
				
			||||||
  - Move labels/milestones tabs to sidebar
 | 
					  - Move labels/milestones tabs to sidebar
 | 
				
			||||||
  - Upgrade Rails gem to version 4.1.9.
 | 
					  - Upgrade Rails gem to version 4.1.9.
 | 
				
			||||||
  - Improve error messages for file edit failures
 | 
					  - Improve error messages for file edit failures
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -3,10 +3,10 @@ class Projects::NotesController < Projects::ApplicationController
 | 
				
			||||||
  before_filter :authorize_read_note!
 | 
					  before_filter :authorize_read_note!
 | 
				
			||||||
  before_filter :authorize_write_note!, only: [:create]
 | 
					  before_filter :authorize_write_note!, only: [:create]
 | 
				
			||||||
  before_filter :authorize_admin_note!, only: [:update, :destroy]
 | 
					  before_filter :authorize_admin_note!, only: [:update, :destroy]
 | 
				
			||||||
 | 
					  before_filter :find_current_user_notes, except: [:destroy, :delete_attachment]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  def index
 | 
					  def index
 | 
				
			||||||
    current_fetched_at = Time.now.to_i
 | 
					    current_fetched_at = Time.now.to_i
 | 
				
			||||||
    @notes = NotesFinder.new.execute(project, current_user, params)
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    notes_json = { notes: [], last_fetched_at: current_fetched_at }
 | 
					    notes_json = { notes: [], last_fetched_at: current_fetched_at }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -116,4 +116,10 @@ class Projects::NotesController < Projects::ApplicationController
 | 
				
			||||||
      :attachment, :line_code, :commit_id
 | 
					      :attachment, :line_code, :commit_id
 | 
				
			||||||
    )
 | 
					    )
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  private
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def find_current_user_notes
 | 
				
			||||||
 | 
					    @notes = NotesFinder.new.execute(project, current_user, params)
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -4,9 +4,9 @@ module NotesHelper
 | 
				
			||||||
    (@noteable.class.name == note.noteable_type && !note.for_diff_line?)
 | 
					    (@noteable.class.name == note.noteable_type && !note.for_diff_line?)
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  def note_target_fields
 | 
					  def note_target_fields(note)
 | 
				
			||||||
    hidden_field_tag(:target_type, @target_type) +
 | 
					    hidden_field_tag(:target_type, note.noteable.class.name.underscore) +
 | 
				
			||||||
    hidden_field_tag(:target_id, @target_id)
 | 
					    hidden_field_tag(:target_id, note.noteable.id)
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  def link_to_commit_diff_line_note(note)
 | 
					  def link_to_commit_diff_line_note(note)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,5 +1,6 @@
 | 
				
			||||||
.note-edit-form
 | 
					.note-edit-form
 | 
				
			||||||
  = form_for note, url: namespace_project_note_path(@project.namespace, @project, note), method: :put, remote: true, authenticity_token: true do |f|
 | 
					  = form_for note, url: namespace_project_note_path(@project.namespace, @project, note), method: :put, remote: true, authenticity_token: true do |f|
 | 
				
			||||||
 | 
					    = note_target_fields(note)
 | 
				
			||||||
    = render layout: 'projects/md_preview', locals: { preview_class: "note-text" } do
 | 
					    = render layout: 'projects/md_preview', locals: { preview_class: "note-text" } do
 | 
				
			||||||
      = render 'projects/zen', f: f, attr: :note,
 | 
					      = render 'projects/zen', f: f, attr: :note,
 | 
				
			||||||
        classes: 'note_text js-note-text'
 | 
					        classes: 'note_text js-note-text'
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,5 +1,5 @@
 | 
				
			||||||
= form_for [@project.namespace.becomes(Namespace), @project, @note], remote: true, html: { :'data-type' => 'json', multipart: true, id: nil, class: "new_note js-new-note-form common-note-form gfm-form" }, authenticity_token: true do |f|
 | 
					= form_for [@project.namespace.becomes(Namespace), @project, @note], remote: true, html: { :'data-type' => 'json', multipart: true, id: nil, class: "new_note js-new-note-form common-note-form gfm-form" }, authenticity_token: true do |f|
 | 
				
			||||||
  = note_target_fields
 | 
					  = note_target_fields(@note)
 | 
				
			||||||
  = f.hidden_field :commit_id
 | 
					  = f.hidden_field :commit_id
 | 
				
			||||||
  = f.hidden_field :line_code
 | 
					  = f.hidden_field :line_code
 | 
				
			||||||
  = f.hidden_field :noteable_id
 | 
					  = f.hidden_field :noteable_id
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -41,3 +41,9 @@ Feature: Project Commits Comments
 | 
				
			||||||
    Given I leave a comment like "XML attached"
 | 
					    Given I leave a comment like "XML attached"
 | 
				
			||||||
    And I delete a comment
 | 
					    And I delete a comment
 | 
				
			||||||
    Then I should not see a comment saying "XML attached"
 | 
					    Then I should not see a comment saying "XML attached"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  @javascript
 | 
				
			||||||
 | 
					  Scenario: I can edit a comment with +1
 | 
				
			||||||
 | 
					    Given I leave a comment like "XML attached"
 | 
				
			||||||
 | 
					    And I edit the last comment with a +1
 | 
				
			||||||
 | 
					    Then I should see +1 in the description
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -139,6 +139,15 @@ Feature: Project Issues
 | 
				
			||||||
    And I leave a comment with task markdown
 | 
					    And I leave a comment with task markdown
 | 
				
			||||||
    Then I should not see task checkboxes in the comment
 | 
					    Then I should not see task checkboxes in the comment
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  @javascript
 | 
				
			||||||
 | 
					  Scenario: Issue notes should be editable with +1
 | 
				
			||||||
 | 
					    Given project "Shop" has "Tasks-open" open issue with task markdown
 | 
				
			||||||
 | 
					    When I visit issue page "Tasks-open"
 | 
				
			||||||
 | 
					    And I leave a comment with a header containing "Comment with a header"
 | 
				
			||||||
 | 
					    Then The comment with the header should not have an ID
 | 
				
			||||||
 | 
					    And I edit the last comment with a +1
 | 
				
			||||||
 | 
					    Then I should see +1 in the description
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  # Task status in issues list
 | 
					  # Task status in issues list
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  Scenario: Issues list should display task status
 | 
					  Scenario: Issues list should display task status
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -135,4 +135,21 @@ module SharedNote
 | 
				
			||||||
      'li.note div.timeline-content input[type="checkbox"]'
 | 
					      'li.note div.timeline-content input[type="checkbox"]'
 | 
				
			||||||
    )
 | 
					    )
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  step 'I edit the last comment with a +1' do
 | 
				
			||||||
 | 
					    find(".note").hover
 | 
				
			||||||
 | 
					    find('.js-note-edit').click
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    within(".current-note-edit-form") do
 | 
				
			||||||
 | 
					      fill_in 'note[note]', with: '+1 Awesome!'
 | 
				
			||||||
 | 
					      click_button 'Save Comment'
 | 
				
			||||||
 | 
					      sleep 0.05
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  step 'I should see +1 in the description' do
 | 
				
			||||||
 | 
					    within(".note") do
 | 
				
			||||||
 | 
					      page.should have_content("+1 Awesome!")
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue