summaryrefslogtreecommitdiff
path: root/spec/features/merge_requests/update_merge_requests_spec.rb
blob: d0418c74699bc53e01bcb2a89bbbc7fdaa846a0d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
require 'rails_helper'

feature 'Multiple merge requests updating from merge_requests#index', feature: true do
  let!(:user)    { create(:user)}
  let!(:project) { create(:project) }
  let!(:merge_request) { create(:merge_request, source_project: project, target_project: project) }

  before do
    project.team << [user, :master]
    gitlab_sign_in(user)
  end

  context 'status', js: true do
    describe 'close merge request' do
      before do
        visit namespace_project_merge_requests_path(project.namespace, project)
      end

      it 'closes merge request' do
        change_status('Closed')

        expect(page).to have_selector('.merge-request', count: 0)
      end
    end

    describe 'reopen merge request' do
      before do
        merge_request.close
        visit namespace_project_merge_requests_path(project.namespace, project, state: 'closed')
      end

      it 'reopens merge request' do
        change_status('Open')

        expect(page).to have_selector('.merge-request', count: 0)
      end
    end
  end

  context 'assignee', js: true do
    describe 'set assignee' do
      before do
        visit namespace_project_merge_requests_path(project.namespace, project)
      end

      it "updates merge request with assignee" do
        change_assignee(user.name)

        page.within('.merge-request .controls') do
          expect(find('.author_link')["title"]).to have_content(user.name)
        end
      end
    end

    describe 'remove assignee' do
      before do
        merge_request.assignee = user
        merge_request.save
        visit namespace_project_merge_requests_path(project.namespace, project)
      end

      it "removes assignee from the merge request" do
        change_assignee('Unassigned')

        expect(find('.merge-request .controls')).not_to have_css('.author_link')
      end
    end
  end

  context 'milestone', js: true do
    let(:milestone)  { create(:milestone, project: project) }

    describe 'set milestone' do
      before do
        visit namespace_project_merge_requests_path(project.namespace, project)
      end

      it "updates merge request with milestone" do
        change_milestone(milestone.title)

        expect(find('.merge-request')).to have_content milestone.title
      end
    end

    describe 'unset milestone' do
      before do
        merge_request.milestone = milestone
        merge_request.save
        visit namespace_project_merge_requests_path(project.namespace, project)
      end

      it "removes milestone from the merge request" do
        change_milestone("No Milestone")

        expect(find('.merge-request')).not_to have_content milestone.title
      end
    end
  end

  def change_status(text)
    click_button 'Edit Merge Requests'
    find('#check-all-issues').click
    find('.js-issue-status').click
    find('.dropdown-menu-status a', text: text).click
    click_update_merge_requests_button
  end

  def change_assignee(text)
    click_button 'Edit Merge Requests'
    find('#check-all-issues').click
    find('.js-update-assignee').click
    wait_for_requests

    page.within '.dropdown-menu-user' do
      click_link text
    end

    click_update_merge_requests_button
  end

  def change_milestone(text)
    click_button 'Edit Merge Requests'
    find('#check-all-issues').click
    find('.issues-bulk-update .js-milestone-select').click
    find('.dropdown-menu-milestone a', text: text).click
    click_update_merge_requests_button
  end

  def click_update_merge_requests_button
    find('.update-selected-issues').click
    wait_for_requests
  end
end