Commit abb5152

mokha <mokha@cisco.com>
2018-01-30 16:31:14
generate service provider configuration.
1 parent b50904c
app/controllers/scim/v2/service_providers_controller.rb
@@ -2,7 +2,30 @@ module Scim
   module V2
     class ServiceProvidersController < ::Scim::Controller
       def show
-        render json: { schemas: [Scim::Shady::Schemas::SERVICE_PROVIDER_CONFIG] }, status: :ok
+        render json: configuration.to_json, status: :ok
+      end
+
+      private
+
+      def configuration
+        Scim::Shady::ServiceProviderConfig.build do |x|
+          x.patch = true
+          x.bulk do |y|
+            y.supported = false
+          end
+          x.filter do |y|
+            y.supported = false
+          end
+          x.change_password_supported = false
+          x.sort_supported = false
+          x.etag_supported = false
+          x.add_authentication_scheme(:oauth_bearer_token)
+          x.meta do |y|
+            y.location = scim_v2_ServiceProviderConfig_url
+            y.created_at = y.updated_at = Time.now
+            y.version = 1
+          end
+        end
       end
     end
   end
spec/requests/scim/v2/service_provider_config_spec.rb
@@ -9,5 +9,25 @@ describe "/ServiceProviderConfig" do
 
     json = JSON.parse(response.body, symbolize_names: true)
     expect(json[:schemas]).to match_array([Scim::Shady::Schemas::SERVICE_PROVIDER_CONFIG])
+    expect(json[:documentationUri]).to be_blank
+    expect(json[:patch][:supported]).to be(true)
+    expect(json[:bulk][:supported]).to be(false)
+    expect(json[:filter][:supported]).to be(false)
+    expect(json[:changePassword][:supported]).to be(false)
+    expect(json[:sort][:supported]).to be(false)
+    expect(json[:etag][:supported]).to be(false)
+    expect(json[:authenticationSchemes]).to match_array([
+      name: 'OAuth Bearer Token',
+      description: 'Authentication scheme using the OAuth Bearer Token Standard',
+      specUri: 'http://www.rfc-editor.org/info/rfc6750',
+      documentationUri: 'http://example.com/help/oauth.html',
+      type: 'oauthbearertoken',
+      primary: true,
+    ])
+    expect(json[:meta][:location]).to eql(scim_v2_ServiceProviderConfig_url)
+    expect(json[:meta][:resourceType]).to eql('ServiceProviderConfig')
+    expect(json[:meta][:created]).to be_present
+    expect(json[:meta][:lastModified]).to be_present
+    expect(json[:meta][:version]).to be_present
   end
 end
spec/routing/scim_spec.rb
@@ -15,7 +15,7 @@ describe "/scim" do
   #it { expect(delete: "scim/v2/groups/#{id}").to route_to(controller: "scim/v2/groups", action: "destroy", id: id, format: :scim) }
 
   #it { expect(get: "/scim/v2/me").to route_to(controller: 'hi') }
-  it { expect(get: "scim/v2/ServiceProviderConfig").to route_to(controller: "scim/v2/service_providers", action: "index", format: :scim) }
+  it { expect(get: "scim/v2/ServiceProviderConfig").to route_to(controller: "scim/v2/service_providers", action: "show", format: :scim) }
   it { expect(get: "scim/v2/ResourceTypes").to route_to(controller: "scim/v2/resource_types", action: "index", format: :scim) }
   it { expect(get: "scim/v2/schemas").to route_to(controller: "scim/v2/schemas", action: "index", format: :scim) }
   #it { expect(post: "scim/v2/bulk").to route_to(controller: "scim/v2/bulk", action: "update", format: :scim) }
Gemfile
@@ -67,6 +67,6 @@ gem 'rails-assets-bootstrap', source: 'https://rails-assets.org'
 gem 'jwt'
 gem 'activerecord-session_store'
 gem "email_validator"
-gem 'scim-shady', "0.2.0"
+gem 'scim-shady', path: '../scim-shady'
 gem 'spank'
 gem 'webpacker'
Gemfile.lock
@@ -1,3 +1,9 @@
+PATH
+  remote: ../scim-shady
+  specs:
+    scim-shady (0.2.0)
+      activesupport (>= 4.2.0)
+
 GEM
   remote: https://rubygems.org/
   remote: https://rails-assets.org/
@@ -200,8 +206,6 @@ GEM
       sprockets (>= 2.8, < 4.0)
       sprockets-rails (>= 2.0, < 4.0)
       tilt (>= 1.1, < 3)
-    scim-shady (0.2.0)
-      activesupport (>= 4.2.0)
     selenium-webdriver (3.6.0)
       childprocess (~> 0.5)
       rubyzip (~> 1.0)
@@ -283,7 +287,7 @@ DEPENDENCIES
   rspec-rails (~> 3.6)
   saml-kit (= 1.0.1)
   sass-rails (~> 5.0)
-  scim-shady (= 0.2.0)
+  scim-shady!
   selenium-webdriver
   spank
   spring