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

3
describe API::API do
V
Valeriy Sizov 已提交
4
  include ApiHelpers
5 6
  before(:each) { ActiveRecord::Base.observers.enable(:user_observer) }
  after(:each) { ActiveRecord::Base.observers.disable(:user_observer) }
I
Izaak Alpert 已提交
7
  let(:user) { create(:user) }
D
Dmitriy Zaporozhets 已提交
8
  let!(:project) {create(:project, creator_id: user.id, namespace: user.namespace) }
D
Dmitriy Zaporozhets 已提交
9
  let!(:merge_request) { create(:merge_request, :simple, author: user, assignee: user, source_project: project, target_project: project, title: "Test") }
10
  let!(:note) { create(:note_on_merge_request, author: user, project: project, noteable: merge_request, note: "a comment on a MR") }
I
Izaak Alpert 已提交
11 12 13
  before {
    project.team << [user, :reporters]
  }
V
Valeriy Sizov 已提交
14 15 16 17

  describe "GET /projects/:id/merge_requests" do
    context "when unauthenticated" do
      it "should return authentication error" do
H
Hiroyuki Sato 已提交
18
        get api("/projects/#{project.id}/merge_requests")
V
Valeriy Sizov 已提交
19 20 21 22 23 24
        response.status.should == 401
      end
    end

    context "when authenticated" do
      it "should return an array of merge_requests" do
H
Hiroyuki Sato 已提交
25
        get api("/projects/#{project.id}/merge_requests", user)
V
Valeriy Sizov 已提交
26 27 28 29 30 31 32 33 34
        response.status.should == 200
        json_response.should be_an Array
        json_response.first['title'].should == merge_request.title
      end
    end
  end

  describe "GET /projects/:id/merge_request/:merge_request_id" do
    it "should return merge_request" do
H
Hiroyuki Sato 已提交
35
      get api("/projects/#{project.id}/merge_request/#{merge_request.id}", user)
V
Valeriy Sizov 已提交
36 37
      response.status.should == 200
      json_response['title'].should == merge_request.title
38
      json_response['iid'].should == merge_request.iid
V
Valeriy Sizov 已提交
39
    end
40 41

    it "should return a 404 error if merge_request_id not found" do
H
Hiroyuki Sato 已提交
42
      get api("/projects/#{project.id}/merge_request/999", user)
43 44
      response.status.should == 404
    end
V
Valeriy Sizov 已提交
45 46 47
  end

  describe "POST /projects/:id/merge_requests" do
I
Izaak Alpert 已提交
48 49
    context 'between branches projects' do
      it "should return merge_request" do
H
Hiroyuki Sato 已提交
50
        post api("/projects/#{project.id}/merge_requests", user),
51
        title: 'Test merge_request', source_branch: "stable", target_branch: "master", author: user
I
Izaak Alpert 已提交
52 53 54
        response.status.should == 201
        json_response['title'].should == 'Test merge_request'
      end
55

I
Izaak Alpert 已提交
56
      it "should return 422 when source_branch equals target_branch" do
H
Hiroyuki Sato 已提交
57
        post api("/projects/#{project.id}/merge_requests", user),
58
        title: "Test merge_request", source_branch: "master", target_branch: "master", author: user
I
Izaak Alpert 已提交
59 60
        response.status.should == 422
      end
61

I
Izaak Alpert 已提交
62
      it "should return 400 when source_branch is missing" do
H
Hiroyuki Sato 已提交
63
        post api("/projects/#{project.id}/merge_requests", user),
64
        title: "Test merge_request", target_branch: "master", author: user
I
Izaak Alpert 已提交
65 66
        response.status.should == 400
      end
67

I
Izaak Alpert 已提交
68
      it "should return 400 when target_branch is missing" do
H
Hiroyuki Sato 已提交
69
        post api("/projects/#{project.id}/merge_requests", user),
70
        title: "Test merge_request", source_branch: "stable", author: user
I
Izaak Alpert 已提交
71 72 73 74
        response.status.should == 400
      end

      it "should return 400 when title is missing" do
H
Hiroyuki Sato 已提交
75
        post api("/projects/#{project.id}/merge_requests", user),
76
        target_branch: 'master', source_branch: 'stable'
I
Izaak Alpert 已提交
77 78
        response.status.should == 400
      end
79
    end
80

I
Izaak Alpert 已提交
81
    context 'forked projects' do
D
Dmitriy Zaporozhets 已提交
82 83 84
      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 已提交
85 86 87 88 89 90

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

      it "should return merge_request" do
H
Hiroyuki Sato 已提交
91
        post api("/projects/#{fork_project.id}/merge_requests", user2),
92
        title: 'Test merge_request', source_branch: "stable", target_branch: "master", author: user2, target_project_id: project.id, description: 'Test description for Test merge_request'
I
Izaak Alpert 已提交
93 94
        response.status.should == 201
        json_response['title'].should == 'Test merge_request'
95
        json_response['description'].should == 'Test description for Test merge_request'
I
Izaak Alpert 已提交
96 97 98
      end

      it "should not return 422 when source_branch equals target_branch" do
H
Hiroyuki Sato 已提交
99
        project.id.should_not == fork_project.id
I
Izaak Alpert 已提交
100 101
        fork_project.forked?.should be_true
        fork_project.forked_from_project.should == project
H
Hiroyuki Sato 已提交
102
        post api("/projects/#{fork_project.id}/merge_requests", user2),
103
        title: 'Test merge_request', source_branch: "master", target_branch: "master", author: user2, target_project_id: project.id
I
Izaak Alpert 已提交
104 105 106 107 108
        response.status.should == 201
        json_response['title'].should == 'Test merge_request'
      end

      it "should return 400 when source_branch is missing" do
H
Hiroyuki Sato 已提交
109
        post api("/projects/#{fork_project.id}/merge_requests", user2),
110
        title: 'Test merge_request', target_branch: "master", author: user2, target_project_id: project.id
I
Izaak Alpert 已提交
111 112 113 114
        response.status.should == 400
      end

      it "should return 400 when target_branch is missing" do
H
Hiroyuki Sato 已提交
115
        post api("/projects/#{fork_project.id}/merge_requests", user2),
116
        title: 'Test merge_request', target_branch: "master", author: user2, target_project_id: project.id
I
Izaak Alpert 已提交
117 118 119 120
        response.status.should == 400
      end

      it "should return 400 when title is missing" do
H
Hiroyuki Sato 已提交
121
        post api("/projects/#{fork_project.id}/merge_requests", user2),
122
        target_branch: 'master', source_branch: 'stable', author: user2, target_project_id: project.id
I
Izaak Alpert 已提交
123 124 125
        response.status.should == 400
      end

D
Dmitriy Zaporozhets 已提交
126
      it "should return 404 when target_branch is specified and not a forked project" do
H
Hiroyuki Sato 已提交
127
        post api("/projects/#{project.id}/merge_requests", user),
128
        title: 'Test merge_request', target_branch: 'master', source_branch: 'stable', author: user, target_project_id: fork_project.id
D
Dmitriy Zaporozhets 已提交
129
        response.status.should == 404
I
Izaak Alpert 已提交
130
      end
I
Izaak Alpert 已提交
131

D
Dmitriy Zaporozhets 已提交
132
      it "should return 404 when target_branch is specified and for a different fork" do
H
Hiroyuki Sato 已提交
133
        post api("/projects/#{fork_project.id}/merge_requests", user2),
134
        title: 'Test merge_request', target_branch: 'master', source_branch: 'stable', author: user2, target_project_id: unrelated_project.id
D
Dmitriy Zaporozhets 已提交
135
        response.status.should == 404
I
Izaak Alpert 已提交
136 137 138
      end

      it "should return 201 when target_branch is specified and for the same project" do
H
Hiroyuki Sato 已提交
139
        post api("/projects/#{fork_project.id}/merge_requests", user2),
140
        title: 'Test merge_request', target_branch: 'master', source_branch: 'stable', author: user2, target_project_id: fork_project.id
I
Izaak Alpert 已提交
141 142
        response.status.should == 201
      end
143
    end
V
Valeriy Sizov 已提交
144 145
  end

A
Andrew8xx8 已提交
146 147
  describe "PUT /projects/:id/merge_request/:merge_request_id to close MR" do
    it "should return merge_request" do
H
Hiroyuki Sato 已提交
148
      put api("/projects/#{project.id}/merge_request/#{merge_request.id}", user), state_event: "close"
A
Andrew8xx8 已提交
149 150 151 152 153 154 155
      response.status.should == 200
      json_response['state'].should == 'closed'
    end
  end

  describe "PUT /projects/:id/merge_request/:merge_request_id to merge MR" do
    it "should return merge_request" do
H
Hiroyuki Sato 已提交
156
      put api("/projects/#{project.id}/merge_request/#{merge_request.id}", user), state_event: "merge"
A
Andrew8xx8 已提交
157 158 159 160 161
      response.status.should == 200
      json_response['state'].should == 'merged'
    end
  end

V
Valeriy Sizov 已提交
162 163
  describe "PUT /projects/:id/merge_request/:merge_request_id" do
    it "should return merge_request" do
H
Hiroyuki Sato 已提交
164
      put api("/projects/#{project.id}/merge_request/#{merge_request.id}", user), title: "New title"
V
Valeriy Sizov 已提交
165
      response.status.should == 200
166
      json_response['title'].should == 'New title'
V
Valeriy Sizov 已提交
167
    end
168

169 170 171 172 173 174
    it "should return merge_request" do
      put api("/projects/#{project.id}/merge_request/#{merge_request.id}", user), description: "New description"
      response.status.should == 200
      json_response['description'].should == 'New description'
    end

175
    it "should return 422 when source_branch and target_branch are renamed the same" do
H
Hiroyuki Sato 已提交
176
      put api("/projects/#{project.id}/merge_request/#{merge_request.id}", user),
177
      source_branch: "master", target_branch: "master"
178 179 180 181
      response.status.should == 422
    end

    it "should return merge_request with renamed target_branch" do
H
Hiroyuki Sato 已提交
182
      put api("/projects/#{project.id}/merge_request/#{merge_request.id}", user), target_branch: "wiki"
183
      response.status.should == 200
I
Izaak Alpert 已提交
184
      json_response['target_branch'].should == 'wiki'
185
    end
V
Valeriy Sizov 已提交
186 187 188 189
  end

  describe "POST /projects/:id/merge_request/:merge_request_id/comments" do
    it "should return comment" do
H
Hiroyuki Sato 已提交
190
      post api("/projects/#{project.id}/merge_request/#{merge_request.id}/comments", user), note: "My comment"
V
Valeriy Sizov 已提交
191
      response.status.should == 201
192
      json_response['note'].should == 'My comment'
V
Valeriy Sizov 已提交
193
    end
194 195

    it "should return 400 if note is missing" do
H
Hiroyuki Sato 已提交
196
      post api("/projects/#{project.id}/merge_request/#{merge_request.id}/comments", user)
197 198
      response.status.should == 400
    end
199 200

    it "should return 404 if note is attached to non existent merge request" do
H
Hiroyuki Sato 已提交
201
      post api("/projects/#{project.id}/merge_request/111/comments", user), note: "My comment"
202 203
      response.status.should == 404
    end
V
Valeriy Sizov 已提交
204
  end
205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220

  describe "GET :id/merge_request/:merge_request_id/comments" do
    it "should return merge_request comments" do
      get api("/projects/#{project.id}/merge_request/#{merge_request.id}/comments", user)
      response.status.should == 200
      json_response.should be_an Array
      json_response.length.should == 1
      json_response.first['note'].should == "a comment on a MR"
      json_response.first['author']['id'].should == user.id
    end

    it "should return a 404 error if merge_request_id not found" do
      get api("/projects/#{project.id}/merge_request/999/comments", user)
      response.status.should == 404
    end
  end
V
Valeriy Sizov 已提交
221
end