diff options
author | Oswaldo Ferreira <oswaldo@gitlab.com> | 2019-02-08 19:25:26 -0200 |
---|---|---|
committer | Oswaldo Ferreira <oswaldo@gitlab.com> | 2019-02-26 12:37:32 -0300 |
commit | e8fbc070e01b0c527c66d803f9be813b4c2cdc0a (patch) | |
tree | a6a3c832c9582d8d23b240403e33d6729e304d80 /spec/requests | |
parent | d133bd7fb487dbba62de1dadce1d21e991c9a295 (diff) | |
download | gitlab-ce-e8fbc070e01b0c527c66d803f9be813b4c2cdc0a.tar.gz |
Add API support for refreshing merge ref path
Add a merge_requests/:iid/merge_to_ref API which make
use of the groundwork to write merge results into
refs/merge-requests/:iid/merge.
Diffstat (limited to 'spec/requests')
-rw-r--r-- | spec/requests/api/merge_requests_spec.rb | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/spec/requests/api/merge_requests_spec.rb b/spec/requests/api/merge_requests_spec.rb index b4cd3130dc5..273c52bd719 100644 --- a/spec/requests/api/merge_requests_spec.rb +++ b/spec/requests/api/merge_requests_spec.rb @@ -1001,6 +1001,67 @@ describe API::MergeRequests do end end + describe "PUT /projects/:id/merge_requests/:merge_request_iid/merge_to_ref" do + let(:pipeline) { create(:ci_pipeline_without_jobs) } + let(:url) do + "/projects/#{project.id}/merge_requests/#{merge_request.iid}/merge_to_ref" + end + + it 'returns the generated ID from the merge service in case of success' do + put api(url, user), params: { merge_commit_message: 'Custom message' } + + commit = project.commit(json_response['commit_id']) + + expect(response).to have_gitlab_http_status(200) + expect(json_response['commit_id']).to be_present + expect(commit.message).to eq('Custom message') + end + + it "returns 400 if branch can't be merged" do + merge_request.update!(state: 'merged') + + put api(url, user) + + expect(response).to have_gitlab_http_status(400) + expect(json_response['message']) + .to eq("Merge request is not mergeable to #{merge_request.merge_ref_path}") + end + + it 'returns 403 if user has no permissions to merge to the ref' do + user2 = create(:user) + project.add_reporter(user2) + + put api(url, user2) + + expect(response).to have_gitlab_http_status(403) + expect(json_response['message']).to eq('403 Forbidden') + end + + it 'returns 404 for an invalid merge request IID' do + put api("/projects/#{project.id}/merge_requests/12345/merge_to_ref", user) + + expect(response).to have_gitlab_http_status(404) + end + + it "returns 404 if the merge request id is used instead of iid" do + put api("/projects/#{project.id}/merge_requests/#{merge_request.id}/merge", user) + + expect(response).to have_gitlab_http_status(404) + end + + it "returns 400 when merge method is not supported" do + merge_request.project.update!(merge_method: 'ff') + + put api(url, user) + + expected_error = + 'Fast-forward to refs/merge-requests/1/merge is currently not supported.' + + expect(response).to have_gitlab_http_status(400) + expect(json_response['message']).to eq(expected_error) + end + end + describe "PUT /projects/:id/merge_requests/:merge_request_iid" do context "to close a MR" do it "returns merge_request" do |