Commit 13da3ef
Changed files (3)
spec
models
scim
app/models/scim/search.rb
@@ -42,9 +42,9 @@ module Scim
end
end
- def self.for(filter, clazz, mapper)
+ def self.for(filter, clazz)
node = Scim::Search::Node.parse(filter)
- node.accept(Scim::Visitor.new(clazz, mapper))
+ node.accept(Scim::Visitor.new(clazz, clazz.scim_mapper))
end
end
end
app/models/user.rb
@@ -36,6 +36,10 @@ class User < ApplicationRecord
end
class << self
+ def scim_mapper
+ SCIM::User::ATTRIBUTES
+ end
+
def login(email, password)
return if email.blank? || password.blank?
spec/models/scim/search_spec.rb
@@ -4,45 +4,44 @@ require 'rails_helper'
RSpec.describe ::Scim::Search do
subject { described_class }
- let(:mapper) { SCIM::User::ATTRIBUTES }
describe "#visit" do
let!(:users) { create_list(:user, 10) }
let(:random_user) { users.sample }
specify do
- results = subject.for("userName pr", User, mapper)
+ results = subject.for("userName pr", User)
expect(results.to_sql).to eql(User.where.not(email: nil).to_sql)
expect(results).to match_array(users)
end
pending do
- results = subject.for("userName pr and not (userName eq \"#{random_user.email}\")", User, mapper)
+ results = subject.for("userName pr and not (userName eq \"#{random_user.email}\")", User)
expect(results).to match_array(users - [random_user])
end
specify do
- results = subject.for("userName eq \"#{random_user.email}\"", User, mapper)
+ results = subject.for("userName eq \"#{random_user.email}\"", User)
expect(results).to match_array([random_user])
end
specify do
- results = subject.for("userName ne \"#{random_user.email}\"", User, mapper)
+ results = subject.for("userName ne \"#{random_user.email}\"", User)
expect(results.pluck(:email)).not_to include(random_user.email)
end
specify do
- results = subject.for("userName co \"#{random_user.email[1..-2]}\"", User, mapper)
+ results = subject.for("userName co \"#{random_user.email[1..-2]}\"", User)
expect(results).to match_array([random_user])
end
specify do
- results = subject.for("userName sw \"#{random_user.email[0..3]}\"", User, mapper)
+ results = subject.for("userName sw \"#{random_user.email[0..3]}\"", User)
expect(results).to match_array([random_user])
end
specify do
- results = subject.for("userName ew \"#{random_user.email[-8..-1]}\"", User, mapper)
+ results = subject.for("userName ew \"#{random_user.email[-8..-1]}\"", User)
expect(results).to match_array([random_user])
end
@@ -50,7 +49,7 @@ RSpec.describe ::Scim::Search do
freeze_time
random_user.update!(updated_at: 10.minutes.from_now)
- results = subject.for("meta.lastModified gt \"#{Time.now.iso8601}\"", User, mapper)
+ results = subject.for("meta.lastModified gt \"#{Time.now.iso8601}\"", User)
expect(results).to match_array([random_user])
end
@@ -58,7 +57,7 @@ RSpec.describe ::Scim::Search do
freeze_time
random_user.update!(updated_at: 10.minutes.from_now)
- results = subject.for("meta.lastModified ge \"#{random_user.updated_at.iso8601}\"", User, mapper)
+ results = subject.for("meta.lastModified ge \"#{random_user.updated_at.iso8601}\"", User)
expect(results).to match_array([random_user])
end
@@ -66,7 +65,7 @@ RSpec.describe ::Scim::Search do
freeze_time
random_user.update!(updated_at: 10.minutes.from_now)
- results = subject.for("meta.lastModified lt \"#{Time.now.iso8601}\"", User, mapper)
+ results = subject.for("meta.lastModified lt \"#{Time.now.iso8601}\"", User)
expect(results).to match_array(users - [random_user])
end
@@ -74,14 +73,14 @@ RSpec.describe ::Scim::Search do
freeze_time
random_user.update!(updated_at: 10.minutes.ago)
- results = subject.for("meta.lastModified le \"#{random_user.updated_at.iso8601}\"", User, mapper)
+ results = subject.for("meta.lastModified le \"#{random_user.updated_at.iso8601}\"", User)
expect(results).to match_array([random_user])
end
context "when searching for condition a OR condition b" do
let(:first_user) { users.first }
let(:second_user) { users.last }
- let(:results) { subject.for(%(userName eq "#{first_user.email}" or userName eq "#{second_user.email}"), User, mapper) }
+ let(:results) { subject.for(%(userName eq "#{first_user.email}" or userName eq "#{second_user.email}"), User) }
specify { expect(results.pluck(:email)).to match_array([first_user.email, second_user.email]) }
end
@@ -89,7 +88,7 @@ RSpec.describe ::Scim::Search do
context "when searching for condition a AND condition b" do
let(:first_user) { users.first }
let(:second_user) { users.last }
- let(:results) { subject.for(%(meta.lastModified gt "#{10.minutes.from_now.iso8601}" and meta.lastModified lt "#{15.minutes.from_now.iso8601}"), User, mapper) }
+ let(:results) { subject.for(%(meta.lastModified gt "#{10.minutes.from_now.iso8601}" and meta.lastModified lt "#{15.minutes.from_now.iso8601}"), User) }
before do
freeze_time