2013-01-15 00:27:59 +01:00
require 'spec_helper'
describe " On a merge request " , js : true do
let! ( :project ) { create ( :project ) }
let! ( :merge_request ) { create ( :merge_request , project : project ) }
before do
login_as :user
2013-01-15 11:42:54 +01:00
project . team << [ @user , :master ]
2013-01-15 00:27:59 +01:00
visit project_merge_request_path ( project , merge_request )
end
subject { page }
describe " the note form " do
# main target form creation
it { should have_css ( " .js-main-target-form " , visible : true , count : 1 ) }
# button initalization
it { within ( " .js-main-target-form " ) { should have_button ( " Add Comment " ) } }
it { within ( " .js-main-target-form " ) { should_not have_link ( " Cancel " ) } }
# notifiactions
it { within ( " .js-main-target-form " ) { should have_checked_field ( " Project team " ) } }
it { within ( " .js-main-target-form " ) { should_not have_checked_field ( " Commit author " ) } }
it { within ( " .js-main-target-form " ) { should_not have_unchecked_field ( " Commit author " ) } }
describe " without text " do
it { within ( " .js-main-target-form " ) { should have_css ( " .js-note-preview-button " , visible : false ) } }
end
describe " with text " do
before do
within ( " .js-main-target-form " ) do
fill_in " note[note] " , with : " This is awesome "
end
end
it { within ( " .js-main-target-form " ) { should_not have_css ( " .js-comment-button[disabled] " ) } }
it { within ( " .js-main-target-form " ) { should have_css ( " .js-note-preview-button " , visible : true ) } }
end
describe " with preview " do
before do
within ( " .js-main-target-form " ) do
fill_in " note[note] " , with : " This is awesome "
find ( " .js-note-preview-button " ) . trigger ( " click " )
end
end
it { within ( " .js-main-target-form " ) { should have_css ( " .js-note-preview " , text : " This is awesome " , visible : true ) } }
it { within ( " .js-main-target-form " ) { should have_css ( " .js-note-preview-button " , visible : false ) } }
it { within ( " .js-main-target-form " ) { should have_css ( " .js-note-edit-button " , visible : true ) } }
end
end
describe " when posting a note " do
before do
within ( " .js-main-target-form " ) do
fill_in " note[note] " , with : " This is awsome! "
find ( " .js-note-preview-button " ) . trigger ( " click " )
click_button " Add Comment "
end
end
# note added
it { within ( " .js-main-target-form " ) { should have_content ( " This is awsome! " ) } }
# reset form
it { within ( " .js-main-target-form " ) { should have_no_field ( " note[note] " , with : " This is awesome! " ) } }
# return from preview
it { within ( " .js-main-target-form " ) { should have_css ( " .js-note-preview " , visible : false ) } }
it { within ( " .js-main-target-form " ) { should have_css ( " .js-note-text " , visible : true ) } }
it " should be removable " do
find ( " .js-note-delete " ) . trigger ( " click " )
should_not have_css ( " .note " )
end
end
end
describe " On a merge request diff " , js : true , focus : true do
let! ( :project ) { create ( :project ) }
let! ( :merge_request ) { create ( :merge_request_with_diffs , project : project ) }
2013-01-15 11:42:54 +01:00
before do
2013-01-15 00:27:59 +01:00
login_as :user
2013-01-15 11:42:54 +01:00
project . team << [ @user , :master ]
2013-01-15 00:27:59 +01:00
2013-01-15 11:42:54 +01:00
visit diffs_project_merge_request_path ( project , merge_request )
2013-01-15 00:27:59 +01:00
click_link ( " Diff " )
end
subject { page }
describe " when adding a note " do
before do
2013-01-15 11:42:54 +01:00
find ( " # 4735dfc552ad7bf15ca468adc3cad9d05b624490_185_185.line_holder .js-add-diff-note-button " ) . trigger ( " click " )
2013-01-15 00:27:59 +01:00
end
describe " the notes holder " do
2013-01-15 11:42:54 +01:00
it { should have_css ( " # 4735dfc552ad7bf15ca468adc3cad9d05b624490_185_185.line_holder + .js-temp-notes-holder " ) }
2013-01-15 00:27:59 +01:00
it { within ( " .js-temp-notes-holder " ) { should have_css ( " .new_note " ) } }
end
describe " the note form " do
# set up hidden fields correctly
2013-01-15 11:42:54 +01:00
it { within ( " .js-temp-notes-holder " ) { find ( " # note_noteable_type " ) . value . should == " MergeRequest " } }
2013-01-15 00:27:59 +01:00
it { within ( " .js-temp-notes-holder " ) { find ( " # note_noteable_id " ) . value . should == " " } }
it { within ( " .js-temp-notes-holder " ) { find ( " # note_commit_id " ) . value . should == " bcf03b5de6c33f3869ef70d68cf06e679d1d7f9a " } }
2013-01-15 11:42:54 +01:00
it { within ( " .js-temp-notes-holder " ) { find ( " # note_line_code " ) . value . should == " 4735dfc552ad7bf15ca468adc3cad9d05b624490_185_185 " } }
2013-01-15 00:27:59 +01:00
# buttons
it { should have_button ( " Add Comment " ) }
it { should have_css ( " .js-close-discussion-note-form " , text : " Cancel " ) }
# notification options
it { should have_unchecked_field ( " Project team " ) }
it { should have_checked_field ( " Commit author " ) }
it " shouldn't add a second form for same row " do
2013-01-15 11:42:54 +01:00
find ( " # 4735dfc552ad7bf15ca468adc3cad9d05b624490_185_185.line_holder .js-add-diff-note-button " ) . trigger ( " click " )
2013-01-15 00:27:59 +01:00
2013-01-15 11:42:54 +01:00
should have_css ( " # 4735dfc552ad7bf15ca468adc3cad9d05b624490_185_185.line_holder + .js-temp-notes-holder form " , count : 1 )
2013-01-15 00:27:59 +01:00
end
it " should be removed when canceled " do
find ( " .js-close-discussion-note-form " ) . trigger ( " click " )
should have_no_css ( " .js-temp-notes-holder " )
end
end
end
describe " with muliple note forms " do
before do
2013-01-15 11:42:54 +01:00
find ( " # 4735dfc552ad7bf15ca468adc3cad9d05b624490_185_185.line_holder .js-add-diff-note-button " ) . trigger ( " click " )
find ( " # 342e16cbbd482ac2047dc679b2749d248cc1428f_18_17.line_holder .js-add-diff-note-button " ) . trigger ( " click " )
2013-01-15 00:27:59 +01:00
end
# has two line forms
it { should have_css ( " .js-temp-notes-holder " , count : 2 ) }
describe " previewing them separately " do
before do
# add two separate texts and trigger previews on both
2013-01-15 11:42:54 +01:00
within ( " # 4735dfc552ad7bf15ca468adc3cad9d05b624490_185_185.line_holder + .js-temp-notes-holder " ) do
2013-01-15 00:27:59 +01:00
fill_in " note[note] " , with : " One comment on line 185 "
find ( " .js-note-preview-button " ) . trigger ( " click " )
end
2013-01-15 11:42:54 +01:00
within ( " # 342e16cbbd482ac2047dc679b2749d248cc1428f_18_17.line_holder + .js-temp-notes-holder " ) do
2013-01-15 00:27:59 +01:00
fill_in " note[note] " , with : " Another comment on line 17 "
find ( " .js-note-preview-button " ) . trigger ( " click " )
end
end
# check if previews were rendered separately
2013-01-15 11:42:54 +01:00
it { within ( " # 4735dfc552ad7bf15ca468adc3cad9d05b624490_185_185.line_holder + .js-temp-notes-holder " ) { should have_css ( " .js-note-preview " , text : " One comment on line 185 " ) } }
it { within ( " # 342e16cbbd482ac2047dc679b2749d248cc1428f_18_17.line_holder + .js-temp-notes-holder " ) { should have_css ( " .js-note-preview " , text : " Another comment on line 17 " ) } }
2013-01-15 00:27:59 +01:00
end
describe " posting a note " do
before do
2013-01-15 11:42:54 +01:00
within ( " # 342e16cbbd482ac2047dc679b2749d248cc1428f_18_17.line_holder + .js-temp-notes-holder " ) do
2013-01-15 00:27:59 +01:00
fill_in " note[note] " , with : " Another comment on line 17 "
click_button ( " Add Comment " )
end
end
# removed form after submit
2013-01-15 11:42:54 +01:00
it { should have_no_css ( " # 342e16cbbd482ac2047dc679b2749d248cc1428f_18_17.line_holder + .js-temp-notes-holder " ) }
2013-01-15 00:27:59 +01:00
# added discussion
it { should have_content ( " Another comment on line 17 " ) }
2013-01-15 11:42:54 +01:00
it { should have_css ( " # 342e16cbbd482ac2047dc679b2749d248cc1428f_18_17.line_holder + .notes_holder " ) }
it { should have_css ( " # 342e16cbbd482ac2047dc679b2749d248cc1428f_18_17.line_holder + .notes_holder .note " , count : 1 ) }
2013-01-15 00:27:59 +01:00
it { should have_link ( " Reply " ) }
it " should remove last note of a discussion " do
2013-01-15 11:42:54 +01:00
within ( " # 342e16cbbd482ac2047dc679b2749d248cc1428f_18_17.line_holder + .notes_holder " ) do
2013-01-15 00:27:59 +01:00
find ( " .js-note-delete " ) . trigger ( " click " )
end
# removed whole discussion
should_not have_css ( " .note_holder " )
2013-01-15 11:42:54 +01:00
should have_css ( " # 342e16cbbd482ac2047dc679b2749d248cc1428f_18_17.line_holder + # 342e16cbbd482ac2047dc679b2749d248cc1428f_18_18.line_holder " )
2013-01-15 00:27:59 +01:00
end
end
end
describe " when replying to a note " do
before do
# create first note
2013-01-15 11:42:54 +01:00
find ( " # 4735dfc552ad7bf15ca468adc3cad9d05b624490_184_184.line_holder .js-add-diff-note-button " ) . trigger ( " click " )
within ( " # 4735dfc552ad7bf15ca468adc3cad9d05b624490_184_184.line_holder + .js-temp-notes-holder " ) do
2013-01-15 00:27:59 +01:00
fill_in " note[note] " , with : " One comment on line 184 "
click_button ( " Add Comment " )
end
# create second note
2013-01-15 11:42:54 +01:00
within ( " # 4735dfc552ad7bf15ca468adc3cad9d05b624490_184_184.line_holder + .notes_holder " ) do
2013-01-15 00:27:59 +01:00
find ( " .js-discussion-reply-button " ) . trigger ( " click " )
fill_in " note[note] " , with : " An additional comment in reply "
click_button ( " Add Comment " )
end
end
# inserted note
it { should have_content ( " An additional comment in reply " ) }
2013-01-15 11:42:54 +01:00
it { within ( " # 4735dfc552ad7bf15ca468adc3cad9d05b624490_184_184.line_holder + .notes_holder " ) { should have_css ( " .note " , count : 2 ) } }
2013-01-15 00:27:59 +01:00
# removed form after reply
2013-01-15 11:42:54 +01:00
it { within ( " # 4735dfc552ad7bf15ca468adc3cad9d05b624490_184_184.line_holder + .notes_holder " ) { should have_no_css ( " form " ) } }
it { within ( " # 4735dfc552ad7bf15ca468adc3cad9d05b624490_184_184.line_holder + .notes_holder " ) { should have_link ( " Reply " ) } }
2013-01-15 00:27:59 +01:00
end
end
describe " On merge request discussion " , js : true do
describe " with merge request diff note "
describe " with commit note "
describe " with commit diff note "
2013-01-15 11:42:54 +01:00
end