diff options
Diffstat (limited to 'spec/requests/api/merge_requests_spec.rb')
-rw-r--r-- | spec/requests/api/merge_requests_spec.rb | 120 |
1 files changed, 89 insertions, 31 deletions
diff --git a/spec/requests/api/merge_requests_spec.rb b/spec/requests/api/merge_requests_spec.rb index 5bf228a7448..7e5bf29788d 100644 --- a/spec/requests/api/merge_requests_spec.rb +++ b/spec/requests/api/merge_requests_spec.rb @@ -3,10 +3,12 @@ require "spec_helper" describe API::API do include ApiHelpers - let(:user) { create(:user ) } - let!(:project) { create(:project_with_code, creator_id: user.id) } - let!(:merge_request) { create(:merge_request, author: user, assignee: user, project: project, title: "Test") } - before { project.team << [user, :reporters] } + let(:user) { create(:user) } + let!(:project) {create(:project_with_code, creator_id: user.id) } + let!(:merge_request) { create(:merge_request, author: user, assignee: user, source_project: project, target_project: project, title: "Test") } + before { + project.team << [user, :reporters] + } describe "GET /projects/:id/merge_requests" do context "when unauthenticated" do @@ -40,35 +42,91 @@ describe API::API do end describe "POST /projects/:id/merge_requests" do - it "should return merge_request" do - post api("/projects/#{project.id}/merge_requests", user), - title: 'Test merge_request', source_branch: "stable", target_branch: "master", author: user - response.status.should == 201 - json_response['title'].should == 'Test merge_request' - end + context 'between branches projects' do + it "should return merge_request" do + post api("/projects/#{project.id}/merge_requests", user), + title: 'Test merge_request', source_branch: "stable", target_branch: "master", author: user + response.status.should == 201 + json_response['title'].should == 'Test merge_request' + end - it "should return 422 when source_branch equals target_branch" do - post api("/projects/#{project.id}/merge_requests", user), - title: "Test merge_request", source_branch: "master", target_branch: "master", author: user - response.status.should == 422 - end + it "should return 422 when source_branch equals target_branch" do + post api("/projects/#{project.id}/merge_requests", user), + title: "Test merge_request", source_branch: "master", target_branch: "master", author: user + response.status.should == 422 + end - it "should return 400 when source_branch is missing" do - post api("/projects/#{project.id}/merge_requests", user), - title: "Test merge_request", target_branch: "master", author: user - response.status.should == 400 - end + it "should return 400 when source_branch is missing" do + post api("/projects/#{project.id}/merge_requests", user), + title: "Test merge_request", target_branch: "master", author: user + response.status.should == 400 + end - it "should return 400 when target_branch is missing" do - post api("/projects/#{project.id}/merge_requests", user), - title: "Test merge_request", source_branch: "stable", author: user - response.status.should == 400 + it "should return 400 when target_branch is missing" do + post api("/projects/#{project.id}/merge_requests", user), + title: "Test merge_request", source_branch: "stable", author: user + response.status.should == 400 + end + + it "should return 400 when title is missing" do + post api("/projects/#{project.id}/merge_requests", user), + target_branch: 'master', source_branch: 'stable' + response.status.should == 400 + end end - it "should return 400 when title is missing" do - post api("/projects/#{project.id}/merge_requests", user), - target_branch: 'master', source_branch: 'stable' - response.status.should == 400 + context 'forked projects' do + let!(:user2) {create(:user)} + let!(:forked_project_link) { build(:forked_project_link) } + let!(:fork_project) { create(:source_project_with_code, forked_project_link: forked_project_link, namespace: user2.namespace, creator_id: user2.id) } + + before :each do |each| + fork_project.team << [user2, :reporters] + forked_project_link.forked_from_project = project + forked_project_link.forked_to_project = fork_project + forked_project_link.save! + end + + it "should return merge_request" do + post api("/projects/#{fork_project.id}/merge_requests", user2), + title: 'Test merge_request', source_branch: "stable", target_branch: "master", author: user2, target_project_id: project.id + response.status.should == 201 + json_response['title'].should == 'Test merge_request' + end + + it "should not return 422 when source_branch equals target_branch" do + project.id.should_not == fork_project.id + fork_project.forked?.should be_true + fork_project.forked_from_project.should == project + post api("/projects/#{fork_project.id}/merge_requests", user2), + title: 'Test merge_request', source_branch: "master", target_branch: "master", author: user2, target_project_id: project.id + response.status.should == 201 + json_response['title'].should == 'Test merge_request' + end + + it "should return 400 when source_branch is missing" do + post api("/projects/#{fork_project.id}/merge_requests", user2), + title: 'Test merge_request', target_branch: "master", author: user2, target_project_id: project.id + response.status.should == 400 + end + + it "should return 400 when target_branch is missing" do + post api("/projects/#{fork_project.id}/merge_requests", user2), + title: 'Test merge_request', target_branch: "master", author: user2, target_project_id: project.id + response.status.should == 400 + end + + it "should return 400 when title is missing" do + post api("/projects/#{fork_project.id}/merge_requests", user2), + target_branch: 'master', source_branch: 'stable', author: user2, target_project_id: project.id + response.status.should == 400 + end + + it "should return 400 when target_branch is specified and not a forked project" do + post api("/projects/#{project.id}/merge_requests", user), + target_branch: 'master', source_branch: 'stable', author: user, target_project: fork_project.id + response.status.should == 400 + end end end @@ -97,14 +155,14 @@ describe API::API do it "should return 422 when source_branch and target_branch are renamed the same" do put api("/projects/#{project.id}/merge_request/#{merge_request.id}", user), - source_branch: "master", target_branch: "master" + source_branch: "master", target_branch: "master" response.status.should == 422 end it "should return merge_request with renamed target_branch" do - put api("/projects/#{project.id}/merge_request/#{merge_request.id}", user), target_branch: "test" + put api("/projects/#{project.id}/merge_request/#{merge_request.id}", user), target_branch: "wiki" response.status.should == 200 - json_response['target_branch'].should == 'test' + json_response['target_branch'].should == 'wiki' end end |