summaryrefslogtreecommitdiff
path: root/spec/requests
diff options
context:
space:
mode:
authorRémy Coutable <remy@rymai.me>2017-09-20 09:51:00 +0000
committerRémy Coutable <remy@rymai.me>2017-09-20 09:51:00 +0000
commitd247841b48c6ad5b3891671e30bedeb409bfad30 (patch)
tree1b90239c8d63574be3df6965f7fcc544fd749221 /spec/requests
parent36dc65d5ca34234faf8e79106ed081a28659d899 (diff)
parentc9d40927f877a9d4896edcd94c8525ba8eba3ffd (diff)
downloadgitlab-ce-d247841b48c6ad5b3891671e30bedeb409bfad30.tar.gz
Merge branch '20049-projects-api-forks' into 'master'
Resolve "make project data via API report forks of this project" Closes #20049 See merge request gitlab-org/gitlab-ce!14355
Diffstat (limited to 'spec/requests')
-rw-r--r--spec/requests/api/projects_spec.rb53
1 files changed, 53 insertions, 0 deletions
diff --git a/spec/requests/api/projects_spec.rb b/spec/requests/api/projects_spec.rb
index 92e7d797cbd..508df990952 100644
--- a/spec/requests/api/projects_spec.rb
+++ b/spec/requests/api/projects_spec.rb
@@ -1181,6 +1181,59 @@ describe API::Projects do
end
end
end
+
+ describe 'GET /projects/:id/forks' do
+ let(:private_fork) { create(:project, :private, :empty_repo) }
+ let(:member) { create(:user) }
+ let(:non_member) { create(:user) }
+
+ before do
+ private_fork.add_developer(member)
+ end
+
+ context 'for a forked project' do
+ before do
+ post api("/projects/#{private_fork.id}/fork/#{project_fork_source.id}", admin)
+ private_fork.reload
+ expect(private_fork.forked_from_project).not_to be_nil
+ expect(private_fork.forked?).to be_truthy
+ project_fork_source.reload
+ expect(project_fork_source.forks.length).to eq(1)
+ expect(project_fork_source.forks).to include(private_fork)
+ end
+
+ context 'for a user that can access the forks' do
+ it 'returns the forks' do
+ get api("/projects/#{project_fork_source.id}/forks", member)
+
+ expect(response).to have_http_status(200)
+ expect(response).to include_pagination_headers
+ expect(json_response.length).to eq(1)
+ expect(json_response[0]['name']).to eq(private_fork.name)
+ end
+ end
+
+ context 'for a user that cannot access the forks' do
+ it 'returns an empty array' do
+ get api("/projects/#{project_fork_source.id}/forks", non_member)
+
+ expect(response).to have_http_status(200)
+ expect(response).to include_pagination_headers
+ expect(json_response.length).to eq(0)
+ end
+ end
+ end
+
+ context 'for a non-forked project' do
+ it 'returns an empty array' do
+ get api("/projects/#{project_fork_source.id}/forks")
+
+ expect(response).to have_http_status(200)
+ expect(response).to include_pagination_headers
+ expect(json_response.length).to eq(0)
+ end
+ end
+ end
end
describe "POST /projects/:id/share" do