Commit 2a7da96a0d7fb71a1371ce2d97157a2dd8a766f2

Authored by Dmitriy Zaporozhets
2 parents c8e1c53f 2d554f42

Merge branch 'toggle_diff_comments' of https://github.com/jacob-carlborg/gitlabh…

…q into jacob-carlborg-toggle_diff_comments

Signed-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>

Conflicts:
	app/assets/stylesheets/sections/commits.scss
	app/assets/stylesheets/sections/notes.scss
	app/views/projects/commits/_diffs.html.haml
	features/steps/project/merge_requests.rb
app/assets/stylesheets/sections/notes.scss
@@ -189,7 +189,6 @@ ul.notes { @@ -189,7 +189,6 @@ ul.notes {
189 } 189 }
190 190
191 191
192 -  
193 /** 192 /**
194 * Line note button on the side of diffs 193 * Line note button on the side of diffs
195 */ 194 */
app/views/projects/commits/_diffs.html.haml
@@ -44,7 +44,7 @@ @@ -44,7 +44,7 @@
44 - file = project.repository.blob_at(@commit.id, diff.new_path) 44 - file = project.repository.blob_at(@commit.id, diff.new_path)
45 - file = project.repository.blob_at(@commit.parent_id, diff.old_path) unless file 45 - file = project.repository.blob_at(@commit.parent_id, diff.old_path) unless file
46 - next unless file 46 - next unless file
47 - .diff-file{id: "diff-#{i}"} 47 + .diff-file.js-toggle-container{id: "diff-#{i}"}
48 .diff-header{id: "file-path-#{hexdigest(diff.new_path || diff.old_path)}"} 48 .diff-header{id: "file-path-#{hexdigest(diff.new_path || diff.old_path)}"}
49 - if diff.deleted_file 49 - if diff.deleted_file
50 %span= diff.old_path 50 %span= diff.old_path
@@ -60,6 +60,11 @@ @@ -60,6 +60,11 @@
60 %span.file-mode= "#{diff.a_mode} → #{diff.b_mode}" 60 %span.file-mode= "#{diff.a_mode} → #{diff.b_mode}"
61 61
62 .diff-btn-group 62 .diff-btn-group
  63 + = link_to "#", class: "js-toggle-button btn btn-small" do
  64 + %i.icon-chevron-down
  65 + Diff comments
  66 + &nbsp;
  67 +
63 - if @merge_request && @merge_request.source_project 68 - if @merge_request && @merge_request.source_project
64 = link_to project_edit_tree_path(@merge_request.source_project, tree_join(@merge_request.source_branch, diff.new_path), from_merge_request_id: @merge_request.id), { class: 'btn btn-small' } do 69 = link_to project_edit_tree_path(@merge_request.source_project, tree_join(@merge_request.source_branch, diff.new_path), from_merge_request_id: @merge_request.id), { class: 'btn btn-small' } do
65 Edit 70 Edit
app/views/projects/notes/_diff_notes_with_reply.html.haml
1 - note = notes.first # example note 1 - note = notes.first # example note
2 -# Check if line want not changed since comment was left 2 -# Check if line want not changed since comment was left
3 - if !defined?(line) || line == note.diff_line 3 - if !defined?(line) || line == note.diff_line
4 - %tr.notes_holder 4 + %tr.notes_holder.js-toggle-content
5 %td.notes_line{ colspan: 2 } 5 %td.notes_line{ colspan: 2 }
6 %span.btn.disabled 6 %span.btn.disabled
7 %i.icon-comment 7 %i.icon-comment
app/views/projects/notes/_diff_notes_with_reply_parallel.html.haml
1 - note1 = notes1.first # example note 1 - note1 = notes1.first # example note
2 - note2 = notes2.first # example note 2 - note2 = notes2.first # example note
3 -%tr.notes_holder 3 +%tr.notes_holder.js-toggle-content
4 -# Check if line want not changed since comment was left 4 -# Check if line want not changed since comment was left
5 /- if !defined?(line1) || line1 == note1.diff_line 5 /- if !defined?(line1) || line1 == note1.diff_line
6 - if note1 6 - if note1
features/project/merge_requests.feature
@@ -95,3 +95,47 @@ Feature: Project Merge Requests @@ -95,3 +95,47 @@ Feature: Project Merge Requests
95 Given I visit merge request page "Bug NS-04" 95 Given I visit merge request page "Bug NS-04"
96 And I leave a comment with a header containing "Comment with a header" 96 And I leave a comment with a header containing "Comment with a header"
97 Then The comment with the header should not have an ID 97 Then The comment with the header should not have an ID
  98 +
  99 + # Toggling inline comments
  100 +
  101 + @javascript
  102 + Scenario: I hide comments on a merge request diff with comments in a single file
  103 + Given project "Shop" have "Bug NS-05" open merge request with diffs inside
  104 + And I visit merge request page "Bug NS-05"
  105 + And I switch to the diff tab
  106 + And I leave a comment like "Line is wrong" on line 39 of the second file
  107 + And I click link "Hide inline discussion" of the second file
  108 + Then I should not see a comment like "Line is wrong" in the second file
  109 +
  110 + @javascript
  111 + Scenario: I show comments on a merge request diff with comments in a single file
  112 + Given project "Shop" have "Bug NS-05" open merge request with diffs inside
  113 + And I visit merge request page "Bug NS-05"
  114 + And I switch to the diff tab
  115 + And I leave a comment like "Line is wrong" on line 39 of the second file
  116 + And I click link "Hide inline discussion" of the second file
  117 + And I click link "Show inline discussion" of the second file
  118 + Then I should see a comment like "Line is wrong" in the second file
  119 +
  120 + @javascript
  121 + Scenario: I hide comments on a merge request diff with comments in multiple files
  122 + Given project "Shop" have "Bug NS-05" open merge request with diffs inside
  123 + And I visit merge request page "Bug NS-05"
  124 + And I switch to the diff tab
  125 + And I leave a comment like "Line is correct" on line 12 of the first file
  126 + And I leave a comment like "Line is wrong" on line 39 of the second file
  127 + And I click link "Hide inline discussion" of the second file
  128 + Then I should not see a comment like "Line is wrong" in the second file
  129 + And I should still see a comment like "Line is correct" in the first file
  130 +
  131 + @javascript
  132 + Scenario: I show comments on a merge request diff with comments in multiple files
  133 + Given project "Shop" have "Bug NS-05" open merge request with diffs inside
  134 + And I visit merge request page "Bug NS-05"
  135 + And I switch to the diff tab
  136 + And I leave a comment like "Line is correct" on line 12 of the first file
  137 + And I leave a comment like "Line is wrong" on line 39 of the second file
  138 + And I click link "Hide inline discussion" of the second file
  139 + And I click link "Show inline discussion" of the second file
  140 + Then I should see a comment like "Line is wrong" in the second file
  141 + And I should still see a comment like "Line is correct" in the first file
features/steps/project/merge_requests.rb
@@ -182,6 +182,62 @@ class ProjectMergeRequests &lt; Spinach::FeatureSteps @@ -182,6 +182,62 @@ class ProjectMergeRequests &lt; Spinach::FeatureSteps
182 end 182 end
183 end 183 end
184 184
  185 + step 'I click link "Hide inline discussion" of the second file' do
  186 + within '.files [id^=diff]:nth-child(2)' do
  187 + click_link "Diff comments"
  188 + end
  189 + end
  190 +
  191 + step 'I click link "Show inline discussion" of the second file' do
  192 + within '.files [id^=diff]:nth-child(2)' do
  193 + click_link "Diff comments"
  194 + end
  195 + end
  196 +
  197 + step 'I should not see a comment like "Line is wrong" in the second file' do
  198 + within '.files [id^=diff]:nth-child(2)' do
  199 + page.should_not have_visible_content "Line is wrong"
  200 + end
  201 + end
  202 +
  203 + step 'I should see a comment like "Line is wrong" in the second file' do
  204 + within '.files [id^=diff]:nth-child(2) .note-text' do
  205 + page.should have_visible_content "Line is wrong"
  206 + end
  207 + end
  208 +
  209 + step 'I leave a comment like "Line is correct" on line 12 of the first file' do
  210 + init_diff_note_first_file
  211 +
  212 + within(".js-discussion-note-form") do
  213 + fill_in "note_note", with: "Line is correct"
  214 + click_button "Add Comment"
  215 + end
  216 +
  217 + within ".files [id^=diff]:nth-child(1) .note-text" do
  218 + page.should have_content "Line is correct"
  219 + end
  220 + end
  221 +
  222 + step 'I leave a comment like "Line is wrong" on line 39 of the second file' do
  223 + init_diff_note_second_file
  224 +
  225 + within(".js-discussion-note-form") do
  226 + fill_in "note_note", with: "Line is wrong"
  227 + click_button "Add Comment"
  228 + end
  229 +
  230 + within ".files [id^=diff]:nth-child(2) .note-text" do
  231 + page.should have_content "Line is wrong"
  232 + end
  233 + end
  234 +
  235 + step 'I should still see a comment like "Line is correct" in the first file' do
  236 + within '.files [id^=diff]:nth-child(1) .note-text' do
  237 + page.should have_visible_content "Line is correct"
  238 + end
  239 + end
  240 +
185 def project 241 def project
186 @project ||= Project.find_by!(name: "Shop") 242 @project ||= Project.find_by!(name: "Shop")
187 end 243 end
@@ -204,4 +260,16 @@ class ProjectMergeRequests &lt; Spinach::FeatureSteps @@ -204,4 +260,16 @@ class ProjectMergeRequests &lt; Spinach::FeatureSteps
204 page.should have_content message 260 page.should have_content message
205 end 261 end
206 end 262 end
  263 +
  264 + def init_diff_note_first_file
  265 + find('a[data-line-code="a5cc2925ca8258af241be7e5b0381edf30266302_12_12"]').click
  266 + end
  267 +
  268 + def init_diff_note_second_file
  269 + find('a[data-line-code="8ec9a00bfd09b3190ac6b22251dbb1aa95a0579d_28_39"]').click
  270 + end
  271 +
  272 + def have_visible_content (text)
  273 + have_css("*", text: text, visible: true)
  274 + end
207 end 275 end