merge_requests_spec.rb 21.9 KB
Newer Older
V
Valeriy Sizov 已提交
1 2
require "spec_helper"

J
Jeroen van Baarsen 已提交
3
describe API::API, api: true  do
V
Valeriy Sizov 已提交
4
  include ApiHelpers
S
Stan Hu 已提交
5
  let(:base_time) { Time.now }
6 7 8 9
  let(:user)      { create(:user) }
  let(:admin)     { create(:user, :admin) }
  let(:non_member)  { create(:user) }
  let!(:project)  { create(:project, creator_id: user.id, namespace: user.namespace) }
S
Stan Hu 已提交
10
  let!(:merge_request) { create(:merge_request, :simple, author: user, assignee: user, source_project: project, target_project: project, title: "Test", created_at: base_time) }
G
Gabriel Mazetto 已提交
11
  let!(:merge_request_closed) { create(:merge_request, state: "closed", author: user, assignee: user, source_project: project, target_project: project, title: "Closed test", created_at: base_time + 1.second) }
S
Stan Hu 已提交
12
  let!(:merge_request_merged) { create(:merge_request, state: "merged", author: user, assignee: user, source_project: project, target_project: project, title: "Merged test", created_at: base_time + 2.seconds) }
13
  let!(:note) { create(:note_on_merge_request, author: user, project: project, noteable: merge_request, note: "a comment on a MR") }
14
  let!(:note2) { create(:note_on_merge_request, author: user, project: project, noteable: merge_request, note: "another comment on a MR") }
15
  let(:milestone) { create(:milestone, title: '1.0.0', project: project) }
16 17

  before do
I
Izaak Alpert 已提交
18
    project.team << [user, :reporters]
19
  end
V
Valeriy Sizov 已提交
20 21 22 23

  describe "GET /projects/:id/merge_requests" do
    context "when unauthenticated" do
      it "should return authentication error" do
H
Hiroyuki Sato 已提交
24
        get api("/projects/#{project.id}/merge_requests")
25
        expect(response.status).to eq(401)
V
Valeriy Sizov 已提交
26 27 28 29
      end
    end

    context "when authenticated" do
30
      it "should return an array of all merge_requests" do
H
Hiroyuki Sato 已提交
31
        get api("/projects/#{project.id}/merge_requests", user)
32 33 34 35
        expect(response.status).to eq(200)
        expect(json_response).to be_an Array
        expect(json_response.length).to eq(3)
        expect(json_response.last['title']).to eq(merge_request.title)
V
Valeriy Sizov 已提交
36
      end
37

38 39
      it "should return an array of all merge_requests" do
        get api("/projects/#{project.id}/merge_requests?state", user)
40 41 42 43
        expect(response.status).to eq(200)
        expect(json_response).to be_an Array
        expect(json_response.length).to eq(3)
        expect(json_response.last['title']).to eq(merge_request.title)
44
      end
45

46 47
      it "should return an array of open merge_requests" do
        get api("/projects/#{project.id}/merge_requests?state=opened", user)
48 49 50 51
        expect(response.status).to eq(200)
        expect(json_response).to be_an Array
        expect(json_response.length).to eq(1)
        expect(json_response.last['title']).to eq(merge_request.title)
52
      end
53

54 55
      it "should return an array of closed merge_requests" do
        get api("/projects/#{project.id}/merge_requests?state=closed", user)
56 57
        expect(response.status).to eq(200)
        expect(json_response).to be_an Array
58 59
        expect(json_response.length).to eq(1)
        expect(json_response.first['title']).to eq(merge_request_closed.title)
60
      end
61

62 63
      it "should return an array of merged merge_requests" do
        get api("/projects/#{project.id}/merge_requests?state=merged", user)
64 65 66 67
        expect(response.status).to eq(200)
        expect(json_response).to be_an Array
        expect(json_response.length).to eq(1)
        expect(json_response.first['title']).to eq(merge_request_merged.title)
68
      end
69 70 71 72 73 74 75 76 77

      context "with ordering" do
        before do
          @mr_later = mr_with_later_created_and_updated_at_time
          @mr_earlier = mr_with_earlier_created_and_updated_at_time
        end

        it "should return an array of merge_requests in ascending order" do
          get api("/projects/#{project.id}/merge_requests?sort=asc", user)
78 79 80
          expect(response.status).to eq(200)
          expect(json_response).to be_an Array
          expect(json_response.length).to eq(3)
S
Stan Hu 已提交
81 82
          response_dates = json_response.map{ |merge_request| merge_request['created_at'] }
          expect(response_dates).to eq(response_dates.sort)
83
        end
D
Dmitriy Zaporozhets 已提交
84

85 86
        it "should return an array of merge_requests in descending order" do
          get api("/projects/#{project.id}/merge_requests?sort=desc", user)
87 88 89
          expect(response.status).to eq(200)
          expect(json_response).to be_an Array
          expect(json_response.length).to eq(3)
S
Stan Hu 已提交
90 91
          response_dates = json_response.map{ |merge_request| merge_request['created_at'] }
          expect(response_dates).to eq(response_dates.sort.reverse)
92
        end
D
Dmitriy Zaporozhets 已提交
93

94 95
        it "should return an array of merge_requests ordered by updated_at" do
          get api("/projects/#{project.id}/merge_requests?order_by=updated_at", user)
96 97 98
          expect(response.status).to eq(200)
          expect(json_response).to be_an Array
          expect(json_response.length).to eq(3)
S
Stan Hu 已提交
99 100
          response_dates = json_response.map{ |merge_request| merge_request['updated_at'] }
          expect(response_dates).to eq(response_dates.sort.reverse)
101
        end
D
Dmitriy Zaporozhets 已提交
102

103
        it "should return an array of merge_requests ordered by created_at" do
S
Stan Hu 已提交
104
          get api("/projects/#{project.id}/merge_requests?order_by=created_at&sort=asc", user)
105 106 107
          expect(response.status).to eq(200)
          expect(json_response).to be_an Array
          expect(json_response.length).to eq(3)
S
Stan Hu 已提交
108 109
          response_dates = json_response.map{ |merge_request| merge_request['created_at'] }
          expect(response_dates).to eq(response_dates.sort)
110
        end
111
      end
V
Valeriy Sizov 已提交
112 113 114
    end
  end

115
  describe "GET /projects/:id/merge_requests/:merge_request_id" do
V
Valeriy Sizov 已提交
116
    it "should return merge_request" do
117
      get api("/projects/#{project.id}/merge_requests/#{merge_request.id}", user)
118 119 120
      expect(response.status).to eq(200)
      expect(json_response['title']).to eq(merge_request.title)
      expect(json_response['iid']).to eq(merge_request.iid)
121
      expect(json_response['merge_status']).to eq('can_be_merged')
V
Valeriy Sizov 已提交
122
    end
123

124 125 126
    it 'should return merge_request by iid' do
      url = "/projects/#{project.id}/merge_requests?iid=#{merge_request.iid}"
      get api(url, user)
127 128 129
      expect(response.status).to eq 200
      expect(json_response.first['title']).to eq merge_request.title
      expect(json_response.first['id']).to eq merge_request.id
130 131
    end

132
    it "should return a 404 error if merge_request_id not found" do
133
      get api("/projects/#{project.id}/merge_requests/999", user)
134
      expect(response.status).to eq(404)
135
    end
V
Valeriy Sizov 已提交
136 137
  end

138
  describe 'GET /projects/:id/merge_requests/:merge_request_id/commits' do
139
    context 'valid merge request' do
140
      before { get api("/projects/#{project.id}/merge_requests/#{merge_request.id}/commits", user) }
141 142 143 144 145 146 147 148 149
      let(:commit) { merge_request.commits.first }

      it { expect(response.status).to eq 200 }
      it { expect(json_response.size).to eq(merge_request.commits.size) }
      it { expect(json_response.first['id']).to eq(commit.id) }
      it { expect(json_response.first['title']).to eq(commit.title) }
    end

    it 'returns a 404 when merge_request_id not found' do
150
      get api("/projects/#{project.id}/merge_requests/999/commits", user)
151 152 153 154
      expect(response.status).to eq(404)
    end
  end

155
  describe 'GET /projects/:id/merge_requests/:merge_request_id/changes' do
156
    it 'should return the change information of the merge_request' do
157
      get api("/projects/#{project.id}/merge_requests/#{merge_request.id}/changes", user)
158 159 160 161 162
      expect(response.status).to eq 200
      expect(json_response['changes'].size).to eq(merge_request.diffs.size)
    end

    it 'returns a 404 when merge_request_id not found' do
163
      get api("/projects/#{project.id}/merge_requests/999/changes", user)
164 165 166 167
      expect(response.status).to eq(404)
    end
  end

V
Valeriy Sizov 已提交
168
  describe "POST /projects/:id/merge_requests" do
I
Izaak Alpert 已提交
169 170
    context 'between branches projects' do
      it "should return merge_request" do
H
Hiroyuki Sato 已提交
171
        post api("/projects/#{project.id}/merge_requests", user),
172
             title: 'Test merge_request',
173
             source_branch: 'feature_conflict',
174 175
             target_branch: 'master',
             author: user,
176 177
             labels: 'label, label2',
             milestone_id: milestone.id
178 179 180
        expect(response.status).to eq(201)
        expect(json_response['title']).to eq('Test merge_request')
        expect(json_response['labels']).to eq(['label', 'label2'])
181
        expect(json_response['milestone']['id']).to eq(milestone.id)
I
Izaak Alpert 已提交
182
      end
183

I
Izaak Alpert 已提交
184
      it "should return 422 when source_branch equals target_branch" do
H
Hiroyuki Sato 已提交
185
        post api("/projects/#{project.id}/merge_requests", user),
186
        title: "Test merge_request", source_branch: "master", target_branch: "master", author: user
187
        expect(response.status).to eq(422)
I
Izaak Alpert 已提交
188
      end
189

I
Izaak Alpert 已提交
190
      it "should return 400 when source_branch is missing" do
H
Hiroyuki Sato 已提交
191
        post api("/projects/#{project.id}/merge_requests", user),
192
        title: "Test merge_request", target_branch: "master", author: user
193
        expect(response.status).to eq(400)
I
Izaak Alpert 已提交
194
      end
195

I
Izaak Alpert 已提交
196
      it "should return 400 when target_branch is missing" do
H
Hiroyuki Sato 已提交
197
        post api("/projects/#{project.id}/merge_requests", user),
198
        title: "Test merge_request", source_branch: "markdown", author: user
199
        expect(response.status).to eq(400)
I
Izaak Alpert 已提交
200 201 202
      end

      it "should return 400 when title is missing" do
H
Hiroyuki Sato 已提交
203
        post api("/projects/#{project.id}/merge_requests", user),
204
        target_branch: 'master', source_branch: 'markdown'
205
        expect(response.status).to eq(400)
I
Izaak Alpert 已提交
206
      end
207

R
Robert Schilling 已提交
208
      it 'should return 400 on invalid label names' do
209 210
        post api("/projects/#{project.id}/merge_requests", user),
             title: 'Test merge_request',
211
             source_branch: 'markdown',
212 213 214
             target_branch: 'master',
             author: user,
             labels: 'label, ?'
215 216
        expect(response.status).to eq(400)
        expect(json_response['message']['labels']['?']['title']).to eq(
R
Robert Schilling 已提交
217
          ['is invalid']
218
        )
219
      end
J
jubianchi 已提交
220 221 222 223 224

      context 'with existing MR' do
        before do
          post api("/projects/#{project.id}/merge_requests", user),
               title: 'Test merge_request',
225
               source_branch: 'feature_conflict',
J
jubianchi 已提交
226 227 228 229 230 231 232 233 234
               target_branch: 'master',
               author: user
          @mr = MergeRequest.all.last
        end

        it 'should return 409 when MR already exists for source/target' do
          expect do
            post api("/projects/#{project.id}/merge_requests", user),
                 title: 'New test merge_request',
235
                 source_branch: 'feature_conflict',
J
jubianchi 已提交
236 237 238
                 target_branch: 'master',
                 author: user
          end.to change { MergeRequest.count }.by(0)
239
          expect(response.status).to eq(409)
J
jubianchi 已提交
240 241
        end
      end
242
    end
243

I
Izaak Alpert 已提交
244
    context 'forked projects' do
D
Dmitriy Zaporozhets 已提交
245 246 247
      let!(:user2) { create(:user) }
      let!(:fork_project) { create(:project, forked_from_project: project,  namespace: user2.namespace, creator_id: user2.id) }
      let!(:unrelated_project) { create(:project,  namespace: create(:user).namespace, creator_id: user2.id) }
I
Izaak Alpert 已提交
248 249 250 251 252 253

      before :each do |each|
        fork_project.team << [user2, :reporters]
      end

      it "should return merge_request" do
H
Hiroyuki Sato 已提交
254
        post api("/projects/#{fork_project.id}/merge_requests", user2),
255 256
          title: 'Test merge_request', source_branch: "feature_conflict", target_branch: "master",
          author: user2, target_project_id: project.id, description: 'Test description for Test merge_request'
257 258 259
        expect(response.status).to eq(201)
        expect(json_response['title']).to eq('Test merge_request')
        expect(json_response['description']).to eq('Test description for Test merge_request')
I
Izaak Alpert 已提交
260 261 262
      end

      it "should not return 422 when source_branch equals target_branch" do
263 264 265
        expect(project.id).not_to eq(fork_project.id)
        expect(fork_project.forked?).to be_truthy
        expect(fork_project.forked_from_project).to eq(project)
H
Hiroyuki Sato 已提交
266
        post api("/projects/#{fork_project.id}/merge_requests", user2),
267
        title: 'Test merge_request', source_branch: "master", target_branch: "master", author: user2, target_project_id: project.id
268 269
        expect(response.status).to eq(201)
        expect(json_response['title']).to eq('Test merge_request')
I
Izaak Alpert 已提交
270 271 272
      end

      it "should return 400 when source_branch is missing" do
H
Hiroyuki Sato 已提交
273
        post api("/projects/#{fork_project.id}/merge_requests", user2),
274
        title: 'Test merge_request', target_branch: "master", author: user2, target_project_id: project.id
275
        expect(response.status).to eq(400)
I
Izaak Alpert 已提交
276 277 278
      end

      it "should return 400 when target_branch is missing" do
H
Hiroyuki Sato 已提交
279
        post api("/projects/#{fork_project.id}/merge_requests", user2),
280
        title: 'Test merge_request', target_branch: "master", author: user2, target_project_id: project.id
281
        expect(response.status).to eq(400)
I
Izaak Alpert 已提交
282 283 284
      end

      it "should return 400 when title is missing" do
H
Hiroyuki Sato 已提交
285
        post api("/projects/#{fork_project.id}/merge_requests", user2),
286
        target_branch: 'master', source_branch: 'markdown', author: user2, target_project_id: project.id
287
        expect(response.status).to eq(400)
I
Izaak Alpert 已提交
288 289
      end

J
jubianchi 已提交
290 291 292 293 294
      context 'when target_branch is specified' do
        it 'should return 422 if not a forked project' do
          post api("/projects/#{project.id}/merge_requests", user),
               title: 'Test merge_request',
               target_branch: 'master',
295
               source_branch: 'markdown',
J
jubianchi 已提交
296 297
               author: user,
               target_project_id: fork_project.id
298
          expect(response.status).to eq(422)
J
jubianchi 已提交
299
        end
I
Izaak Alpert 已提交
300

J
jubianchi 已提交
301 302 303 304
        it 'should return 422 if targeting a different fork' do
          post api("/projects/#{fork_project.id}/merge_requests", user2),
               title: 'Test merge_request',
               target_branch: 'master',
305
               source_branch: 'markdown',
J
jubianchi 已提交
306 307
               author: user2,
               target_project_id: unrelated_project.id
308
          expect(response.status).to eq(422)
J
jubianchi 已提交
309
        end
I
Izaak Alpert 已提交
310 311 312
      end

      it "should return 201 when target_branch is specified and for the same project" do
H
Hiroyuki Sato 已提交
313
        post api("/projects/#{fork_project.id}/merge_requests", user2),
314
        title: 'Test merge_request', target_branch: 'master', source_branch: 'markdown', author: user2, target_project_id: fork_project.id
315
        expect(response.status).to eq(201)
I
Izaak Alpert 已提交
316
      end
317
    end
V
Valeriy Sizov 已提交
318 319
  end

320 321 322
  describe "DELETE /projects/:id/merge_requests/:merge_request_id" do
    context "when the user is developer" do
      let(:developer) { create(:user) }
Z
Zeger-Jan van de Weg 已提交
323

324 325 326
      before do
        project.team << [developer, :developer]
      end
Z
Zeger-Jan van de Weg 已提交
327

328 329 330 331
      it "denies the deletion of the merge request" do
        delete api("/projects/#{project.id}/merge_requests/#{merge_request.id}", developer)
        expect(response.status).to be(403)
      end
Z
Zeger-Jan van de Weg 已提交
332
    end
333

334 335 336 337 338 339
    context "when the user is project owner" do
      it "destroys the merge request owners can destroy" do
        delete api("/projects/#{project.id}/merge_requests/#{merge_request.id}", user)

        expect(response.status).to eq(200)
      end
340
    end
Z
Zeger-Jan van de Weg 已提交
341 342
  end

343
  describe "PUT /projects/:id/merge_requests/:merge_request_id to close MR" do
A
Andrew8xx8 已提交
344
    it "should return merge_request" do
345
      put api("/projects/#{project.id}/merge_requests/#{merge_request.id}", user), state_event: "close"
346 347
      expect(response.status).to eq(200)
      expect(json_response['state']).to eq('closed')
A
Andrew8xx8 已提交
348 349 350
    end
  end

351
  describe "PUT /projects/:id/merge_requests/:merge_request_id/merge" do
Z
Zeger-Jan van de Weg 已提交
352
    let(:ci_commit) { create(:ci_commit_without_jobs) }
353

354
    it "should return merge_request in case of success" do
355
      put api("/projects/#{project.id}/merge_requests/#{merge_request.id}/merge", user)
356

357
      expect(response.status).to eq(200)
358 359
    end

360
    it "should return 406 if branch can't be merged" do
361 362 363
      allow_any_instance_of(MergeRequest).
        to receive(:can_be_merged?).and_return(false)

364
      put api("/projects/#{project.id}/merge_requests/#{merge_request.id}/merge", user)
365

366
      expect(response.status).to eq(406)
367
      expect(json_response['message']).to eq('Branch cannot be merged')
A
Andrew8xx8 已提交
368
    end
D
Dmitriy Zaporozhets 已提交
369 370 371

    it "should return 405 if merge_request is not open" do
      merge_request.close
372
      put api("/projects/#{project.id}/merge_requests/#{merge_request.id}/merge", user)
373 374
      expect(response.status).to eq(405)
      expect(json_response['message']).to eq('405 Method Not Allowed')
D
Dmitriy Zaporozhets 已提交
375 376
    end

377 378
    it "should return 405 if merge_request is a work in progress" do
      merge_request.update_attribute(:title, "WIP: #{merge_request.title}")
379
      put api("/projects/#{project.id}/merge_requests/#{merge_request.id}/merge", user)
380 381 382 383
      expect(response.status).to eq(405)
      expect(json_response['message']).to eq('405 Method Not Allowed')
    end

D
Dmitriy Zaporozhets 已提交
384 385 386
    it "should return 401 if user has no permissions to merge" do
      user2 = create(:user)
      project.team << [user2, :reporter]
387
      put api("/projects/#{project.id}/merge_requests/#{merge_request.id}/merge", user2)
388 389
      expect(response.status).to eq(401)
      expect(json_response['message']).to eq('401 Unauthorized')
D
Dmitriy Zaporozhets 已提交
390
    end
391 392 393 394 395

    it "enables merge when build succeeds if the ci is active" do
      allow_any_instance_of(MergeRequest).to receive(:ci_commit).and_return(ci_commit)
      allow(ci_commit).to receive(:active?).and_return(true)

396
      put api("/projects/#{project.id}/merge_requests/#{merge_request.id}/merge", user), merge_when_build_succeeds: true
397 398 399 400 401

      expect(response.status).to eq(200)
      expect(json_response['title']).to eq('Test')
      expect(json_response['merge_when_build_succeeds']).to eq(true)
    end
A
Andrew8xx8 已提交
402 403
  end

404
  describe "PUT /projects/:id/merge_requests/:merge_request_id" do
405
    it "updates title and returns merge_request" do
406
      put api("/projects/#{project.id}/merge_requests/#{merge_request.id}", user), title: "New title"
407 408
      expect(response.status).to eq(200)
      expect(json_response['title']).to eq('New title')
V
Valeriy Sizov 已提交
409
    end
410

411
    it "updates description and returns merge_request" do
412
      put api("/projects/#{project.id}/merge_requests/#{merge_request.id}", user), description: "New description"
413 414
      expect(response.status).to eq(200)
      expect(json_response['description']).to eq('New description')
415 416
    end

417 418 419 420 421 422
    it "updates milestone_id and returns merge_request" do
      put api("/projects/#{project.id}/merge_requests/#{merge_request.id}", user), milestone_id: milestone.id
      expect(response.status).to eq(200)
      expect(json_response['milestone']['id']).to eq(milestone.id)
    end

423
    it "should return 400 when source_branch is specified" do
424
      put api("/projects/#{project.id}/merge_requests/#{merge_request.id}", user),
425
      source_branch: "master", target_branch: "master"
426
      expect(response.status).to eq(400)
427 428 429
    end

    it "should return merge_request with renamed target_branch" do
430
      put api("/projects/#{project.id}/merge_requests/#{merge_request.id}", user), target_branch: "wiki"
431 432
      expect(response.status).to eq(200)
      expect(json_response['target_branch']).to eq('wiki')
433
    end
434

R
Robert Schilling 已提交
435
    it 'should return 400 on invalid label names' do
436
      put api("/projects/#{project.id}/merge_requests/#{merge_request.id}",
437 438 439
              user),
          title: 'new issue',
          labels: 'label, ?'
440 441
      expect(response.status).to eq(400)
      expect(json_response['message']['labels']['?']['title']).to eq(['is invalid'])
442
    end
V
Valeriy Sizov 已提交
443 444
  end

445
  describe "POST /projects/:id/merge_requests/:merge_request_id/comments" do
V
Valeriy Sizov 已提交
446
    it "should return comment" do
447 448
      original_count = merge_request.notes.size

449
      post api("/projects/#{project.id}/merge_requests/#{merge_request.id}/comments", user), note: "My comment"
450 451
      expect(response.status).to eq(201)
      expect(json_response['note']).to eq('My comment')
452 453 454
      expect(json_response['author']['name']).to eq(user.name)
      expect(json_response['author']['username']).to eq(user.username)
      expect(merge_request.notes.size).to eq(original_count + 1)
V
Valeriy Sizov 已提交
455
    end
456 457

    it "should return 400 if note is missing" do
458
      post api("/projects/#{project.id}/merge_requests/#{merge_request.id}/comments", user)
459
      expect(response.status).to eq(400)
460
    end
461 462

    it "should return 404 if note is attached to non existent merge request" do
463
      post api("/projects/#{project.id}/merge_requests/404/comments", user),
J
jubianchi 已提交
464
           note: 'My comment'
465
      expect(response.status).to eq(404)
466
    end
V
Valeriy Sizov 已提交
467
  end
468

469
  describe "GET :id/merge_requests/:merge_request_id/comments" do
470
    it "should return merge_request comments ordered by created_at" do
471
      get api("/projects/#{project.id}/merge_requests/#{merge_request.id}/comments", user)
472 473
      expect(response.status).to eq(200)
      expect(json_response).to be_an Array
474
      expect(json_response.length).to eq(2)
475 476
      expect(json_response.first['note']).to eq("a comment on a MR")
      expect(json_response.first['author']['id']).to eq(user.id)
477
      expect(json_response.last['note']).to eq("another comment on a MR")
478 479 480
    end

    it "should return a 404 error if merge_request_id not found" do
481
      get api("/projects/#{project.id}/merge_requests/999/comments", user)
482
      expect(response.status).to eq(404)
483 484
    end
  end
485

486 487 488 489 490 491
  describe 'GET :id/merge_requests/:merge_request_id/closes_issues' do
    it 'returns the issue that will be closed on merge' do
      issue = create(:issue, project: project)
      mr = merge_request.tap do |mr|
        mr.update_attribute(:description, "Closes #{issue.to_reference(mr.project)}")
      end
492

493
      get api("/projects/#{project.id}/merge_requests/#{mr.id}/closes_issues", user)
494 495 496 497 498 499
      expect(response.status).to eq(200)
      expect(json_response).to be_an Array
      expect(json_response.length).to eq(1)
      expect(json_response.first['id']).to eq(issue.id)
    end

500
    it 'returns an empty array when there are no issues to be closed' do
501 502 503 504 505 506 507
      get api("/projects/#{project.id}/merge_requests/#{merge_request.id}/closes_issues", user)
      expect(response.status).to eq(200)
      expect(json_response).to be_an Array
      expect(json_response.length).to eq(0)
    end
  end

508 509 510 511 512 513 514 515 516 517 518 519 520 521 522
  def mr_with_later_created_and_updated_at_time
    merge_request
    merge_request.created_at += 1.hour
    merge_request.updated_at += 30.minutes
    merge_request.save
    merge_request
  end

  def mr_with_earlier_created_and_updated_at_time
    merge_request_closed
    merge_request_closed.created_at -= 1.hour
    merge_request_closed.updated_at -= 30.minutes
    merge_request_closed.save
    merge_request_closed
  end
V
Valeriy Sizov 已提交
523
end