Commit 5c0fbe2
Changed files (4)
app
controllers
scim
models
scim
spec
models
requests
scim
app/controllers/scim/v2/users_controller.rb
@@ -10,12 +10,7 @@ module Scim
end
def index
- @users =
- if params[:filter].present?
- User.order(:created_at).scim_search(params[:filter])
- else
- User.order(:created_at)
- end
+ @users = User.order(:created_at).scim_search(params[:filter])
@users = paginate(@users, page: page - 1, page_size: page_size)
render formats: :scim, status: :ok
end
app/models/scim/search.rb
@@ -51,6 +51,8 @@ module Scim
end
def for(filter)
+ return @clazz.all if filter.blank?
+
node = Scim::Search::Node.new(::Scim::Kit::V2::Filter.new.parse(filter))
node.accept(Scim::Visitor.new(@clazz, @clazz.scim_mapper))
end
spec/models/user_spec.rb
@@ -17,6 +17,9 @@ RSpec.describe User do
let!(:users) { create_list(:user, 10) }
let(:random_user) { users.sample }
+ specify { expect(subject.scim_search("")).to match_array(users) }
+ specify { expect(subject.scim_search(nil)).to match_array(users) }
+
specify do
results = subject.scim_search("userName pr")
expect(results.to_sql).to eql(subject.where.not(email: nil).to_sql)
spec/requests/scim/v2/users_spec.rb
@@ -231,7 +231,7 @@ describe '/scim/v2/users' do
specify { expect(json[:startIndex]).to be(1) }
specify { expect(json[:itemsPerPage]).to be(25) }
specify { expect(json[:Resources]).to be_present }
- specify { expect(json[:Resources].map { |x| x[:id] }).to match_array([first_matching_user.to_param, second_matching_user.to_param]) }
+ specify { expect(json[:Resources].map { |x| x[:id] }.uniq).to match_array([first_matching_user.to_param, second_matching_user.to_param].uniq) }
end
end