BigW Consortium Gitlab

user_uses_slash_commands_spec.rb 6.46 KB
Newer Older
1 2
require 'rails_helper'

3 4
feature 'Merge Requests > User uses quick actions', feature: true, js: true do
  include QuickActionsHelpers
5 6 7 8 9 10

  let(:user) { create(:user) }
  let(:project) { create(:project, :public) }
  let(:merge_request) { create(:merge_request, source_project: project) }
  let!(:milestone) { create(:milestone, project: project, title: 'ASAP') }

11
  it_behaves_like 'issuable record that supports quick actions in its description and notes', :merge_request do
12
    let(:issuable) { create(:merge_request, source_project: project) }
13
    let(:new_url_opts) { { merge_request: { source_branch: 'feature', target_branch: 'master' } } }
14 15
  end

16
  describe 'merge-request-only commands' do
17 18
    before do
      project.team << [user, :master]
19
      gitlab_sign_in(user)
20
      visit project_merge_request_path(project, merge_request)
21
    end
22

23
    after do
24
      wait_for_requests
25 26
    end

27 28 29 30 31 32
    describe 'toggling the WIP prefix in the title from note' do
      context 'when the current user can toggle the WIP prefix' do
        it 'adds the WIP: prefix to the title' do
          write_note("/wip")

          expect(page).not_to have_content '/wip'
33
          expect(page).to have_content 'Commands applied'
34 35

          expect(merge_request.reload.work_in_progress?).to eq true
36
        end
37 38 39 40 41 42 43

        it 'removes the WIP: prefix from the title' do
          merge_request.title = merge_request.wip_title
          merge_request.save
          write_note("/wip")

          expect(page).not_to have_content '/wip'
44
          expect(page).to have_content 'Commands applied'
45 46

          expect(merge_request.reload.work_in_progress?).to eq false
47
        end
48 49 50 51 52 53
      end

      context 'when the current user cannot toggle the WIP prefix' do
        let(:guest) { create(:user) }
        before do
          project.team << [guest, :guest]
54
          gitlab_sign_out
55
          gitlab_sign_in(guest)
56
          visit project_merge_request_path(project, merge_request)
57 58 59 60 61 62
        end

        it 'does not change the WIP prefix' do
          write_note("/wip")

          expect(page).not_to have_content '/wip'
63
          expect(page).not_to have_content 'Commands applied'
64 65 66 67 68 69

          expect(merge_request.reload.work_in_progress?).to eq false
        end
      end
    end

70 71 72 73 74
    describe 'merging the MR from the note' do
      context 'when the current user can merge the MR' do
        it 'merges the MR' do
          write_note("/merge")

Jarka Kadlecova committed
75
          expect(page).to have_content 'Commands applied'
76 77 78 79 80 81 82

          expect(merge_request.reload).to be_merged
        end
      end

      context 'when the head diff changes in the meanwhile' do
        before do
Jarka Kadlecova committed
83 84
          merge_request.source_branch = 'another_branch'
          merge_request.save
85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
        end

        it 'does not merge the MR' do
          write_note("/merge")

          expect(page).not_to have_content 'Your commands have been executed!'

          expect(merge_request.reload).not_to be_merged
        end
      end

      context 'when the current user cannot merge the MR' do
        let(:guest) { create(:user) }
        before do
          project.team << [guest, :guest]
100
          gitlab_sign_out
101
          gitlab_sign_in(guest)
102
          visit project_merge_request_path(project, merge_request)
103 104 105 106 107 108 109 110 111 112 113 114
        end

        it 'does not merge the MR' do
          write_note("/merge")

          expect(page).not_to have_content 'Your commands have been executed!'

          expect(merge_request.reload).not_to be_merged
        end
      end
    end

115 116 117
    describe 'adding a due date from note' do
      it 'does not recognize the command nor create a note' do
        write_note('/due 2016-08-28')
118

119 120
        expect(page).not_to have_content '/due 2016-08-28'
      end
121
    end
122 123 124 125 126 127

    describe '/target_branch command in merge request' do
      let(:another_project) { create(:project, :public) }
      let(:new_url_opts) { { merge_request: { source_branch: 'feature' } } }

      before do
128
        gitlab_sign_out
129
        another_project.team << [user, :master]
130
        gitlab_sign_in(user)
131 132 133
      end

      it 'changes target_branch in new merge_request' do
134
        visit project_new_merge_request_path(another_project, new_url_opts)
135

136 137 138 139 140 141 142 143 144 145 146 147
        fill_in "merge_request_title", with: 'My brand new feature'
        fill_in "merge_request_description", with: "le feature \n/target_branch fix\nFeature description:"
        click_button "Submit merge request"

        merge_request = another_project.merge_requests.first
        expect(merge_request.description).to eq "le feature \nFeature description:"
        expect(merge_request.target_branch).to eq 'fix'
      end

      it 'does not change target branch when merge request is edited' do
        new_merge_request = create(:merge_request, source_project: another_project)

148
        visit edit_project_merge_request_path(another_project, new_merge_request)
149 150 151 152 153 154 155 156 157 158 159 160 161 162
        fill_in "merge_request_description", with: "Want to update target branch\n/target_branch fix\n"
        click_button "Save changes"

        new_merge_request = another_project.merge_requests.first
        expect(new_merge_request.description).to include('/target_branch')
        expect(new_merge_request.target_branch).not_to eq('fix')
      end
    end

    describe '/target_branch command from note' do
      context 'when the current user can change target branch' do
        it 'changes target branch from a note' do
          write_note("message start \n/target_branch merge-test\n message end.")

163
          wait_for_requests
164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183
          expect(page).not_to have_content('/target_branch')
          expect(page).to have_content('message start')
          expect(page).to have_content('message end.')

          expect(merge_request.reload.target_branch).to eq 'merge-test'
        end

        it 'does not fail when target branch does not exists' do
          write_note('/target_branch totally_not_existing_branch')

          expect(page).not_to have_content('/target_branch')

          expect(merge_request.target_branch).to eq 'feature'
        end
      end

      context 'when current user can not change target branch' do
        let(:guest) { create(:user) }
        before do
          project.team << [guest, :guest]
184
          gitlab_sign_out
185
          gitlab_sign_in(guest)
186
          visit project_merge_request_path(project, merge_request)
187 188 189 190 191 192 193 194 195 196 197
        end

        it 'does not change target branch' do
          write_note('/target_branch merge-test')

          expect(page).not_to have_content '/target_branch merge-test'

          expect(merge_request.target_branch).to eq 'feature'
        end
      end
    end
198 199
  end
end