Commit f426f8b

mokha <mokha@cisco.com>
2018-06-11 17:50:35
add scim endpoint for groups.
1 parent cfbb36d
Changed files (4)
app
controllers
models
config
spec
requests
app/controllers/scim/v2/groups_controller.rb
@@ -0,0 +1,16 @@
+
+# frozen_string_literal: true
+
+module Scim
+  module V2
+    class GroupsController < ::Scim::Controller
+      def index
+        render json: {
+          schemas: [Scim::Shady::Messages::LIST_RESPONSE],
+          totalResults: 0,
+          Resources: [],
+        }.to_json, status: :ok
+      end
+    end
+  end
+end
app/models/scim/user_repository.rb
@@ -14,7 +14,12 @@ module SCIM
 
     def create!(params)
       password = SecureRandom.hex(32)
-      mapper.map_from(User.create!(email: params[:userName], password: password))
+      mapper.map_from(
+        User.create!(
+          email: params[:userName],
+          password: password
+        )
+      )
     end
 
     def update!(id, params)
config/routes.rb
@@ -13,7 +13,7 @@ Rails.application.routes.draw do
       post ".search", to: "search#index"
       resources :users, only: [:index, :show, :create, :update, :destroy]
       get :ServiceProviderConfig, to: "service_providers#show"
-      #resources :groups
+      resources :groups, only: [:index]
       resources :resource_types, only: [:index]
       get :ResourceTypes, to: "resource_types#index"
       resources :schemas, only: [:index]
spec/requests/scim/v2/groups_spec.rb
@@ -0,0 +1,26 @@
+require 'rails_helper'
+
+describe "/scim/v2/groups" do
+  let(:token) { SecureRandom.uuid }
+  let(:headers) do
+    {
+      'Authorization' => "Bearer #{token}",
+      'Accept' => 'application/scim+json',
+      'Content-Type' => 'application/scim+json',
+    }
+  end
+
+  describe "GET /scim/v2/groups" do
+    context "when retrieving all groups" do
+      before { get '/scim/v2/groups', headers: headers }
+
+      specify { expect(response).to have_http_status(:ok) }
+      specify { expect(response.headers['Content-Type']).to eql('application/scim+json') }
+      specify { expect(response.body).to be_present }
+      let(:json) { JSON.parse(response.body, symbolize_names: true) }
+      specify { expect(json[:schemas]).to match_array([Scim::Shady::Messages::LIST_RESPONSE]) }
+      specify { expect(json[:totalResults]).to be_zero }
+      specify { expect(json[:Resources]).to be_empty }
+    end
+  end
+end