From 2bbf75f2114530f499bb1a917f000c7605d147f1 Mon Sep 17 00:00:00 2001
From: Robert Schilling <rschilling@student.tugraz.at>
Date: Tue, 24 Oct 2017 18:02:08 +0300
Subject: Start with tests

---
 spec/requests/api/commits_spec.rb | 60 +++++++++++++++++++++++++++++++++++++++
 1 file changed, 60 insertions(+)

(limited to 'spec/requests')

diff --git a/spec/requests/api/commits_spec.rb b/spec/requests/api/commits_spec.rb
index ff5f207487b..964dd7ad39e 100644
--- a/spec/requests/api/commits_spec.rb
+++ b/spec/requests/api/commits_spec.rb
@@ -465,6 +465,66 @@ describe API::Commits do
     end
   end
 
+  describe 'GET /projects/:id/repository/commits/:sha/refs' do
+    let(:project) { create(:project, :public, :repository) }
+    let(:tag) { project.repository.find_tag('v1.1.0') }
+    let(:commit_id) { tag.dereferenced_target.id }
+    let(:route) { "/projects/#{project_id}/repository/commits/#{commit_id}/refs" }
+
+    context 'when ref does not exist' do
+      let(:commit_id) { 'unknown' }
+
+      it_behaves_like '404 response' do
+        let(:request) { get api(route, current_user) }
+        let(:message) { '404 Commit Not Found' }
+      end
+    end
+
+    context 'when repository is disabled' do
+      include_context 'disabled repository'
+
+      it_behaves_like '403 response' do
+        let(:request) { get api(route, current_user) }
+      end
+    end
+
+    context 'for a valid commit' do
+      it 'returns all refs with no scope' do
+        get api(route, current_user)
+
+        repo_refs = project.repository.branch_names_contains(commit_id)
+        repo_refs.push(*project.repository.tag_names_contains(commit_id))
+
+        expect(json_response.map { |refs| refs['name'] }).to eq(repo_refs)
+      end
+
+      it 'returns all refs' do
+        get api(route, current_user), type: 'all'
+
+        repo_refs = project.repository.branch_names_contains(commit_id)
+        repo_refs.push(*project.repository.tag_names_contains(commit_id))
+
+        expect(json_response.map { |refs| refs['name'] }).to eq(repo_refs)
+      end
+
+      it 'returns the branch refs' do
+        get api(route, current_user), type: 'branches'
+
+        repo_refs = project.repository.branch_names_contains(commit_id)
+
+        expect(json_response.map { |refs| refs['name'] }).to eq(repo_refs)
+      end
+
+      it 'returns the tag refs' do
+        get api(route, current_user), type: 'tags'
+
+        repo_refs = project.repository.tag_names_contains(commit_id)
+
+        expect(json_response.map { |refs| refs['name'] }).to eq(repo_refs)
+      end
+    end
+  end
+
   describe 'GET /projects/:id/repository/commits/:sha' do
     let(:commit) { project.repository.commit }
     let(:commit_id) { commit.id }
-- 
cgit v1.2.1


From 922d156a5e0412a12662df94e03479f7ed015f7b Mon Sep 17 00:00:00 2001
From: Robert Schilling <rschilling@student.tugraz.at>
Date: Fri, 9 Feb 2018 17:46:41 +0100
Subject: Separate branch and tag names

---
 spec/requests/api/commits_spec.rb | 22 ++++++++++++----------
 1 file changed, 12 insertions(+), 10 deletions(-)

(limited to 'spec/requests')

diff --git a/spec/requests/api/commits_spec.rb b/spec/requests/api/commits_spec.rb
index 964dd7ad39e..ac25f134697 100644
--- a/spec/requests/api/commits_spec.rb
+++ b/spec/requests/api/commits_spec.rb
@@ -492,35 +492,37 @@ describe API::Commits do
       it 'returns all refs with no scope' do
         get api(route, current_user)
 
-        repo_refs = project.repository.branch_names_contains(commit_id)
-        repo_refs.push(*project.repository.tag_names_contains(commit_id))
+        branch_refs = project.repository.branch_names_contains(commit_id)
+        tag_refs = project.repository.tag_names_contains(commit_id)
 
-        expect(json_response.map { |refs| refs['name'] }).to eq(repo_refs)
+        expect(json_response.map { |refs| refs['branch_name'] }.compact).to eq(branch_refs)
+        expect(json_response.map { |refs| refs['tag_name'] }.compact).to eq(tag_refs)
       end
 
       it 'returns all refs' do
         get api(route, current_user), type: 'all'
 
-        repo_refs = project.repository.branch_names_contains(commit_id)
-        repo_refs.push(*project.repository.tag_names_contains(commit_id))
+        branch_refs = project.repository.branch_names_contains(commit_id)
+        tag_refs = project.repository.tag_names_contains(commit_id)
 
-        expect(json_response.map { |refs| refs['name'] }).to eq(repo_refs)
+        expect(json_response.map { |refs| refs['branch_name'] }.compact).to eq(branch_refs)
+        expect(json_response.map { |refs| refs['tag_name'] }.compact).to eq(tag_refs)
       end
 
       it 'returns the branch refs' do
         get api(route, current_user), type: 'branches'
 
-        repo_refs = project.repository.branch_names_contains(commit_id)
+        branch_refs = project.repository.branch_names_contains(commit_id)
 
-        expect(json_response.map { |refs| refs['name'] }).to eq(repo_refs)
+        expect(json_response.map { |refs| refs['branch_name'] }.compact).to eq(branch_refs)
       end
 
       it 'returns the tag refs' do
         get api(route, current_user), type: 'tags'
 
-        repo_refs = project.repository.tag_names_contains(commit_id)
+        tag_refs = project.repository.tag_names_contains(commit_id)
 
-        expect(json_response.map { |refs| refs['name'] }).to eq(repo_refs)
+        expect(json_response.map { |refs| refs['tag_name'] }.compact).to eq(tag_refs)
       end
     end
   end
-- 
cgit v1.2.1


From a724f7e35f9f8ed9692b0f3f4d6c8a62632cdec4 Mon Sep 17 00:00:00 2001
From: Robert Schilling <rschilling@student.tugraz.at>
Date: Tue, 13 Feb 2018 20:22:37 +0100
Subject: Refactor commits/refs API to use hash and add pagination headers

---
 spec/requests/api/commits_spec.rb | 36 ++++++++++++++++++++----------------
 1 file changed, 20 insertions(+), 16 deletions(-)

(limited to 'spec/requests')

diff --git a/spec/requests/api/commits_spec.rb b/spec/requests/api/commits_spec.rb
index ac25f134697..31959d28fee 100644
--- a/spec/requests/api/commits_spec.rb
+++ b/spec/requests/api/commits_spec.rb
@@ -490,39 +490,43 @@ describe API::Commits do
 
     context 'for a valid commit' do
       it 'returns all refs with no scope' do
-        get api(route, current_user)
+        get api(route, current_user), per_page: 100
 
-        branch_refs = project.repository.branch_names_contains(commit_id)
-        tag_refs = project.repository.tag_names_contains(commit_id)
+        refs = project.repository.branch_names_contains(commit_id).map {|name| ['branch', name]}
+        refs.concat(project.repository.tag_names_contains(commit_id).map {|name| ['tag', name]})
 
-        expect(json_response.map { |refs| refs['branch_name'] }.compact).to eq(branch_refs)
-        expect(json_response.map { |refs| refs['tag_name'] }.compact).to eq(tag_refs)
+        expect(response).to have_gitlab_http_status(200)
+        expect(response).to include_pagination_headers
+        expect(json_response).to be_an Array
+        expect(json_response.map { |r| [r['type'], r['name']] }.compact).to eq(refs)
       end
 
       it 'returns all refs' do
-        get api(route, current_user), type: 'all'
+        get api(route, current_user), type: 'all', per_page: 100
 
-        branch_refs = project.repository.branch_names_contains(commit_id)
-        tag_refs = project.repository.tag_names_contains(commit_id)
+        refs = project.repository.branch_names_contains(commit_id).map {|name| ['branch', name]}
+        refs.concat(project.repository.tag_names_contains(commit_id).map {|name| ['tag', name]})
 
-        expect(json_response.map { |refs| refs['branch_name'] }.compact).to eq(branch_refs)
-        expect(json_response.map { |refs| refs['tag_name'] }.compact).to eq(tag_refs)
+        expect(response).to have_gitlab_http_status(200)
+        expect(json_response.map { |r| [r['type'], r['name']] }.compact).to eq(refs)
       end
 
       it 'returns the branch refs' do
-        get api(route, current_user), type: 'branches'
+        get api(route, current_user), type: 'branch', per_page: 100
 
-        branch_refs = project.repository.branch_names_contains(commit_id)
+        refs = project.repository.branch_names_contains(commit_id).map {|name| ['branch', name]}
 
-        expect(json_response.map { |refs| refs['branch_name'] }.compact).to eq(branch_refs)
+        expect(response).to have_gitlab_http_status(200)
+        expect(json_response.map { |r| [r['type'], r['name']] }.compact).to eq(refs)
       end
 
       it 'returns the tag refs' do
-        get api(route, current_user), type: 'tags'
+        get api(route, current_user), type: 'tag', per_page: 100
 
-        tag_refs = project.repository.tag_names_contains(commit_id)
+        refs = project.repository.tag_names_contains(commit_id).map {|name| ['tag', name]}
 
-        expect(json_response.map { |refs| refs['tag_name'] }.compact).to eq(tag_refs)
+        expect(response).to have_gitlab_http_status(200)
+        expect(json_response.map { |r| [r['type'], r['name']] }.compact).to eq(refs)
       end
     end
   end
-- 
cgit v1.2.1