summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Thomas <nick@gitlab.com>2018-08-01 16:48:33 +0000
committerNick Thomas <nick@gitlab.com>2018-08-01 16:48:33 +0000
commitf175014067c38f577646d101cc8d32212d582148 (patch)
treea06e901f8f95104d33127fcf77064aa804073d3b
parentdae5c2665df3dd3b33a04ff215f39ef6a336d1da (diff)
parent4b36f74bfedc854b8628f2597223f17ea19e3abd (diff)
downloadgitlab-ce-f175014067c38f577646d101cc8d32212d582148.tar.gz
Merge branch 'fj-49802-bug-api-set-http-headers' into 'master'
Fix bug setting http headers in Files API See merge request gitlab-org/gitlab-ce!20938
-rw-r--r--changelogs/unreleased/fj-49802-bug-api-set-http-headers.yml5
-rw-r--r--lib/api/helpers/headers_helpers.rb6
-rw-r--r--spec/requests/api/files_spec.rb30
3 files changed, 40 insertions, 1 deletions
diff --git a/changelogs/unreleased/fj-49802-bug-api-set-http-headers.yml b/changelogs/unreleased/fj-49802-bug-api-set-http-headers.yml
new file mode 100644
index 00000000000..ba61d378cda
--- /dev/null
+++ b/changelogs/unreleased/fj-49802-bug-api-set-http-headers.yml
@@ -0,0 +1,5 @@
+---
+title: Fix bug setting http headers in Files API
+merge_request: 20938
+author:
+type: fixed
diff --git a/lib/api/helpers/headers_helpers.rb b/lib/api/helpers/headers_helpers.rb
index cde51fccc62..c9c44e3c218 100644
--- a/lib/api/helpers/headers_helpers.rb
+++ b/lib/api/helpers/headers_helpers.rb
@@ -3,7 +3,11 @@ module API
module HeadersHelpers
def set_http_headers(header_data)
header_data.each do |key, value|
- header "X-Gitlab-#{key.to_s.split('_').collect(&:capitalize).join('-')}", value
+ if value.is_a?(Enumerable)
+ raise ArgumentError.new("Header value should be a string")
+ end
+
+ header "X-Gitlab-#{key.to_s.split('_').collect(&:capitalize).join('-')}", value.to_s
end
end
end
diff --git a/spec/requests/api/files_spec.rb b/spec/requests/api/files_spec.rb
index 4bc5d3ee899..0aec186f738 100644
--- a/spec/requests/api/files_spec.rb
+++ b/spec/requests/api/files_spec.rb
@@ -13,6 +13,24 @@ describe API::Files do
let(:author_email) { 'user@example.org' }
let(:author_name) { 'John Doe' }
+ let(:helper) do
+ fake_class = Class.new do
+ include ::API::Helpers::HeadersHelpers
+
+ attr_reader :headers
+
+ def initialize
+ @headers = {}
+ end
+
+ def header(key, value)
+ @headers[key] = value
+ end
+ end
+
+ fake_class.new
+ end
+
before do
project.add_developer(user)
end
@@ -21,6 +39,18 @@ describe API::Files do
"/projects/#{project.id}/repository/files/#{file_path}"
end
+ context 'http headers' do
+ it 'converts value into string' do
+ helper.set_http_headers(test: 1)
+
+ expect(helper.headers).to eq({ 'X-Gitlab-Test' => '1' })
+ end
+
+ it 'raises exception if value is an Enumerable' do
+ expect { helper.set_http_headers(test: [1]) }.to raise_error(ArgumentError)
+ end
+ end
+
describe "HEAD /projects/:id/repository/files/:file_path" do
shared_examples_for 'repository files' do
it 'returns file attributes in headers' do