Commit 363108c

mokha <mokha@cisco.com>
2019-02-13 00:36:14
parse the remote service provider configuration
1 parent 06f1481
lib/scim/kit/v2/configuration.rb
@@ -46,6 +46,18 @@ module Scim
 
           yield Builder.new(self) if block_given?
         end
+
+        def load_from(base_url)
+          uri = URI.join(base_url, 'ServiceProviderConfig')
+          self.service_provider_configuration =
+            ServiceProviderConfiguration.parse(client.get(uri).body)
+        end
+
+        private
+
+        def client
+          @client ||= Net::Hippie::Client.new
+        end
       end
     end
   end
lib/scim/kit.rb
@@ -4,6 +4,7 @@ require 'active_model'
 require 'active_support/core_ext/hash/indifferent_access'
 require 'json'
 require 'logger'
+require 'net/hippie'
 require 'pathname'
 require 'tilt'
 require 'tilt/jbuilder'
spec/scim/kit/v2/configuration_spec.rb
@@ -37,4 +37,19 @@ RSpec.describe Scim::Kit::V2::Configuration do
   specify { expect(subject.schemas['User'].name).to eql('User') }
   specify { expect(subject.schemas['User'].meta.location).to eql(user_schema_location) }
   specify { expect(subject.schemas['User'].attributes[0].name).to eql('user_name') }
+
+  describe '#load_from' do
+    let(:base_url) { FFaker::Internet.uri('https') }
+    let(:service_provider_configuration) do
+      Scim::Kit::V2::ServiceProviderConfiguration.new(location: FFaker::Internet.uri('https'))
+    end
+
+    before do
+      stub_request(:get, "#{base_url}/ServiceProviderConfig")
+        .to_return(status: 200, body: service_provider_configuration.to_json)
+      subject.load_from(base_url)
+    end
+
+    specify { expect(subject.service_provider_configuration.to_h).to eql(service_provider_configuration.to_h) }
+  end
 end
spec/spec_helper.rb
@@ -5,6 +5,7 @@ require 'scim/kit'
 require 'ffaker'
 require 'json'
 require 'byebug'
+require 'webmock/rspec'
 
 Scim::Kit.logger = Logger.new('/dev/null')
 
scim-kit.gemspec
@@ -30,6 +30,7 @@ Gem::Specification.new do |spec|
   spec.required_ruby_version = '>= 2.5.0'
 
   spec.add_dependency 'activemodel', '>= 5.2.0'
+  spec.add_dependency 'net-hippie', '~> 0.2'
   spec.add_dependency 'tilt', '~> 2.0'
   spec.add_dependency 'tilt-jbuilder', '~> 0.7'
   spec.add_development_dependency 'bundler', '~> 1.17'
@@ -40,4 +41,5 @@ Gem::Specification.new do |spec|
   spec.add_development_dependency 'rspec', '~> 3.0'
   spec.add_development_dependency 'rubocop', '~> 0.52'
   spec.add_development_dependency 'rubocop-rspec', '~> 1.22'
+  spec.add_development_dependency 'webmock', '~> 3.5'
 end