BigW Consortium Gitlab

discussion_lock_spec.rb 2.99 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
require 'spec_helper'

describe 'Discussion Lock', :js do
  let(:user) { create(:user) }
  let(:issue) { create(:issue, project: project, author: user) }
  let(:project) { create(:project, :public) }

  before do
    sign_in(user)
  end

  context 'when a user is a team member' do
    before do
      project.add_developer(user)
    end

Simon Knox committed
17
    context 'when the discussion is   unlocked' do
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 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 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
      it 'the user can lock the issue' do
        visit project_issue_path(project, issue)

        expect(find('.issuable-sidebar')).to have_content('Unlocked')

        page.within('.issuable-sidebar') do
          find('.lock-edit').click
          click_button('Lock')
        end

        expect(find('#notes')).to have_content('locked this issue')
      end
    end

    context 'when the discussion is locked' do
      before do
        issue.update_attribute(:discussion_locked, true)
        visit project_issue_path(project, issue)
      end

      it 'the user can unlock the issue' do
        expect(find('.issuable-sidebar')).to have_content('Locked')

        page.within('.issuable-sidebar') do
          find('.lock-edit').click
          click_button('Unlock')
        end

        expect(find('#notes')).to have_content('unlocked this issue')
        expect(find('.issuable-sidebar')).to have_content('Unlocked')
      end

      it 'the user can create a comment' do
        page.within('#notes .js-main-target-form') do
          fill_in 'note[note]', with: 'Some new comment'
          click_button 'Comment'
        end

        wait_for_requests

        expect(find('div#notes')).to have_content('Some new comment')
      end
    end
  end

  context 'when a user is not a team member' do
    context 'when the discussion is unlocked' do
      before do
        visit project_issue_path(project, issue)
      end

      it 'the user can not lock the issue' do
        expect(find('.issuable-sidebar')).to have_content('Unlocked')
        expect(find('.issuable-sidebar')).not_to have_selector('.lock-edit')
      end

      it 'the user can create a comment' do
        page.within('#notes .js-main-target-form') do
          fill_in 'note[note]', with: 'Some new comment'
          click_button 'Comment'
        end

        wait_for_requests

        expect(find('div#notes')).to have_content('Some new comment')
      end
    end

    context 'when the discussion is locked' do
      before do
        issue.update_attribute(:discussion_locked, true)
        visit project_issue_path(project, issue)
      end

      it 'the user can not unlock the issue' do
        expect(find('.issuable-sidebar')).to have_content('Locked')
        expect(find('.issuable-sidebar')).not_to have_selector('.lock-edit')
      end

      it 'the user can not create a comment' do
        page.within('#notes') do
          expect(page).not_to have_selector('js-main-target-form')
Jarka Kadlecova committed
100 101
          expect(page.find('.disabled-comment'))
            .to have_content('This issue is locked. Only project members can comment.')
102 103 104 105 106
        end
      end
    end
  end
end