Commit dd3febc

mo <mo.khan@gmail.com>
2019-01-04 18:54:06
start to build the service provider configuration
1 parent c952d05
lib/scim/kit/v2/templates/service_provider_configuration.json.jbuilder
@@ -0,0 +1,24 @@
+# frozen_string_literal: true
+
+json.key_format! camelize: :lower
+json.schemas [Scim::Kit::V2::Schema::SERVICE_PROVIDER_CONFIGURATION]
+json.documentation_uri documentation_uri
+json.patch do
+  json.supported false
+end
+json.bulk do
+  json.supported false
+end
+json.filter do
+  json.supported false
+end
+json.change_password do
+  json.supported false
+end
+json.sort do
+  json.supported false
+end
+json.etag do
+  json.supported false
+end
+json.authentication_schemes []
lib/scim/kit/v2/schema.rb
@@ -9,6 +9,7 @@ module Scim
         ERROR = 'urn:ietf:params:scim:api:messages:2.0:Error'
         GROUP = 'urn:ietf:params:scim:schemas:core:2.0:Group'
         RESOURCE_TYPE = 'urn:ietf:params:scim:schemas:core:2.0:ResourceType'
+        SERVICE_PROVIDER_CONFIGURATION = 'urn:ietf:params:scim:schemas:core:2.0:ServiceProviderConfig'
         USER = 'urn:ietf:params:scim:schemas:core:2.0:User'
 
         attr_reader :id, :name, :location, :attributes
lib/scim/kit/v2/service_provider_configuration.rb
@@ -0,0 +1,13 @@
+# frozen_string_literal: true
+
+module Scim
+  module Kit
+    module V2
+      # Represents a scim Service Provider Configuration
+      class ServiceProviderConfiguration
+        include Templatable
+        attr_accessor :documentation_uri
+      end
+    end
+  end
+end
lib/scim/kit.rb
@@ -12,6 +12,7 @@ require 'scim/kit/v2/mutability'
 require 'scim/kit/v2/resource_type'
 require 'scim/kit/v2/returned'
 require 'scim/kit/v2/schema'
+require 'scim/kit/v2/service_provider_configuration'
 require 'scim/kit/v2/uniqueness'
 
 module Scim
spec/scim/kit/v2/service_provider_configuration_spec.rb
@@ -0,0 +1,25 @@
+# frozen_string_literal: true
+
+RSpec.describe Scim::Kit::V2::ServiceProviderConfiguration do
+  describe "#to_json" do
+    let(:result) { JSON.parse(subject.to_json, symbolize_names: true) }
+
+    specify { expect(result[:schemas]).to match_array(["urn:ietf:params:scim:schemas:core:2.0:ServiceProviderConfig"]) }
+    specify { expect(result[:documentationUri]).to be_blank }
+    specify { expect(result[:patch][:supported]).to be(false) }
+    specify { expect(result[:bulk][:supported]).to be(false) }
+    specify { expect(result[:filter][:supported]).to be(false) }
+    specify { expect(result[:changePassword][:supported]).to be(false) }
+    specify { expect(result[:sort][:supported]).to be(false) }
+    specify { expect(result[:etag][:supported]).to be(false) }
+    specify { expect(result[:authenticationSchemes]).to be_empty }
+
+    context "with documentation uri" do
+      before do
+        subject.documentation_uri = FFaker::Internet.uri('https')
+      end
+
+      specify { expect(result[:documentationUri]).to eql(subject.documentation_uri) }
+    end
+  end
+end