Commit 6085a69
Changed files (4)
app
controllers
scim
config
initializers
spec
requests
scim
app/controllers/scim/v2/users_controller.rb
@@ -4,7 +4,7 @@ module Scim
def index
response.headers['Content-Type'] = 'application/scim+json'
render json: {
- schemas: [Scim::Shady::Messages::LIST],
+ schemas: [Scim::Shady::Messages::LIST_RESPONSE],
totalResults: 0,
Resources: [],
}.to_json, status: :ok
config/initializers/mime_types.rb
@@ -2,3 +2,9 @@
# Add new mime types for use in respond_to blocks:
# Mime::Type.register "text/richtext", :rtf
+Mime::Type.register "application/scim+json", :scim
+
+scim_parser = ActionDispatch::Request.parameter_parsers[:json]
+original_parsers = ActionDispatch::Request.parameter_parsers
+ActionDispatch::Request.parameter_parsers =
+ original_parsers.merge(Mime[:scim].symbol => scim_parser)
config/routes.rb
@@ -9,7 +9,11 @@ Rails.application.routes.draw do
namespace :scim do
namespace :v2, defaults: { format: 'json' } do
- resources :users, only: [:index, :show, :create, :update, :destroy]
+ resources :users, only: [:index, :show, :create, :update, :destroy] do
+ collection do
+ post ".search", to: "users#index"
+ end
+ end
get :ServiceProviderConfig, to: "service_providers#index"
#resources :groups
resources :resource_types, only: [:index]
spec/requests/scim/v2/users_spec.rb
@@ -5,8 +5,8 @@ describe '/scim/v2/users' do
let(:headers) do
{
'Authorization' => "Bearer #{token}",
- 'Accept' => 'application/json',
- 'Content-Type' => 'application/json',
+ 'Accept' => 'application/scim+json',
+ 'Content-Type' => 'application/scim+json',
}
end
@@ -67,7 +67,29 @@ describe '/scim/v2/users' do
expect(response.body).to be_present
json = JSON.parse(response.body, symbolize_names: true)
- expect(json[:schemas]).to match_array([Scim::Shady::Messages::LIST])
+ expect(json[:schemas]).to match_array([Scim::Shady::Messages::LIST_RESPONSE])
+ expect(json[:totalResults]).to be_zero
+ expect(json[:Resources]).to be_empty
+ end
+ end
+
+ describe "POST /scim/v2/users/.search" do
+ it 'returns an empty set of results' do
+ body = {
+ "schemas": [Scim::Shady::Messages::SEARCH_REQUEST],
+ "attributes": ["displayName", "userName"],
+ "filter": "displayName sw \"smith\"",
+ "startIndex": 1,
+ "count": 10
+ }
+ post "/scim/v2/users/.search", headers: headers, params: body.to_json
+
+ expect(response).to have_http_status(:ok)
+ expect(response.headers['Content-Type']).to eql('application/scim+json')
+ expect(response.body).to be_present
+
+ json = JSON.parse(response.body, symbolize_names: true)
+ expect(json[:schemas]).to match_array([Scim::Shady::Messages::LIST_RESPONSE])
expect(json[:totalResults]).to be_zero
expect(json[:Resources]).to be_empty
end