diff options
author | Olaf Tomalka <olaf.tomalka@gmail.com> | 2016-09-06 02:31:06 +0200 |
---|---|---|
committer | Olaf Tomalka <olaf.tomalka@gmail.com> | 2016-09-06 04:16:14 +0200 |
commit | bad3fb895cad46c52575aa91b02f7e7786634a47 (patch) | |
tree | bbcf1a2652b566db7c6c3e12d6173cda5c61fc9f /spec/requests | |
parent | 7d2bd6b91bdfa0afd6b0032ddf23c24a28c61056 (diff) | |
download | gitlab-ce-bad3fb895cad46c52575aa91b02f7e7786634a47.tar.gz |
Added fork API paremeter for a specific namespace
Browser interface allows forking to an owned grup.
This commit brings API up to speed by providing optional namespace
parameter to fork API. This allows forking to users and groups under
forker's control using their id or unique name.
Fixes #21591
Diffstat (limited to 'spec/requests')
-rw-r--r-- | spec/requests/api/fork_spec.rb | 54 |
1 files changed, 53 insertions, 1 deletions
diff --git a/spec/requests/api/fork_spec.rb b/spec/requests/api/fork_spec.rb index f802fcd2d2e..97f17efc053 100644 --- a/spec/requests/api/fork_spec.rb +++ b/spec/requests/api/fork_spec.rb @@ -3,9 +3,15 @@ require 'spec_helper' describe API::API, api: true do include ApiHelpers let(:user) { create(:user) } - let(:user2) { create(:user) } + let(:user2) { create(:user, username: 'user2_name') } let(:user3) { create(:user) } let(:admin) { create(:admin) } + let(:group) { create(:group, name: 'group_name') } + let(:group2) do + group = create(:group, name: 'group2_name') + group.add_owner(user2) + group + end let(:project) do create(:project, creator_id: user.id, namespace: user.namespace) @@ -58,6 +64,52 @@ describe API::API, api: true do expect(response).to have_http_status(404) expect(json_response['message']).to eq('404 Project Not Found') end + + it 'forks with explicit own user namespace id' do + post api("/projects/fork/#{project.id}?namespace=#{user2.namespace.id}", user2) + expect(response).to have_http_status(201) + expect(json_response['owner']['id']).to eq(user2.id) + end + + it 'forks with explicit own user name as namespace' do + post api("/projects/fork/#{project.id}?namespace=#{user2.username}", user2) + expect(response).to have_http_status(201) + expect(json_response['owner']['id']).to eq(user2.id) + end + + it 'forks to another user when admin' do + post api("/projects/fork/#{project.id}?namespace=#{user2.username}", admin) + expect(response).to have_http_status(201) + expect(json_response['owner']['id']).to eq(user2.id) + end + + it 'fails if trying to fork to another user when not admin' do + post api("/projects/fork/#{project.id}?namespace=#{admin.namespace.id}", user2) + expect(response).to have_http_status(403) + end + + it 'fails if trying to fork to non-existent namespace' do + post api("/projects/fork/#{project.id}?namespace=42424242", user2) + expect(response).to have_http_status(404) + expect(json_response['message']).to eq('404 Target Namespace Not Found') + end + + it 'forks to owned group' do + post api("/projects/fork/#{project.id}?namespace=#{group2.name}", user2) + expect(response).to have_http_status(201) + expect(json_response['namespace']['name']).to eq(group2.name) + end + + it 'fails to fork to not owned group' do + post api("/projects/fork/#{project.id}?namespace=#{group.name}", user2) + expect(response).to have_http_status(403) + end + + it 'forks to not owned group when admin' do + post api("/projects/fork/#{project.id}?namespace=#{group.name}", admin) + expect(response).to have_http_status(201) + expect(json_response['namespace']['name']).to eq(group.name) + end end context 'when unauthenticated' do |