Commit c8b7eff

mo khan <mo@mokhan.ca>
2026-08-04 02:19:05
fix: send every repeated --header flag
Thor overwrites an :array option on each occurrence, so only the last --header survived and requests went out without their credentials. The old spec built the options hash directly, bypassing argv parsing.
cli
1 parent aedfd65
Changed files (2)
lib
scim
kit
spec
scim
lib/scim/kit/cli/app.rb
@@ -9,7 +9,7 @@ module Scim
         end
 
         class_option :url, desc: 'Base URL of the SCIM server (or SCIM_KIT_URL)'
-        class_option :header, type: :array, default: [], desc: 'Extra header as "Name: Value" (repeatable)'
+        class_option :header, type: :string, repeatable: true, default: [], desc: 'Extra header as "Name: Value" (repeatable)'
         class_option :validate, type: :boolean, default: false, desc: 'Validate the response against a JSON Schema'
 
         desc 'discover', "Discover a server's ServiceProviderConfig, Schemas, and ResourceTypes"
spec/scim/kit/cli/app_spec.rb
@@ -643,6 +643,29 @@ RSpec.describe Scim::Kit::Cli::App do
       expect(status).to eq(0)
     end
 
+    context 'with repeated --header flags' do
+      let(:headers) { { 'Authorization' => 'Bearer xyz', 'X-Test' => 'value' } }
+      let(:argv) do
+        ['list', 'User', '--url', base_url,
+         '--header', 'Authorization: Bearer xyz',
+         '--header', 'X-Test: value']
+      end
+
+      before do
+        allow($stdout).to receive(:print)
+        stub_request(:get, "#{base_url}/Users")
+          .with(headers: headers).to_return(status: 200, body: '{}')
+      end
+
+      it 'sends every header on the request' do
+        exit_status { described_class.start(argv) }
+
+        expect(
+          a_request(:get, "#{base_url}/Users").with(headers: headers)
+        ).to have_been_made
+      end
+    end
+
     it 'exits 1 with a usage message for a malformed --header' do
       allow($stderr).to receive(:print)
       argv = ['list', 'User', '--url', base_url, '--header', 'BearerXYZ']