summaryrefslogtreecommitdiff
path: root/spec/requests
diff options
context:
space:
mode:
authorOlaf Tomalka <olaf.tomalka@gmail.com>2016-09-06 02:31:06 +0200
committerOlaf Tomalka <olaf.tomalka@gmail.com>2016-09-06 04:16:14 +0200
commitbad3fb895cad46c52575aa91b02f7e7786634a47 (patch)
treebbcf1a2652b566db7c6c3e12d6173cda5c61fc9f /spec/requests
parent7d2bd6b91bdfa0afd6b0032ddf23c24a28c61056 (diff)
downloadgitlab-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.rb54
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