notes_on_personal_snippets_spec.rb 3.2 KB
Newer Older
1 2
require 'spec_helper'

3
describe 'Comments on personal snippets', :js, feature: true do
4 5
  include NoteInteractionHelpers

6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
  let!(:user)    { create(:user) }
  let!(:snippet) { create(:personal_snippet, :public) }
  let!(:snippet_notes) do
    [
      create(:note_on_personal_snippet, noteable: snippet, author: user),
      create(:note_on_personal_snippet, noteable: snippet)
    ]
  end
  let!(:other_note) { create(:note_on_personal_snippet) }

  before do
    login_as user
    visit snippet_path(snippet)
  end

  subject { page }

23
  context 'when viewing the snippet detail page' do
24 25 26
    it 'contains notes for a snippet with correct action icons' do
      expect(page).to have_selector('#notes-list li', count: 2)

27 28
      open_more_actions_dropdown(snippet_notes[0])

29 30 31 32 33 34 35
      # comment authored by current user
      page.within("#notes-list li#note_#{snippet_notes[0].id}") do
        expect(page).to have_content(snippet_notes[0].note)
        expect(page).to have_selector('.js-note-delete')
        expect(page).to have_selector('.note-emoji-button')
      end

36 37
      open_more_actions_dropdown(snippet_notes[1])

38 39 40 41 42 43 44
      page.within("#notes-list li#note_#{snippet_notes[1].id}") do
        expect(page).to have_content(snippet_notes[1].note)
        expect(page).not_to have_selector('.js-note-delete')
        expect(page).to have_selector('.note-emoji-button')
      end
    end
  end
45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76

  context 'when submitting a note' do
    it 'shows a valid form' do
      is_expected.to have_css('.js-main-target-form', visible: true, count: 1)
      expect(find('.js-main-target-form .js-comment-button').value).
        to eq('Comment')

      page.within('.js-main-target-form') do
        expect(page).not_to have_link('Cancel')
      end
    end

    it 'previews a note' do
      fill_in 'note[note]', with: 'This is **awesome**!'
      find('.js-md-preview-button').click

      page.within('.new-note .md-preview') do
        expect(page).to have_content('This is awesome!')
        expect(page).to have_selector('strong')
      end
    end

    it 'creates a note' do
      fill_in 'note[note]', with: 'This is **awesome**!'
      click_button 'Comment'

      expect(find('div#notes')).to have_content('This is awesome!')
    end
  end

  context 'when editing a note' do
    it 'changes the text' do
77 78
      open_more_actions_dropdown(snippet_notes[0])

79 80 81 82 83 84 85 86 87 88
      page.within("#notes-list li#note_#{snippet_notes[0].id}") do
        click_on 'Edit comment'
      end

      page.within('.current-note-edit-form') do
        fill_in 'note[note]', with: 'new content'
        find('.btn-save').click
      end

      page.within("#notes-list li#note_#{snippet_notes[0].id}") do
89 90
        edited_text = find('.edited-text')

91 92
        expect(page).to have_css('.note_edited_ago')
        expect(page).to have_content('new content')
93
        expect(edited_text).to have_selector('.note_edited_ago')
94 95 96 97 98 99
      end
    end
  end

  context 'when deleting a note' do
    it 'removes the note from the snippet detail page' do
100 101
      open_more_actions_dropdown(snippet_notes[0])

102
      page.within("#notes-list li#note_#{snippet_notes[0].id}") do
103
        click_on 'Delete comment'
104 105
      end

106
      wait_for_requests
107 108 109 110

      expect(page).not_to have_selector("#notes-list li#note_#{snippet_notes[0].id}")
    end
  end
111
end