Commit 95dc040

mo <mo.khan@gmail.com>
2019-05-30 21:24:56
handle a simple AND query
1 parent e7db9c4
Changed files (2)
app
models
spec
app/models/scim/visitor.rb
@@ -1,12 +1,10 @@
 module Scim
   class Visitor
     def self.result_for(tree)
-      puts tree.inspect
-
       attr = SCIM::User::ATTRIBUTES[tree[:attribute].to_s] || tree[:attribute].to_s
       case tree[:operator].to_s
       when 'and'
-        result_for(tree[:left]).where(result_for(tree[:right]))
+        result_for(tree[:left]).merge(result_for(tree[:right]))
       when 'or'
         result_for(tree[:left]).or(result_for(tree[:right]))
       when 'eq'
spec/models/user_spec.rb
@@ -41,7 +41,7 @@ RSpec.describe User do
     end
 
     specify do
-      results = User.scim_filter_for(tree_for("userName ew \"#{random_user.email[-5..-1]}\""))
+      results = User.scim_filter_for(tree_for("userName ew \"#{random_user.email[-8..-1]}\""))
       expect(results).to match_array([random_user])
     end
 
@@ -86,12 +86,20 @@ RSpec.describe User do
       expect(results.pluck(:email)).to match_array([first_user.email, second_user.email])
     end
 
-    specify do
-      first_user = users.sample
-      second_user = users.sample
-      results = User.scim_filter_for(tree_for(%(meta.lastModified gt "#{first_user.updated_at.iso8601}" and meta.lastModified eq "#{second_user.updated_at.iso8601}")))
-      puts results.to_sql
-      expect(results).to match_array([first_user, second_user])
+    context "when searching for condition a AND condition b" do
+      specify do
+        freeze_time
+        first_user = users.sample
+        second_user = users.sample
+
+        first_user.update!(updated_at: 11.minutes.from_now)
+        second_user.update!(updated_at: 12.minutes.from_now)
+
+        results = User.scim_filter_for(
+          tree_for(%(meta.lastModified gt "#{10.minutes.from_now.iso8601}" and meta.lastModified lt "#{15.minutes.from_now.iso8601}"))
+        )
+        expect(results).to match_array([first_user, second_user])
+      end
     end
   end
 end