diff --git a/lib/gitlab/client/merge_requests.rb b/lib/gitlab/client/merge_requests.rb index 0ebcd1595..e39c8b693 100644 --- a/lib/gitlab/client/merge_requests.rb +++ b/lib/gitlab/client/merge_requests.rb @@ -273,5 +273,30 @@ def update_merge_request_discussion_note(project, merge_request_id, discussion_i def delete_merge_request_discussion_note(project, merge_request_id, discussion_id, note_id) delete("/projects/#{url_encode project}/merge_requests/#{merge_request_id}/discussions/#{discussion_id}/notes/#{note_id}") end + + # Gets a list of merge request diff versions + # + # @example + # Gitlab.merge_request_versions(5, 1) + # Gitlab.merge_request_versions('gitlab', 1) + # @param [Integer, String] project The ID or name of a project. + # @param [Integer] id The ID of a merge request. + # @return [Gitlab::ObjectifiedHash] A list of the merge request versions. + def merge_request_diff_versions(project, merge_request_id) + get("/projects/#{url_encode project}/merge_requests/#{merge_request_id}/versions") + end + + # Gets the diff a single merge request diff version\ + # + # @example + # Gitlab.merge_request_diff_version(5, 1, 1) + # Gitlab.merge_request_diff_version('gitlab', 1, 1) + # @param [Integer, String] project The ID or name of a project. + # @param [Integer] id The ID of a merge request. + # @param [Integer] id The ID of a merge request diff version. + # @return [Gitlab::ObjectifiedHash] Record of the specific diff + def merge_request_diff_version(project, merge_request_id, version_id) + get("/projects/#{url_encode project}/merge_requests/#{merge_request_id}/versions/#{version_id}") + end end end diff --git a/spec/fixtures/merge_request_diff_version.json b/spec/fixtures/merge_request_diff_version.json new file mode 100644 index 000000000..91df5ca98 --- /dev/null +++ b/spec/fixtures/merge_request_diff_version.json @@ -0,0 +1,45 @@ +{ + "id": 110, + "head_commit_sha": "33e2ee8579fda5bc36accc9c6fbd0b4fefda9e30", + "base_commit_sha": "eeb57dffe83deb686a60a71c16c32f71046868fd", + "start_commit_sha": "eeb57dffe83deb686a60a71c16c32f71046868fd", + "created_at": "2016-07-26T14:44:48.926Z", + "merge_request_id": 105, + "state": "collected", + "real_size": "1", + "commits": [{ + "id": "33e2ee8579fda5bc36accc9c6fbd0b4fefda9e30", + "short_id": "33e2ee85", + "title": "Change year to 2018", + "author_name": "Administrator", + "author_email": "admin@example.com", + "created_at": "2016-07-26T17:44:29.000+03:00", + "message": "Change year to 2018" + }, { + "id": "aa24655de48b36335556ac8a3cd8bb521f977cbd", + "short_id": "aa24655d", + "title": "Update LICENSE", + "author_name": "Administrator", + "author_email": "admin@example.com", + "created_at": "2016-07-25T17:21:53.000+03:00", + "message": "Update LICENSE" + }, { + "id": "3eed087b29835c48015768f839d76e5ea8f07a24", + "short_id": "3eed087b", + "title": "Add license", + "author_name": "Administrator", + "author_email": "admin@example.com", + "created_at": "2016-07-25T17:21:20.000+03:00", + "message": "Add license" + }], + "diffs": [{ + "old_path": "LICENSE", + "new_path": "LICENSE", + "a_mode": "0", + "b_mode": "100644", + "diff": "--- /dev/null\n+++ b/LICENSE\n@@ -0,0 +1,21 @@\n+The MIT License (MIT)\n+\n+Copyright (c) 2018 Administrator\n+\n+Permission is hereby granted, free of charge, to any person obtaining a copy\n+of this software and associated documentation files (the \"Software\"), to deal\n+in the Software without restriction, including without limitation the rights\n+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n+copies of the Software, and to permit persons to whom the Software is\n+furnished to do so, subject to the following conditions:\n+\n+The above copyright notice and this permission notice shall be included in all\n+copies or substantial portions of the Software.\n+\n+THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n+SOFTWARE.\n", + "new_file": true, + "renamed_file": false, + "deleted_file": false + }] +} diff --git a/spec/fixtures/merge_request_diff_versions.json b/spec/fixtures/merge_request_diff_versions.json new file mode 100644 index 000000000..48ede0eba --- /dev/null +++ b/spec/fixtures/merge_request_diff_versions.json @@ -0,0 +1,19 @@ +[{ + "id": 110, + "head_commit_sha": "33e2ee8579fda5bc36accc9c6fbd0b4fefda9e30", + "base_commit_sha": "eeb57dffe83deb686a60a71c16c32f71046868fd", + "start_commit_sha": "eeb57dffe83deb686a60a71c16c32f71046868fd", + "created_at": "2016-07-26T14:44:48.926Z", + "merge_request_id": 105, + "state": "collected", + "real_size": "1" +}, { + "id": 108, + "head_commit_sha": "3eed087b29835c48015768f839d76e5ea8f07a24", + "base_commit_sha": "eeb57dffe83deb686a60a71c16c32f71046868fd", + "start_commit_sha": "eeb57dffe83deb686a60a71c16c32f71046868fd", + "created_at": "2016-07-25T14:21:33.028Z", + "merge_request_id": 105, + "state": "collected", + "real_size": "1" +}] diff --git a/spec/gitlab/client/merge_requests_spec.rb b/spec/gitlab/client/merge_requests_spec.rb index c28afabbf..7af1a3c60 100644 --- a/spec/gitlab/client/merge_requests_spec.rb +++ b/spec/gitlab/client/merge_requests_spec.rb @@ -348,4 +348,36 @@ expect(@note).to be_falsy end end + + describe '.merge_request_diff_versions' do + before do + stub_get('/projects/3/merge_requests/105/versions', 'merge_request_diff_versions') + @versions = Gitlab.merge_request_diff_versions(3, 105) + end + + it 'gets the correct resource' do + expect(a_get('/projects/3/merge_requests/105/versions')).to have_been_made + end + + it 'returns an array of the versions' do + expect(@versions.length).to eq(2) + expect(@versions.first.head_commit_sha).to eq('33e2ee8579fda5bc36accc9c6fbd0b4fefda9e30') + end + end + + describe '.merge_request_diff_version' do + before do + stub_get('/projects/3/merge_requests/105/versions/1', 'merge_request_diff_version') + @diff = Gitlab.merge_request_diff_version(3, 105, 1) + end + + it 'gets the correct resource' do + expect(a_get('/projects/3/merge_requests/105/versions/1')).to have_been_made + end + + it 'returns diff, with array of diffs in version' do + expect(@diff.diffs).to be_a Array + expect(@diff.diffs.first['old_path']).to eq('LICENSE') + end + end end