From 4b36f74bfedc854b8628f2597223f17ea19e3abd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Francisco=20Javier=20L=C3=B3pez=20=F0=9F=8C=B4=20On=20vaca?= =?UTF-8?q?tion=3B=20back=20on=20August=2022th!?= Date: Wed, 1 Aug 2018 16:48:33 +0000 Subject: [PATCH] Fix bug setting http headers in Files API --- .../fj-49802-bug-api-set-http-headers.yml | 5 ++++ lib/api/helpers/headers_helpers.rb | 6 +++- spec/requests/api/files_spec.rb | 30 +++++++++++++++++++ 3 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 changelogs/unreleased/fj-49802-bug-api-set-http-headers.yml 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