Commit dd79472b authored by Luke "Jared" Bennett's avatar Luke "Jared" Bennett Committed by Luke Bennett

Finished up intial version that uses XPath extensively

parent 10b8c62b
...@@ -23,172 +23,155 @@ feature 'Diffs URL', js: true, feature: true do ...@@ -23,172 +23,155 @@ feature 'Diffs URL', js: true, feature: true do
end end
end end
context 'when hovering over the parallel view diff file' do context 'diff notes' do
let(:comment_button_class) { '.add-diff-note' } let(:comment_button_class) { '.add-diff-note' }
let(:notes_holder_input_class) { 'js-temp-notes-holder' }
before(:each) do let(:notes_holder_input_xpath) { './following-sibling::*[contains(concat(" ", @class, " "), " notes_holder ")]' }
visit diffs_namespace_project_merge_request_path(@project.namespace, @project, @merge_request) let(:test_note_comment) { 'this is a test note!' }
click_link 'Side-by-side' # line_holder = //*[contains(concat(" ", @class, " "), " line_holder "]
# @old_line_number = first '.diff-line-num.old_line:not(.empty-cell)' # old_line = child::*[contains(concat(" ", @class, " "), " line_content ") and contains(concat(" ", @class, " "), " old ")]
# @new_line_number = first '.diff-line-num.new_line:not(.empty-cell)' # new_line = child::*[contains(concat(" ", @class, " ")," line_content ") and contains(concat(" ", @class, " ")," new ")]
# @old_line = first '.line_content[data-line-type="old"]' # match_line = child::*[contains(concat(" ", @class, " ")," line_content ") and contains(concat(" ", @class, " ")," match ")]
# @new_line = first '.line_content[data-line-type="new"]' # unchanged_line = child::*[contains(concat(" ", @class, " ")," line_content ") and not(contains(concat(" ", @class, " ")," old ")) and not(contains(concat(" ", @class, " ")," new ")) and not(contains(concat(" ", @class, " ")," match ")) and boolean(node()[1])]
end # no_line = child::*[contains(concat(" ", @class, " ")," line_content ") and not(contains(concat(" ", @class, " ")," old ")) and not(contains(concat(" ", @class, " ")," new ")) and not(contains(concat(" ", @class, " ")," match ")) and not(boolean(node()[1]))]
context 'with an old line on the left and no line on the right' do context 'when hovering over the parallel view diff file' do
it 'should allow commenting on the left side' do before(:each) do
puts first('//*[contains(concat(" ", @class, " "), " line_holder ") and child::*[contains(concat(" ", @class, " "), " line_content ") and contains(concat(" ", @class, " "), " old ")] and child::*[contains(concat(" ", @class, " ")," line_content ") and contains(concat(" ", @class, " ")," new ")]]') visit diffs_namespace_project_merge_request_path(@project.namespace, @project, @merge_request)
expect(page).to have_content 'NOPE' click_link 'Side-by-side'
end end
it 'should not allow commenting on the right side' do context 'with an old line on the left and no line on the right' do
let(:line_holder) { first :xpath, '//*[contains(concat(" ", @class, " "), " line_holder ") and child::*[contains(concat(" ", @class, " "), " line_content ") and contains(concat(" ", @class, " "), " old ")] and child::*[contains(concat(" ", @class, " ")," line_content ") and not(contains(concat(" ", @class, " ")," old ")) and not(contains(concat(" ", @class, " ")," new ")) and not(contains(concat(" ", @class, " ")," match ")) and not(boolean(node()[1]))]]' }
end
end
context 'with no line on the left and a new line on the right' do it 'should allow commenting on the left side' do
it 'should allow commenting on the right side' do should_allow_commenting line_holder, 'left'
end
it 'should not allow commenting on the right side' do
should_not_allow_commenting line_holder, 'right'
end
end end
it 'should not allow commenting on the left side' do context 'with no line on the left and a new line on the right' do
let(:line_holder) { first :xpath, '//*[contains(concat(" ", @class, " "), " line_holder ") and child::*[contains(concat(" ", @class, " ")," line_content ") and not(contains(concat(" ", @class, " ")," old ")) and not(contains(concat(" ", @class, " ")," new ")) and not(contains(concat(" ", @class, " ")," match ")) and not(boolean(node()[1]))] and child::*[contains(concat(" ", @class, " ")," line_content ") and contains(concat(" ", @class, " ")," new ")]]' }
end it 'should not allow commenting on the left side' do
end should_not_allow_commenting line_holder, 'left'
end
context 'with an old line on the left and a new line on the right' do
it 'should allow commenting on the left side' do
it 'should allow commenting on the right side' do
should_allow_commenting line_holder, 'right'
end
end end
it 'should allow commenting on the right side' do context 'with an old line on the left and a new line on the right' do
let(:line_holder) { first :xpath, '//*[contains(concat(" ", @class, " "), " line_holder ") and child::*[contains(concat(" ", @class, " "), " line_content ") and contains(concat(" ", @class, " "), " old ")] and child::*[contains(concat(" ", @class, " ")," line_content ") and contains(concat(" ", @class, " ")," new ")]]' }
it 'should allow commenting on the left side' do
should_allow_commenting line_holder, 'left'
end
it 'should allow commenting on the right side' do
should_allow_commenting line_holder, 'right'
end
end end
end
context 'with an unchanged line on the left and an unchanged line on the right' do context 'with an unchanged line on the left and an unchanged line on the right' do
it 'should allow commenting on the left side' do let(:line_holder) { first :xpath, '//*[contains(concat(" ", @class, " "), " line_holder ") and child::*[contains(concat(" ", @class, " ")," line_content ") and not(contains(concat(" ", @class, " ")," old ")) and not(contains(concat(" ", @class, " ")," new ")) and not(contains(concat(" ", @class, " ")," match ")) and boolean(node()[1])] and child::*[contains(concat(" ", @class, " ")," line_content ") and not(contains(concat(" ", @class, " ")," old ")) and not(contains(concat(" ", @class, " ")," new ")) and not(contains(concat(" ", @class, " ")," match ")) and boolean(node()[1])]]' }
it 'should allow commenting on the left side' do
should_allow_commenting line_holder, 'left'
end
it 'should allow commenting on the right side' do
should_allow_commenting line_holder, 'right'
end
end end
it 'should allow commenting on the right side' do context 'with a match line' do
let(:line_holder) { first :xpath, '//*[contains(concat(" ", @class, " "), " line_holder ") and child::*[contains(concat(" ", @class, " "), " line_content ") and contains(concat(" ", @class, " "), " match ")] and child::*[contains(concat(" ", @class, " ")," line_content ") and contains(concat(" ", @class, " ")," match ")]]' }
it 'should not allow commenting on the left side' do
should_not_allow_commenting line_holder, 'left'
end
it 'should not allow commenting on the right side' do
should_not_allow_commenting line_holder, 'right'
end
end end
end end
context 'with a match line' do context 'when hovering over the inline view diff file' do
it 'should not allow commenting on the left side' do let(:comment_button_class) { '.add-diff-note' }
before(:each) do
visit diffs_namespace_project_merge_request_path(@project.namespace, @project, @merge_request)
click_link 'Inline'
end end
it 'should not allow commenting on the right side' do context 'with a new line' do
let(:line_holder) { first :xpath, '//*[contains(concat(" ", @class, " "), " line_holder ") and child::*[contains(concat(" ", @class, " "), " line_content ") and contains(concat(" ", @class, " "), " new ")]]' }
it 'should allow commenting' do
should_allow_commenting line_holder
end
end end
end
# it 'shows a comment button on the old side when hovering over an old line number' do
# @old_line_number.hover
# expect(@old_line_number).to have_css comment_button_class
# expect(@new_line_number).not_to have_css comment_button_class
# end
#
# it 'shows a comment button on the old side when hovering over an old line' do
# @old_line.hover
# expect(@old_line_number).to have_css comment_button_class
# expect(@new_line_number).not_to have_css comment_button_class
# end
#
# it 'shows a comment button on the new side when hovering over a new line number' do
# @new_line_number.hover
# expect(@new_line_number).to have_css comment_button_class
# expect(@old_line_number).not_to have_css comment_button_class
# end
#
# it 'shows a comment button on the new side when hovering over a new line' do
# @new_line.hover
# expect(@new_line_number).to have_css comment_button_class
# expect(@old_line_number).not_to have_css comment_button_class
# end
end
context 'when hovering over the inline view diff file' do context 'with an old line' do
let(:comment_button_class) { '.add-diff-note' } let(:line_holder) { first :xpath, '//*[contains(concat(" ", @class, " "), " line_holder ") and child::*[contains(concat(" ", @class, " "), " line_content ") and contains(concat(" ", @class, " "), " old ")]]' }
before(:each) do it 'should allow commenting' do
visit diffs_namespace_project_merge_request_path(@project.namespace, @project, @merge_request) should_allow_commenting line_holder
click_link 'Inline' end
# @old_line_number = first '.diff-line-num.old_line:not(.unfold)' end
# @new_line_number = first '.diff-line-num.new_line:not(.unfold)'
# @new_line = first '.line_content:not(.match)'
end
context 'with a new line' do context 'with an unchanged line' do
it 'should allow commenting' do let(:line_holder) { first :xpath, '//*[contains(concat(" ", @class, " "), " line_holder ") and child::*[contains(concat(" ", @class, " ")," line_content ") and not(contains(concat(" ", @class, " ")," old ")) and not(contains(concat(" ", @class, " ")," new ")) and not(contains(concat(" ", @class, " ")," match ")) and boolean(node()[1])] and child::*[contains(concat(" ", @class, " ")," line_content ") and not(contains(concat(" ", @class, " ")," old ")) and not(contains(concat(" ", @class, " ")," new ")) and not(contains(concat(" ", @class, " ")," match ")) and boolean(node()[1])]]' }
it 'should allow commenting' do
should_allow_commenting line_holder
end
end end
end
context 'with an old line' do context 'with a match line' do
it 'should allow commenting' do let(:line_holder) { first :xpath, '//*[contains(concat(" ", @class, " "), " line_holder ") and child::*[contains(concat(" ", @class, " "), " line_content ") and contains(concat(" ", @class, " "), " match ")]]' }
it 'should not allow commenting' do
should_not_allow_commenting line_holder
end
end end
end end
context 'with an unchanged line' do def should_allow_commenting(line_holder, diff_side = nil)
it 'should allow commenting' do line = get_line diff_side
line[:content].hover
end expect(line[:num]).to have_css comment_button_class
line[:num].find(comment_button_class).trigger 'click'
expect(line_holder).to have_xpath notes_holder_input_xpath
notes_holder_input = line_holder.find(:xpath, notes_holder_input_xpath)
expect(notes_holder_input[:class].include? notes_holder_input_class).to be true
notes_holder_input.fill_in 'note[note]', with: test_note_comment
click_button 'Comment'
expect(line_holder).to have_xpath notes_holder_input_xpath
notes_holder_saved = line_holder.find(:xpath, notes_holder_input_xpath)
expect(notes_holder_saved[:class].include? notes_holder_input_class).to be false
expect(notes_holder_saved).to have_content test_note_comment
end end
context 'with a match line' do def should_not_allow_commenting(line_holder, diff_side = nil)
it 'should not allow commenting' do line = get_line diff_side
line[:content].hover
expect(line[:num]).not_to have_css comment_button_class
end
def get_line(diff_side = nil)
if diff_side.nil?
{ content: line_holder.first('.line_content'), num: line_holder.first('.diff-line-num') }
else
side_index = diff_side == 'left' ? 0 : 1
{ content: line_holder.all('.line_content')[side_index], num: line_holder.all('.diff-line-num')[side_index] }
end end
end end
# it 'shows a comment button on the old side when hovering over an old line number' do
# @old_line_number.hover
# expect(@old_line_number).to have_css comment_button_class
# expect(@new_line_number).not_to have_css comment_button_class
# end
#
# it 'shows a comment button on the new side when hovering over a new line number' do
# @new_line_number.hover
# expect(@old_line_number).to have_css comment_button_class
# expect(@new_line_number).not_to have_css comment_button_class
# end
#
# it 'shows a comment button on the new side when hovering over a new line' do
# @new_line.hover
# expect(@old_line_number).to have_css comment_button_class
# expect(@new_line_number).not_to have_css comment_button_class
# end
end end
# context 'when clicking a comment button' do
# let(:test_note_comment) { 'this is a test note!' }
# let(:note_class) { '.new-note' }
#
# before(:each) do
# visit diffs_namespace_project_merge_request_path(@project.namespace, @project, @merge_request)
# click_link 'Inline'
# first('.diff-line-num.old_line:not(.unfold)').hover
# find('.add-diff-note').click
# end
#
# it 'shows a note form' do
# expect(page).to have_css note_class
# end
#
# it 'can be submitted and viewed' do
# fill_in 'note[note]', with: test_note_comment
# click_button 'Comment'
# expect(page).to have_content test_note_comment
# end
#
# it 'can be closed' do
# find('.note-form-actions .btn-cancel').click
# expect(page).not_to have_css note_class
# end
# end
end end
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment