Skip to content
Snippets Groups Projects
notes_on_merge_requests_spec.rb 6.48 KiB
Newer Older
  • Learn to ignore specific revisions
  • Dmitriy Zaporozhets's avatar
    Dmitriy Zaporozhets committed
    describe 'Comments' do
      include RepoHelpers
    
    Dmitriy Zaporozhets's avatar
    Dmitriy Zaporozhets committed
      describe "On a merge request", js: true, feature: true do
        let!(:merge_request) { create(:merge_request) }
        let!(:project) { merge_request.source_project }
        let!(:note) { create(:note_on_merge_request, :with_attachment, project: project) }
    
    Dmitriy Zaporozhets's avatar
    Dmitriy Zaporozhets committed
        before do
          login_as :admin
          visit project_merge_request_path(project, merge_request)
    
    Dmitriy Zaporozhets's avatar
    Dmitriy Zaporozhets committed
        subject { page }
    
    Dmitriy Zaporozhets's avatar
    Dmitriy Zaporozhets committed
        describe "the note form" do
          it 'should be valid' do
            should have_css(".js-main-target-form", visible: true, count: 1)
            find(".js-main-target-form input[type=submit]").value.should == "Add Comment"
    
            within('.js-main-target-form') do
              expect(page).not_to have_link('Cancel')
            end
    
    Dmitriy Zaporozhets's avatar
    Dmitriy Zaporozhets committed
          describe "with text" do
            before do
              within(".js-main-target-form") do
                fill_in "note[note]", with: "This is awesome"
              end
            end
    
            it 'should have enable submit button and preview button' do
    
    Vinnie Okada's avatar
    Vinnie Okada committed
              within('.js-main-target-form') do
                expect(page).not_to have_css('.js-comment-button[disabled]')
    
    Vinnie Okada's avatar
    Vinnie Okada committed
                expect(page).to have_css('.js-md-preview-button', visible: true)
    
    Dmitriy Zaporozhets's avatar
    Dmitriy Zaporozhets committed
            end
    
    Dmitriy Zaporozhets's avatar
    Dmitriy Zaporozhets committed
        describe "when posting a note" do
          before do
            within(".js-main-target-form") do
              fill_in "note[note]", with: "This is awsome!"
    
              find('.js-md-preview-button').click
    
    Dmitriy Zaporozhets's avatar
    Dmitriy Zaporozhets committed
              click_button "Add Comment"
            end
          end
    
    Dmitriy Zaporozhets's avatar
    Dmitriy Zaporozhets committed
          it 'should be added and form reset' do
            should have_content("This is awsome!")
    
    Vinnie Okada's avatar
    Vinnie Okada committed
            within('.js-main-target-form') do
              expect(page).to have_no_field('note[note]', with: 'This is awesome!')
    
    Vinnie Okada's avatar
    Vinnie Okada committed
              expect(page).to have_css('.js-md-preview', visible: :hidden)
    
    Dmitriy Zaporozhets's avatar
    Dmitriy Zaporozhets committed
            within(".js-main-target-form") { should have_css(".js-note-text", visible: true) }
          end
    
    Dmitriy Zaporozhets's avatar
    Dmitriy Zaporozhets committed
        describe "when editing a note", js: true do
          it "should contain the hidden edit form" do
            within("#note_#{note.id}") { should have_css(".note-edit-form", visible: false) }
    
    Dmitriy Zaporozhets's avatar
    Dmitriy Zaporozhets committed
          describe "editing the note" do
            before do
              find('.note').hover
              find(".js-note-edit").click
    
    Dmitriy Zaporozhets's avatar
    Dmitriy Zaporozhets committed
            it "should show the note edit form and hide the note body" do
              within("#note_#{note.id}") do
    
    Dmitriy Zaporozhets's avatar
    Dmitriy Zaporozhets committed
                find(".current-note-edit-form", visible: true).should be_visible
    
    Dmitriy Zaporozhets's avatar
    Dmitriy Zaporozhets committed
                find(".note-edit-form", visible: true).should be_visible
    
    Dmitriy Zaporozhets's avatar
    Dmitriy Zaporozhets committed
                find(:css, ".note-text", visible: false).should_not be_visible
    
    Dmitriy Zaporozhets's avatar
    Dmitriy Zaporozhets committed
              end
    
    Dmitriy Zaporozhets's avatar
    Dmitriy Zaporozhets committed
            it "should reset the edit note form textarea with the original content of the note if cancelled" do
    
    Dmitriy Zaporozhets's avatar
    Dmitriy Zaporozhets committed
              within(".current-note-edit-form") do
    
    Dmitriy Zaporozhets's avatar
    Dmitriy Zaporozhets committed
                fill_in "note[note]", with: "Some new content"
                find(".btn-cancel").click
                find(".js-note-text", visible: false).text.should == note.note
              end
    
    Dmitriy Zaporozhets's avatar
    Dmitriy Zaporozhets committed
            it "appends the edited at time to the note" do
    
    Dmitriy Zaporozhets's avatar
    Dmitriy Zaporozhets committed
              within(".current-note-edit-form") do
    
    Dmitriy Zaporozhets's avatar
    Dmitriy Zaporozhets committed
                fill_in "note[note]", with: "Some new content"
                find(".btn-save").click
              end
    
              within("#note_#{note.id}") do
                should have_css(".note-last-update small")
                find(".note-last-update small").text.should match(/Edited less than a minute ago/)
              end
    
    Dmitriy Zaporozhets's avatar
    Dmitriy Zaporozhets committed
          describe "deleting an attachment" do
            before do
              find('.note').hover
              find(".js-note-edit").click
            end
    
    Dmitriy Zaporozhets's avatar
    Dmitriy Zaporozhets committed
            it "shows the delete link" do
              within(".note-attachment") do
                should have_css(".js-note-attachment-delete")
              end
    
    Dmitriy Zaporozhets's avatar
    Dmitriy Zaporozhets committed
            it "removes the attachment div and resets the edit form" do
              find(".js-note-attachment-delete").click
              should_not have_css(".note-attachment")
    
    Dmitriy Zaporozhets's avatar
    Dmitriy Zaporozhets committed
              find(".current-note-edit-form", visible: false).should_not be_visible
    
    Dmitriy Zaporozhets's avatar
    Dmitriy Zaporozhets committed
            end
    
    Jack Weeden's avatar
    Jack Weeden committed
          end
        end
      end
    
    Dmitriy Zaporozhets's avatar
    Dmitriy Zaporozhets committed
      describe "On a merge request diff", js: true, feature: true do
        let(:merge_request) { create(:merge_request) }
        let(:project) { merge_request.source_project }
    
    Dmitriy Zaporozhets's avatar
    Dmitriy Zaporozhets committed
          login_as :admin
          visit diffs_project_merge_request_path(project, merge_request)
    
    Dmitriy Zaporozhets's avatar
    Dmitriy Zaporozhets committed
        subject { page }
    
    Dmitriy Zaporozhets's avatar
    Dmitriy Zaporozhets committed
        describe "when adding a note" do
          before do
    
            click_diff_line
    
    Dmitriy Zaporozhets's avatar
    Dmitriy Zaporozhets committed
          describe "the notes holder" do
            it { should have_css(".js-temp-notes-holder") }
    
    Dmitriy Zaporozhets's avatar
    Dmitriy Zaporozhets committed
            it { within(".js-temp-notes-holder") { should have_css(".new_note") } }
    
    Dmitriy Zaporozhets's avatar
    Dmitriy Zaporozhets committed
          describe "the note form" do
            it "shouldn't add a second form for same row" do
    
              click_diff_line
    
    Dmitriy Zaporozhets's avatar
    Dmitriy Zaporozhets committed
              should have_css("tr[id='#{line_code}'] + .js-temp-notes-holder form", count: 1)
    
    Dmitriy Zaporozhets's avatar
    Dmitriy Zaporozhets committed
    
            it "should be removed when canceled" do
              within(".diff-file form[rel$='#{line_code}']") do
                find(".js-close-discussion-note-form").trigger("click")
              end
    
              should have_no_css(".js-temp-notes-holder")
    
    Dmitriy Zaporozhets's avatar
    Dmitriy Zaporozhets committed
        describe "with muliple note forms" do
    
            click_diff_line
            click_diff_line(line_code_2)
    
    Dmitriy Zaporozhets's avatar
    Dmitriy Zaporozhets committed
          end
    
          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
              within("tr[id='#{line_code}'] + .js-temp-notes-holder") do
                fill_in "note[note]", with: "One comment on line 7"
    
                find('.js-md-preview-button').click
    
    Dmitriy Zaporozhets's avatar
    Dmitriy Zaporozhets committed
              end
              within("tr[id='#{line_code_2}'] + .js-temp-notes-holder") do
                fill_in "note[note]", with: "Another comment on line 10"
    
                find('.js-md-preview-button').click
    
    Dmitriy Zaporozhets's avatar
    Dmitriy Zaporozhets committed
              end
    
    Dmitriy Zaporozhets's avatar
    Dmitriy Zaporozhets committed
          describe "posting a note" do
            before do
              within("tr[id='#{line_code_2}'] + .js-temp-notes-holder") do
                fill_in "note[note]", with: "Another comment on line 10"
                click_button("Add Comment")
              end
            end
    
            it 'should be added as discussion' do
              should have_content("Another comment on line 10")
              should have_css(".notes_holder")
              should have_css(".notes_holder .note", count: 1)
    
              should have_button('Reply')
    
    Dmitriy Zaporozhets's avatar
    Dmitriy Zaporozhets committed
            end
    
    Dmitriy Zaporozhets's avatar
    Dmitriy Zaporozhets committed
    
      def line_code
        sample_compare.changes.first[:line_code]
      end
    
      def line_code_2
        sample_compare.changes.last[:line_code]
      end
    
    
      def click_diff_line(data = nil)
        data ||= line_code
        find("button[data-line-code=\"#{data}\"]").click
      end