Commit d22635c

mo <mo@mokhan.ca>
2019-05-09 16:16:26
update users#index to return list of users
1 parent b4ef562
Changed files (4)
app
spec
requests
app/controllers/scim/v2/users_controller.rb
@@ -9,11 +9,8 @@ module Scim
       end
 
       def index
-        render json: {
-          schemas: [Scim::Kit::V2::Messages::LIST_RESPONSE],
-          totalResults: 0,
-          Resources: [],
-        }.to_json, status: :ok
+        @users = User.all.limit(25)
+        render formats: :scim, status: :ok
       end
 
       def show
app/views/scim/v2/users/_user.scim.jbuilder
@@ -1,23 +1,23 @@
 # frozen_string_literal: true
 
 json.schemas ["urn:ietf:params:scim:schemas:core:2.0:User"]
-json.id @user.to_param
+json.id user.to_param
 json.meta do
   json.resourceType 'User'
-  json.created @user.created_at.iso8601
-  json.lastModified @user.updated_at.iso8601
+  json.created user.created_at.iso8601
+  json.lastModified user.updated_at.iso8601
   json.version response.headers['ETag']
-  json.location scim_v2_user_url(id: @user.to_param)
+  json.location scim_v2_user_url(id: user.to_param)
 end
-json.userName @user.email
+json.userName user.email
 json.name do
-  json.formatted @user.email
-  json.familyName @user.email
-  json.givenName @user.email
+  json.formatted user.email
+  json.familyName user.email
+  json.givenName user.email
 end
-json.displayName @user.email
-json.locale @user.locale
-json.timezone @user.timezone
+json.displayName user.email
+json.locale user.locale
+json.timezone user.timezone
 json.active true
-json.emails [{ value: @user.email, primary: true }]
+json.emails [{ value: user.email, primary: true }]
 json.groups []
app/views/scim/v2/users/index.scim.jbuilder
@@ -0,0 +1,9 @@
+# frozen_string_literal: true
+
+json.schemas [Scim::Kit::V2::Messages::LIST_RESPONSE]
+json.totalResults @users.count
+json.Resources do
+  json.array! @users do |user|
+    json.partial! user, as: :user
+  end
+end
spec/requests/scim/v2/users_spec.rb
@@ -108,16 +108,19 @@ describe '/scim/v2/users' do
   end
 
   describe "GET /scim/v2/users" do
-    let(:json) { JSON.parse(response.body, symbolize_names: true) }
+    context "when fetching all users" do
+      let(:json) { JSON.parse(response.body, symbolize_names: true) }
+      let!(:user) { create(:user) }
 
-    before { get "/scim/v2/users?attributes=userName", headers: headers }
+      before { get "/scim/v2/users", 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 }
-    specify { expect(json[:schemas]).to match_array([Scim::Kit::V2::Messages::LIST_RESPONSE]) }
-    specify { expect(json[:totalResults]).to be_zero }
-    specify { expect(json[:Resources]).to be_empty }
+      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 }
+      specify { expect(json[:schemas]).to match_array([Scim::Kit::V2::Messages::LIST_RESPONSE]) }
+      specify { expect(json[:totalResults]).to be(1) }
+      specify { expect(json[:Resources]).not_to be_empty }
+    end
   end
 
   describe "PUT /scim/v2/users" do