Welcome to mirror list, hosted at ThFree Co, Russian Federation.

user_edits_mr_spec.rb « merge_request « features « spec - gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: ab7183775b999b980d1614bde71933a14928014d (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
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
# frozen_string_literal: true

require 'spec_helper'

RSpec.describe 'Merge request > User edits MR', feature_category: :code_review_workflow do
  include ProjectForksHelper

  shared_examples 'an editable merge request with visible selected labels' do
    it 'updates merge request', :js do
      find('.js-assignee-search').click
      page.within '.dropdown-menu-user' do
        click_link user.name
      end
      expect(find('input[name="merge_request[assignee_ids][]"]', visible: false).value).to match(user.id.to_s)
      page.within '.js-assignee-search' do
        expect(page).to have_content user.name
      end

      find('.js-reviewer-search').click
      page.within '.dropdown-menu-user' do
        click_link user.name
      end
      expect(find('input[name="merge_request[reviewer_ids][]"]', visible: false).value).to match(user.id.to_s)
      page.within '.js-reviewer-search' do
        expect(page).to have_content user.name
      end

      click_button 'Select milestone'
      click_button milestone.title
      expect(find('input[name="merge_request[milestone_id]"]', visible: false).value).to match(milestone.id.to_s)
      expect(page).to have_button milestone.title

      click_button _('Select label')
      wait_for_all_requests
      page.within '[data-testid="sidebar-labels"]' do
        click_button label.title
        click_button label2.title
        click_button _('Close')
        wait_for_requests
        page.within('[data-testid="embedded-labels-list"]') do
          expect(page).to have_content(label.title)
          expect(page).to have_content(label2.title)
        end
      end

      click_button 'Save changes'

      page.within '.issuable-sidebar' do
        page.within '.assignee' do
          expect(page).to have_content user.name
        end

        page.within '.reviewer' do
          expect(page).to have_content user.name
        end

        page.within '.milestone' do
          expect(page).to have_content milestone.title
        end

        page.within '.labels' do
          expect(page).to have_content label.title
          expect(page).to have_content label2.title
        end
      end
    end

    it 'description has autocomplete', :js do
      find('#merge_request_description').native.send_keys('')
      fill_in 'merge_request_description', with: user.to_reference[0..4]

      page.within('.atwho-view') do
        expect(page).to have_content(user2.name)
      end
    end

    it 'description has quick action autocomplete', :js do
      find('#merge_request_description').native.send_keys('/')

      expect(page).to have_selector('.atwho-container')
    end

    it 'has class js-quick-submit in form' do
      expect(page).to have_selector('.js-quick-submit')
    end

    it 'warns about version conflict', :js do
      merge_request.update!(title: "New title")

      fill_in 'merge_request_title', with: 'bug 345'
      fill_in 'merge_request_description', with: 'bug description'

      click_button _('Save changes')

      expect(page).to have_content(
        format(
          _("Someone edited this %{model_name} at the same time you did. Please check out the %{link_to_model} and make sure your changes will not unintentionally remove theirs."), # rubocop:disable Layout/LineLength
          model_name: _('merge request'),
          link_to_model: _('merge request')
        )
      )
    end

    it 'preserves description textarea height', :js do
      long_description = %q(
        Lorem ipsum dolor sit amet, consectetur adipiscing elit.
        Etiam ac ornare ligula, ut tempus arcu.
        Etiam ultricies accumsan dolor vitae faucibus.
        Donec at elit lacus.
        Mauris orci ante, aliquam quis lorem eget, convallis faucibus arcu.
        Aenean at pulvinar lacus.
        Ut viverra quam massa, molestie ornare tortor dignissim a.
        Suspendisse tristique pellentesque tellus, id lacinia metus elementum id.
        Nam tristique, arcu rhoncus faucibus viverra, lacus ipsum sagittis ligula, vitae convallis odio lacus a nibh.
        Ut tincidunt est purus, ac vestibulum augue maximus in.
        Suspendisse vel erat et mi ultricies semper.
        Pellentesque volutpat pellentesque consequat.

        Cras congue nec ligula tristique viverra.
        Curabitur fringilla fringilla fringilla.
        Donec rhoncus dignissim orci ut accumsan.
        Ut rutrum urna a rhoncus varius.
        Maecenas blandit, mauris nec accumsan gravida, augue nibh finibus magna, sed maximus turpis libero nec neque
        Suspendisse at semper est.
        Nunc imperdiet dapibus dui, varius sollicitudin erat luctus non.
        Sed pellentesque ligula eget posuere facilisis.
        Donec dictum commodo volutpat.
        Donec egestas dui ac magna sollicitudin bibendum.
        Vivamus purus neque, ullamcorper ac feugiat et, tempus sit amet metus.
        Praesent quis viverra neque.
        Sed bibendum viverra est, eu aliquam mi ornare vitae.
        Proin et dapibus ipsum.
        Nunc tortor diam, malesuada nec interdum vel, placerat quis justo.
        Ut viverra at erat eu laoreet.

        Pellentesque commodo, diam sit amet dignissim condimentum, tortor justo pretium est,
        non venenatis metus eros ut nunc.
        Etiam ut neque eget sem dapibus aliquam.
        Curabitur vel elit lorem.
        Nulla nec enim elit.
        Sed ut ex id justo facilisis convallis at ac augue.
        Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae;
        Nullam cursus egestas turpis non tristique.
        Suspendisse in erat sem.
        Fusce libero elit, fermentum gravida mauris id, auctor iaculis felis.
        Nullam vulputate tempor laoreet.

        Nam tempor et magna sed convallis.
        Fusce sit amet sollicitudin risus, a ullamcorper lacus.
        Morbi gravida quis sem eget porttitor.
        Donec eu egestas mauris, in elementum tortor.
        Sed eget ex mi.
        Mauris iaculis tortor ut est auctor, nec dignissim quam sagittis.
        Suspendisse vel metus non quam suscipit tincidunt.
        Cras molestie lacus non justo finibus sodales quis vitae erat.
        In a porttitor nisi, id sollicitudin urna.
        Ut at felis tellus.
        Suspendisse potenti.

        Maecenas leo ligula, varius at neque vitae, ornare maximus justo.
        Nullam convallis luctus risus et vulputate.
        Duis suscipit faucibus iaculis.
        Etiam quis tortor faucibus, tristique tellus sit amet, sodales neque.
        Nulla dapibus nisi vel aliquet consequat.
        Etiam faucibus, metus eget condimentum iaculis, enim urna lobortis sem, id efficitur eros sapien nec nisi.
        Aenean ut finibus ex.
      )

      fill_in 'merge_request_description', with: long_description

      height = get_textarea_height
      click_button("Preview")
      click_button("Continue editing")
      new_height = get_textarea_height

      expect(height).to eq(new_height)
    end

    context 'when "Remove source branch" is set' do
      before do
        merge_request.update!(merge_params: { 'force_remove_source_branch' => '1' })
      end

      it 'allows to unselect "Remove source branch"', :js do
        expect(merge_request.merge_params['force_remove_source_branch']).to be_truthy

        begin
          visit edit_project_merge_request_path(target_project, merge_request)
        rescue Selenium::WebDriver::Error::UnexpectedAlertOpenError
        end

        uncheck 'Delete source branch when merge request is accepted'

        click_button 'Save changes'

        expect(page).to have_unchecked_field 'remove-source-branch-input'
        expect(page).to have_content 'Delete source branch'
      end
    end
  end

  before do
    stub_licensed_features(multiple_merge_request_assignees: false)
  end

  context 'with the visible_label_selection_on_metadata feature flag enabled' do
    before do
      stub_feature_flags(visible_label_selection_on_metadata: true)
    end

    context 'non-fork merge request' do
      include_context 'merge request edit context'
      it_behaves_like 'an editable merge request with visible selected labels'
    end

    context 'for a forked project' do
      let(:source_project) { fork_project(target_project, nil, repository: true) }

      include_context 'merge request edit context'
      it_behaves_like 'an editable merge request with visible selected labels'
    end
  end

  context 'with the visible_label_selection_on_metadata feature flag disabled' do
    before do
      stub_feature_flags(visible_label_selection_on_metadata: false)
    end

    context 'non-fork merge request' do
      include_context 'merge request edit context'
      it_behaves_like 'an editable merge request'
    end

    context 'for a forked project' do
      let(:source_project) { fork_project(target_project, nil, repository: true) }

      include_context 'merge request edit context'
      it_behaves_like 'an editable merge request'
    end
  end
end