searchlogic 1.5.3 → 1.5.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (69) hide show
  1. data/CHANGELOG.rdoc +6 -0
  2. data/Manifest +37 -18
  3. data/README.rdoc +13 -17
  4. data/TODO.rdoc +1 -3
  5. data/lib/searchlogic.rb +6 -6
  6. data/lib/searchlogic/active_record/connection_adapters/sqlite_adapter.rb +9 -9
  7. data/lib/searchlogic/conditions/base.rb +20 -6
  8. data/lib/searchlogic/search/base.rb +0 -5
  9. data/lib/searchlogic/search/searching.rb +3 -1
  10. data/lib/searchlogic/version.rb +1 -1
  11. data/searchlogic.gemspec +4 -4
  12. data/test/active_record_tests/associations_test.rb +95 -0
  13. data/test/active_record_tests/base_test.rb +108 -0
  14. data/test/condition_tests/base_test.rb +54 -0
  15. data/test/condition_tests/begins_with_test.rb +11 -0
  16. data/test/condition_tests/blank_test.rb +31 -0
  17. data/test/condition_tests/child_of_test.rb +17 -0
  18. data/test/condition_tests/descendant_of_test.rb +16 -0
  19. data/test/condition_tests/ends_with_test.rb +11 -0
  20. data/test/condition_tests/equals_test.rb +19 -0
  21. data/test/condition_tests/greater_than_or_equal_to_test.rb +11 -0
  22. data/test/condition_tests/greater_than_test.rb +11 -0
  23. data/test/condition_tests/inclusive_descendant_of_test.rb +16 -0
  24. data/test/condition_tests/keyswords_test.rb +19 -0
  25. data/test/condition_tests/less_than_or_equal_to_test.rb +11 -0
  26. data/test/condition_tests/less_than_test.rb +11 -0
  27. data/test/condition_tests/like_test.rb +11 -0
  28. data/test/condition_tests/nil_test.rb +31 -0
  29. data/test/condition_tests/not_begin_with_test.rb +8 -0
  30. data/test/condition_tests/not_blank_test.rb +8 -0
  31. data/test/condition_tests/not_end_with_test.rb +8 -0
  32. data/test/condition_tests/not_equal_test.rb +19 -0
  33. data/test/condition_tests/not_have_keywords_test.rb +8 -0
  34. data/test/condition_tests/not_like_test.rb +8 -0
  35. data/test/condition_tests/not_nil_test.rb +13 -0
  36. data/test/condition_tests/sibling_of_test.rb +15 -0
  37. data/test/conditions_tests/base_test.rb +221 -0
  38. data/test/conditions_tests/protection_test.rb +18 -0
  39. data/test/{test_config.rb → config_test.rb} +1 -1
  40. data/test/fixtures/accounts.yml +0 -3
  41. data/test/fixtures/animals.yml +7 -0
  42. data/test/fixtures/orders.yml +2 -4
  43. data/test/fixtures/user_groups.yml +3 -9
  44. data/test/fixtures/users.yml +6 -12
  45. data/{test_libs → test/libs}/acts_as_tree.rb +0 -0
  46. data/{test_libs → test/libs}/rexml_fix.rb +0 -0
  47. data/test/modifier_tests/day_of_month_test.rb +16 -0
  48. data/test/search_tests/base_test.rb +237 -0
  49. data/test/search_tests/conditions_test.rb +21 -0
  50. data/test/search_tests/ordering_test.rb +167 -0
  51. data/test/search_tests/pagination_test.rb +74 -0
  52. data/test/search_tests/protection_test.rb +26 -0
  53. data/test/test_helper.rb +79 -83
  54. metadata +73 -32
  55. data/examples/README.rdoc +0 -4
  56. data/test/fixtures/cats.yml +0 -3
  57. data/test/fixtures/dogs.yml +0 -3
  58. data/test/test_active_record_associations.rb +0 -81
  59. data/test/test_active_record_base.rb +0 -93
  60. data/test/test_condition_base.rb +0 -52
  61. data/test/test_condition_types.rb +0 -143
  62. data/test/test_conditions_base.rb +0 -242
  63. data/test/test_conditions_protection.rb +0 -16
  64. data/test/test_search_base.rb +0 -227
  65. data/test/test_search_conditions.rb +0 -19
  66. data/test/test_search_ordering.rb +0 -165
  67. data/test/test_search_pagination.rb +0 -72
  68. data/test/test_search_protection.rb +0 -24
  69. data/test_libs/ordered_hash.rb +0 -9
@@ -1,93 +0,0 @@
1
- require File.dirname(__FILE__) + '/test_helper.rb'
2
-
3
- class TestActiveRecordBase < Test::Unit::TestCase
4
- def test_standard_find
5
- assert_equal [1,2,3], Account.all.map(&:id)
6
- assert_equal 1, Account.first.id
7
- assert_equal [1,2,3], Account.find(:all).map(&:id)
8
- assert_equal [1], Account.find(:all, :conditions => {:name => "Binary Logic"}).map(&:id)
9
- assert_equal [1], Account.find(:all, :conditions => ["name = ?", "Binary Logic"]).map(&:id)
10
- assert_equal [1], Account.find(:all, :conditions => "name = 'Binary Logic'").map(&:id)
11
- assert_equal 1, Account.find(:first).id
12
- assert_equal [1,2,3], Account.find(:all, nil).map(&:id)
13
- assert_equal [1,2,3], Account.find(:all, {}).map(&:id)
14
- assert_equal [1,2,3], Account.find(:all, :select => "id, name").map(&:id)
15
- end
16
-
17
- def test_standard_calculations
18
- assert_equal 3, Account.count({})
19
- assert_equal 3, Account.count(nil)
20
- assert_equal 3, Account.count(:limit => 1)
21
- assert_equal 0, Account.count(:limit => 10, :offset => 10)
22
- assert_equal 6, Account.sum("id")
23
- assert_equal 6, Account.sum("id", {})
24
- assert_equal 2, Account.average("id")
25
- assert_equal 3, Account.maximum("id")
26
- assert_equal 1, Account.minimum("id")
27
- end
28
-
29
- def test_valid_ar_options
30
- assert_equal [ :conditions, :include, :joins, :limit, :offset, :order, :select, :readonly, :group, :from, :lock ], ActiveRecord::Base.valid_find_options
31
- assert_equal [:conditions, :joins, :order, :select, :group, :having, :distinct, :limit, :offset, :include, :from], ActiveRecord::Base.valid_calculations_options
32
- end
33
-
34
- def test_build_search
35
- search = Account.new_search(:conditions => {:name_keywords => "awesome"}, :page => 2, :per_page => 15)
36
- assert_kind_of Searchlogic::Search::Base, search
37
- assert_equal({}, search.scope)
38
- assert_equal Account, search.klass
39
- assert_equal "awesome", search.conditions.name_keywords
40
- assert_equal 2, search.page
41
- assert_equal 15, search.per_page
42
- end
43
-
44
- def test_searchlogic_searching
45
- assert_equal Account.find(1, 3), Account.all(:conditions => {:name_contains => "Binary"})
46
- assert_equal [Account.find(1)], Account.all(:conditions => {:name_contains => "Binary", :users => {:first_name_starts_with => "Ben"}})
47
- assert_equal [], Account.all(:conditions => {:name_contains => "Binary", :users => {:first_name_starts_with => "Ben", :last_name => "Mills"}})
48
- assert_equal Account.find(1, 2), Account.all(:conditions => {:users => {:id_gt => 0}}, :include => :users)
49
-
50
- read_only_accounts = Account.all(:conditions => {:name_contains => "Binary"}, :readonly => true)
51
- assert read_only_accounts.first.readonly?
52
-
53
- assert_equal Account.find(1, 3), Account.all(:conditions => {:name_contains => "Binary"}, :page => 2)
54
- assert_equal [], Account.all(:conditions => {:name_contains => "Binary"}, :page => 2, :per_page => 20)
55
-
56
- assert_equal [Account.find(1)], Account.scope1.all(:conditions => {:users => {:first_name_starts_with => "Ben"}})
57
- end
58
-
59
- def test_searchlogic_counting
60
- assert_equal 2, Account.count(:conditions => {:name_contains => "Binary"})
61
- assert_equal 1, Account.count(:conditions => {:name_contains => "Binary", :users => {:first_name_contains => "Ben"}})
62
- assert_equal 1, Account.count(:conditions => {:name_contains => "Binary", :users => {:first_name_contains => "Ben"}}, :limit => 10, :offset => 10, :order_by => "id", :group => "id")
63
- end
64
-
65
- def test_scoping
66
- assert_equal({:conditions => {:name => "Binary"}, :limit => 10, :readonly => true}, Account.send(:with_scope, :find => {:conditions => {:name => "Binary"}, :limit => 10, :readonly => true}) { Account.send(:scope, :find) })
67
- assert_equal({:conditions => ["\"accounts\".\"name\" LIKE ?", "%Binary%"], :limit => 10, :offset => 20}, Account.send(:with_scope, :find => {:conditions => {:name_contains => "Binary"}, :per_page => 10, :page => 3}) { Account.send(:scope, :find) })
68
- end
69
-
70
- def test_accessible_conditions
71
- Account.conditions_accessible :name_contains
72
- assert_equal Set.new(["name_contains"]), Account.accessible_conditions
73
- Account.conditions_accessible :id_gt
74
- assert_equal Set.new(["id_gt", "name_contains"]), Account.accessible_conditions
75
- Account.conditions_accessible :id_gt, :name_contains
76
- assert_equal Set.new(["id_gt", "name_contains"]), Account.accessible_conditions
77
- Account.send(:write_inheritable_attribute, :conditions_accessible, nil)
78
- end
79
-
80
- def test_protected_conditions
81
- Account.conditions_protected :name_contains
82
- assert_equal Set.new(["name_contains"]), Account.protected_conditions
83
- Account.conditions_protected :id_gt
84
- assert_equal Set.new(["id_gt", "name_contains"]), Account.protected_conditions
85
- Account.conditions_protected :id_gt, :name_contains
86
- assert_equal Set.new(["id_gt", "name_contains"]), Account.protected_conditions
87
- Account.send(:write_inheritable_attribute, :conditions_protected, nil)
88
- end
89
-
90
- def test_includes
91
- assert_nothing_raised { Account.all(:conditions => {:users => {:first_name_like => "Ben"}}, :include => :users) }
92
- end
93
- end
@@ -1,52 +0,0 @@
1
- require File.dirname(__FILE__) + '/test_helper.rb'
2
-
3
- class TestConditionBase < Test::Unit::TestCase
4
- def test_condition_type_name
5
- assert_equal "equals", Searchlogic::Condition::Equals.condition_type_name
6
- assert_equal "keywords", Searchlogic::Condition::Keywords.condition_type_name
7
- assert_equal "greater_than_or_equal_to", Searchlogic::Condition::GreaterThanOrEqualTo.condition_type_name
8
- end
9
-
10
- def test_ignore_meaningless_value?
11
- assert !Searchlogic::Condition::Equals.ignore_meaningless_value?
12
- assert Searchlogic::Condition::Keywords.ignore_meaningless_value?
13
- assert !Searchlogic::Condition::NotEqual.ignore_meaningless_value?
14
- end
15
-
16
- def test_value_type
17
- assert_equal nil, Searchlogic::Condition::Equals.value_type
18
- assert_equal nil, Searchlogic::Condition::Keywords.value_type
19
- assert_equal :boolean, Searchlogic::Condition::Nil.value_type
20
- assert_equal :boolean, Searchlogic::Condition::Blank.value_type
21
- assert_equal nil, Searchlogic::Condition::GreaterThan.value_type
22
- end
23
-
24
- def test_initialize
25
- condition = Searchlogic::Condition::Keywords.new(Account, :column => Account.columns_hash["name"])
26
- assert_equal condition.klass, Account
27
- assert_equal Account.columns_hash["name"], condition.column
28
-
29
- condition = Searchlogic::Condition::GreaterThan.new(Account, :column => "id")
30
- assert_equal Account.columns_hash["id"], condition.column
31
-
32
- condition = Searchlogic::Condition::GreaterThan.new(Account, :column => "id", :column_type => :string, :column_sql_format => "some sql")
33
- assert_equal Account.columns_hash["id"], condition.column
34
- condition.value = "awesome"
35
- assert_equal ["some sql > ?", "awesome"], condition.sanitize
36
- end
37
-
38
- def test_explicitly_set_value
39
- condition = Searchlogic::Condition::Keywords.new(Account, :column => Account.columns_hash["name"])
40
- assert !condition.explicitly_set_value?
41
- condition.value = "test"
42
- assert condition.explicitly_set_value?
43
- end
44
-
45
- def test_sanitize
46
- # This is tested thoroughly in test_condition_types
47
- end
48
-
49
- def test_value
50
- # This is tested thoroughly in test_condition_types
51
- end
52
- end
@@ -1,143 +0,0 @@
1
- require File.dirname(__FILE__) + '/test_helper.rb'
2
-
3
- class TestConditionTypes < Test::Unit::TestCase
4
- def test_sanitize
5
- condition = Searchlogic::Condition::BeginsWith.new(Account, :column => Account.columns_hash["name"])
6
- condition.value = "Binary"
7
- assert_equal ["\"accounts\".\"name\" LIKE ?", "Binary%"], condition.sanitize
8
-
9
- condition = Searchlogic::Condition::Blank.new(Account, :column => Account.columns_hash["id"])
10
- condition.value = "true"
11
- assert_equal "\"accounts\".\"id\" IS NULL or \"accounts\".\"id\" = '' or \"accounts\".\"id\" = false", condition.sanitize
12
-
13
- condition = Searchlogic::Condition::Blank.new(Account, :column => Account.columns_hash["id"])
14
- condition.value = "false"
15
- assert_equal "\"accounts\".\"id\" IS NOT NULL and \"accounts\".\"id\" != '' and \"accounts\".\"id\" != false", condition.sanitize
16
-
17
- condition = Searchlogic::Condition::Blank.new(Account, :column => Account.columns_hash["id"])
18
- condition.value = true
19
- assert_equal "\"accounts\".\"id\" IS NULL or \"accounts\".\"id\" = '' or \"accounts\".\"id\" = false", condition.sanitize
20
-
21
- condition = Searchlogic::Condition::Blank.new(Account, :column => Account.columns_hash["id"])
22
- condition.value = false
23
- assert_equal "\"accounts\".\"id\" IS NOT NULL and \"accounts\".\"id\" != '' and \"accounts\".\"id\" != false", condition.sanitize
24
-
25
- condition = Searchlogic::Condition::Blank.new(Account, :column => Account.columns_hash["id"])
26
- condition.value = nil
27
- assert_equal nil, condition.sanitize
28
-
29
- condition = Searchlogic::Condition::Blank.new(Account, :column => Account.columns_hash["id"])
30
- condition.value = ""
31
- assert_equal nil, condition.sanitize
32
-
33
- condition = Searchlogic::Condition::ChildOf.new(User)
34
- condition.value = User.first.id
35
- assert_equal ["\"users\".\"parent_id\" = ?", User.first.id], condition.sanitize
36
-
37
- condition = Searchlogic::Condition::ChildOf.new(User)
38
- condition.value = User.first
39
- assert_equal ["\"users\".\"parent_id\" = ?", User.first.id], condition.sanitize
40
-
41
- condition = Searchlogic::Condition::DescendantOf.new(User)
42
- condition.value = User.find(1)
43
- assert_equal ["\"users\".\"id\" = ? OR \"users\".\"id\" = ?", 2, 3], condition.sanitize
44
-
45
- condition = Searchlogic::Condition::EndsWith.new(Account, :column => Account.columns_hash["name"])
46
- condition.value = "Binary"
47
- assert_equal ["\"accounts\".\"name\" LIKE ?", "%Binary"], condition.sanitize
48
-
49
- condition = Searchlogic::Condition::Equals.new(Account, :column => Account.columns_hash["id"])
50
- condition.value = 12
51
- assert_equal ["\"accounts\".\"id\" = ?", 12], condition.sanitize
52
-
53
- condition = Searchlogic::Condition::Equals.new(Account, :column => Account.columns_hash["id"])
54
- condition.value = [1,2,3,4]
55
- assert_equal ["\"accounts\".\"id\" IN (?)", [1, 2, 3, 4]], condition.sanitize
56
-
57
- condition = Searchlogic::Condition::Equals.new(Account, :column => Account.columns_hash["id"])
58
- condition.value = (1..10)
59
- assert_equal ["\"accounts\".\"id\" BETWEEN ? AND ?", 1, 10], condition.sanitize
60
-
61
- condition = Searchlogic::Condition::GreaterThan.new(Account, :column => Account.columns_hash["id"])
62
- condition.value = 2
63
- assert_equal ["\"accounts\".\"id\" > ?", 2], condition.sanitize
64
-
65
- condition = Searchlogic::Condition::GreaterThanOrEqualTo.new(Account, :column => Account.columns_hash["id"])
66
- condition.value = 2
67
- assert_equal ["\"accounts\".\"id\" >= ?", 2], condition.sanitize
68
-
69
- condition = Searchlogic::Condition::InclusiveDescendantOf.new(User)
70
- condition.value = User.find(1)
71
- assert_equal ["(\"users\".\"id\" = ?) OR (\"users\".\"id\" = ? OR \"users\".\"id\" = ?)", 1, 2, 3], condition.sanitize
72
-
73
- condition = Searchlogic::Condition::Like.new(Account, :column => Account.columns_hash["name"])
74
- condition.value = "Binary and blah"
75
- assert_equal ["\"accounts\".\"name\" LIKE ?", "%Binary and blah%"], condition.sanitize
76
-
77
- condition = Searchlogic::Condition::Nil.new(Account, :column => Account.columns_hash["id"])
78
- condition.value = true
79
- assert_equal "\"accounts\".\"id\" IS NULL", condition.sanitize
80
-
81
- condition = Searchlogic::Condition::Nil.new(Account, :column => Account.columns_hash["id"])
82
- condition.value = false
83
- assert_equal "\"accounts\".\"id\" IS NOT NULL", condition.sanitize
84
-
85
- condition = Searchlogic::Condition::Nil.new(Account, :column => Account.columns_hash["id"])
86
- condition.value = "true"
87
- assert_equal "\"accounts\".\"id\" IS NULL", condition.sanitize
88
-
89
- condition = Searchlogic::Condition::Nil.new(Account, :column => Account.columns_hash["id"])
90
- condition.value = "false"
91
- assert_equal "\"accounts\".\"id\" IS NOT NULL", condition.sanitize
92
-
93
- condition = Searchlogic::Condition::Nil.new(Account, :column => Account.columns_hash["id"])
94
- condition.value = nil
95
- assert_equal nil, condition.sanitize
96
-
97
- condition = Searchlogic::Condition::Nil.new(Account, :column => Account.columns_hash["id"])
98
- condition.value = ""
99
- assert_equal nil, condition.sanitize
100
-
101
- condition = Searchlogic::Condition::NotEqual.new(Account, :column => Account.columns_hash["id"])
102
- condition.value = 12
103
- assert_equal ["\"accounts\".\"id\" != ?", 12], condition.sanitize
104
-
105
- condition = Searchlogic::Condition::NotEqual.new(Account, :column => Account.columns_hash["id"])
106
- condition.value = [1,2,3,4]
107
- assert_equal ["\"accounts\".\"id\" NOT IN (?)", [1, 2, 3, 4]], condition.sanitize
108
-
109
- condition = Searchlogic::Condition::NotEqual.new(Account, :column => Account.columns_hash["id"])
110
- condition.value = (1..10)
111
- assert_equal ["\"accounts\".\"id\" NOT BETWEEN ? AND ?", 1, 10], condition.sanitize
112
-
113
- condition = Searchlogic::Condition::NotNil.new(Account, :column => Account.columns_hash["created_at"])
114
- condition.value = "1"
115
- assert_equal "\"accounts\".\"created_at\" IS NOT NULL", condition.sanitize
116
- condition.value = "false"
117
- assert_equal "\"accounts\".\"created_at\" IS NULL", condition.sanitize
118
-
119
- condition = Searchlogic::Condition::Keywords.new(Account, :column => Account.columns_hash["name"])
120
- condition.value = "freedom yeah, freedom YEAH right"
121
- assert_equal ["\"accounts\".\"name\" LIKE ? AND \"accounts\".\"name\" LIKE ? AND \"accounts\".\"name\" LIKE ?", "%freedom%", "%yeah%", "%right%"], condition.sanitize
122
-
123
- condition = Searchlogic::Condition::Keywords.new(Account, :column => Account.columns_hash["name"])
124
- condition.value = "%^$*(^$)"
125
- assert_equal nil, condition.sanitize
126
-
127
- condition = Searchlogic::Condition::Keywords.new(Account, :column => Account.columns_hash["name"])
128
- condition.value = "%^$*(^$) àáâãäåßéèêëìíîïñòóôõöùúûüýÿ"
129
- assert_equal ["\"accounts\".\"name\" LIKE ?", "%àáâãäåßéèêëìíîïñòóôõöùúûüýÿ%"], condition.sanitize
130
-
131
- condition = Searchlogic::Condition::LessThan.new(Account, :column => Account.columns_hash["id"])
132
- condition.value = 2
133
- assert_equal ["\"accounts\".\"id\" < ?", 2], condition.sanitize
134
-
135
- condition = Searchlogic::Condition::LessThanOrEqualTo.new(Account, :column => Account.columns_hash["id"])
136
- condition.value = 2
137
- assert_equal ["\"accounts\".\"id\" <= ?", 2], condition.sanitize
138
-
139
- condition = Searchlogic::Condition::SiblingOf.new(User)
140
- condition.value = User.find(2)
141
- assert_equal ["(\"users\".\"id\" != ?) AND (\"users\".\"parent_id\" = ?)", 2, 1], condition.sanitize
142
- end
143
- end
@@ -1,242 +0,0 @@
1
- require File.dirname(__FILE__) + '/test_helper.rb'
2
-
3
- class TestConditionsBase < Test::Unit::TestCase
4
- def test_register_conditions
5
- Searchlogic::Conditions::Base.register_condition(Searchlogic::Condition::Keywords)
6
- assert [Searchlogic::Condition::Keywords], Searchlogic::Conditions::Base.conditions
7
-
8
- Searchlogic::Conditions::Base.register_condition(Searchlogic::Condition::Like)
9
- assert [Searchlogic::Condition::Keywords, Searchlogic::Condition::Like], Searchlogic::Conditions::Base.conditions
10
- end
11
-
12
- def test_association_names
13
- assert_equal ["dogs", "children", "user_groups", "orders", "account", "parent", "cats"], Searchlogic::Cache::UserConditions.association_names
14
- assert_equal ["admin", "orders", "users"], Searchlogic::Cache::AccountConditions.association_names
15
- end
16
-
17
- def test_condition_names
18
- # This is tested thoroughly through the tests
19
- end
20
-
21
- def test_needed
22
- assert !Searchlogic::Conditions::Base.needed?(User, {})
23
- assert !Searchlogic::Conditions::Base.needed?(User, {:first_name => "Ben"})
24
- assert Searchlogic::Conditions::Base.needed?(User, {:first_name_contains => "Awesome"})
25
- assert !Searchlogic::Conditions::Base.needed?(User, {"orders.id" => 2})
26
- end
27
-
28
- def test_initialize
29
- conditions = Searchlogic::Cache::AccountConditions.new(:name_contains => "Binary")
30
- assert_equal conditions.klass, Account
31
- assert_equal conditions.name_contains, "Binary"
32
- end
33
-
34
- def test_any
35
- conditions = Searchlogic::Cache::AccountConditions.new
36
- assert !conditions.any?
37
-
38
- conditions = Searchlogic::Cache::AccountConditions.new(:any => true)
39
- assert conditions.any?
40
- conditions.any = "false"
41
- assert !conditions.any?
42
-
43
- conditions = Searchlogic::Cache::AccountConditions.new
44
- conditions.name_contains = "Binary"
45
- assert_equal ["\"accounts\".\"name\" LIKE ?", "%Binary%"], conditions.sanitize
46
- conditions.id = 1
47
- assert_equal ["(\"accounts\".\"id\" = ?) AND (\"accounts\".\"name\" LIKE ?)", 1, "%Binary%"], conditions.sanitize
48
- conditions.any = true
49
- assert_equal ["(\"accounts\".\"id\" = ?) OR (\"accounts\".\"name\" LIKE ?)", 1, "%Binary%"], conditions.sanitize
50
- conditions.any = false
51
- assert_equal ["(\"accounts\".\"id\" = ?) AND (\"accounts\".\"name\" LIKE ?)", 1, "%Binary%"], conditions.sanitize
52
- end
53
-
54
- def test_auto_joins
55
- conditions = Searchlogic::Cache::AccountConditions.new
56
- assert_equal conditions.auto_joins, nil
57
-
58
- conditions.name_like = "Binary"
59
- assert_equal conditions.auto_joins, nil
60
-
61
- conditions.users.first_name_like = "Ben"
62
- assert_equal conditions.auto_joins, :users
63
-
64
- conditions.users.orders.description_like = "apple"
65
- assert_equal conditions.auto_joins, {:users => :orders}
66
- end
67
-
68
- def test_inspect
69
- conditions = Searchlogic::Cache::AccountConditions.new
70
- assert_nothing_raised { conditions.inspect }
71
- end
72
-
73
- def test_sanitize
74
- conditions = Searchlogic::Cache::AccountConditions.new
75
- conditions.name_contains = "Binary"
76
- conditions.id_gt = 5
77
- now = Time.now
78
- conditions.created_after = now
79
- assert_equal ["(\"accounts\".\"created_at\" > ?) AND (\"accounts\".\"id\" > ?) AND (\"accounts\".\"name\" LIKE ?)", now, 5, "%Binary%"], conditions.sanitize
80
-
81
- # test out associations
82
- conditions.users.first_name_like = "Ben"
83
- conditions.users.id_gt = 10
84
- conditions.users.orders.total_lt = 500
85
- assert_equal ["(\"accounts\".\"created_at\" > ?) AND (\"accounts\".\"id\" > ?) AND (\"accounts\".\"name\" LIKE ?) AND ((\"users\".\"first_name\" LIKE ?) AND (\"users\".\"id\" > ?) AND (\"orders\".\"total\" < ?))", now, 5, "%Binary%", "%Ben%", 10, 500], conditions.sanitize
86
-
87
- # test that raw sql is returned
88
- conditions.conditions = "awesome"
89
- assert_equal "awesome", conditions.sanitize
90
- end
91
-
92
- def test_conditions
93
- conditions = Searchlogic::Cache::AccountConditions.new
94
- now = Time.now
95
- v = {:name_like => "Binary", :created_at_greater_than => now}
96
- conditions.conditions = v
97
- assert_equal v, conditions.conditions
98
-
99
- sql = "id in (1,2,3,4)"
100
- conditions.conditions = sql
101
- assert_equal sql, conditions.conditions
102
- assert_equal({}, conditions.send(:objects))
103
-
104
- v2 = {:id_less_than => 5, :name_begins_with => "Beginning of string"}
105
- conditions.conditions = v2
106
- assert_equal v2, conditions.conditions
107
-
108
- v = {:name_like => "Binary", :created_at_greater_than => now}
109
- conditions.conditions = v
110
- assert_equal v2.merge(v), conditions.conditions
111
-
112
- sql2 = "id > 5 and name = 'Test'"
113
- conditions.conditions = sql2
114
- assert_equal sql2, conditions.conditions
115
- assert_equal({}, conditions.send(:objects))
116
-
117
- conditions.name_contains = "awesome"
118
- assert_equal({:name_like => "awesome"}, conditions.conditions)
119
-
120
- now = Time.now
121
- conditions.conditions = {:id_gt => "", :id => "", :name => ["", "", ""], :created_at => ["", now], :name_starts_with => "Ben"}
122
- assert_equal({:name_like => "awesome", :name_begins_with => "Ben", :created_at_equals => now}, conditions.conditions)
123
- end
124
-
125
- # Other general usage tests, need to clean these up
126
-
127
- def test_setting_conditions
128
- [Account, User, Order].each do |klass|
129
- conditions = "Searchlogic::Cache::#{klass}Conditions".constantize.new
130
- conditions.class.condition_names.each do |condition_name|
131
- conditions.send("#{condition_name}=", 1)
132
- assert_equal 1, conditions.send(condition_name)
133
- end
134
- end
135
- end
136
-
137
- def test_accessible_protected_conditions
138
- Account.conditions_accessible << :name_contains
139
- conditions = Searchlogic::Cache::AccountConditions.new
140
- conditions.conditions = {:created_after => Time.now, :name_contains => "Binary"}
141
- assert({:name_contains => "Binary"}, conditions.conditions)
142
- Account.send(:write_inheritable_attribute, :conditions_accessible, nil)
143
-
144
- Account.conditions_protected << :name_contains
145
- conditions = Searchlogic::Cache::AccountConditions.new
146
- now = Time.now
147
- conditions.conditions = {:created_after => now, :name_contains => "Binary"}
148
- assert({:created_after => now}, conditions.conditions)
149
- Account.send(:write_inheritable_attribute, :conditions_protected, nil)
150
- end
151
-
152
- def test_assert_valid_values
153
- conditions = Searchlogic::Cache::UserConditions.new
154
- assert_raise(NoMethodError) { conditions.conditions = {:unknown => "blah"} }
155
- assert_nothing_raised { conditions.conditions = {:first_name => "blah"} }
156
- assert_nothing_raised { conditions.conditions = {:first_name_contains => "blah"} }
157
- end
158
-
159
- def test_setting_associations
160
- conditions = Searchlogic::Cache::AccountConditions.new(:users => {:first_name_like => "Ben"})
161
- assert_equal conditions.users.first_name_like, "Ben"
162
-
163
- conditions.users.last_name_begins_with = "Ben"
164
- assert_equal conditions.users.last_name_begins_with, "Ben"
165
- end
166
-
167
- def test_virtual_columns
168
- conditions = Searchlogic::Cache::AccountConditions.new
169
- conditions.hour_of_created_gt = 2
170
- assert_equal ["strftime('%H', \"accounts\".\"created_at\") > ?", 2], conditions.sanitize
171
- conditions.dow_of_created_at_most = 5
172
- assert_equal ["(strftime('%w', \"accounts\".\"created_at\") <= ?) AND (strftime('%H', \"accounts\".\"created_at\") > ?)", 5, 2], conditions.sanitize
173
- conditions.month_of_created_at_nil = true
174
- assert_equal ["(strftime('%w', \"accounts\".\"created_at\") <= ?) AND (strftime('%H', \"accounts\".\"created_at\") > ?) AND (strftime('%m', \"accounts\".\"created_at\") IS NULL)", 5, 2], conditions.sanitize
175
- conditions.min_of_hour_of_month_of_created_at_nil = true
176
- assert_equal ["(strftime('%w', \"accounts\".\"created_at\") <= ?) AND (strftime('%H', \"accounts\".\"created_at\") > ?) AND (strftime('%m', strftime('%H', strftime('%M', \"accounts\".\"created_at\"))) IS NULL) AND (strftime('%m', \"accounts\".\"created_at\") IS NULL)", 5, 2], conditions.sanitize
177
- end
178
-
179
- def test_objects
180
- conditions = Searchlogic::Cache::AccountConditions.new
181
- assert_equal({}, conditions.send(:objects))
182
-
183
- conditions.name_contains = "Binary"
184
- assert_equal 1, conditions.send(:objects).size
185
-
186
- conditions.users.first_name_contains = "Ben"
187
- assert_equal 2, conditions.send(:objects).size
188
- end
189
-
190
- def test_reset
191
- conditions = Searchlogic::Cache::AccountConditions.new
192
-
193
- conditions.name_contains = "Binary"
194
- assert_equal 1, conditions.send(:objects).size
195
-
196
- conditions.reset_name_like!
197
- conditions.reset_name_contains! # should set up aliases for reset
198
- assert_equal({}, conditions.send(:objects))
199
-
200
- conditions.users.first_name_like = "Ben"
201
- assert_equal 1, conditions.send(:objects).size
202
-
203
- conditions.reset_users!
204
- assert_equal({}, conditions.send(:objects))
205
-
206
- conditions.name_begins_with ="Binary"
207
- conditions.users.orders.total_gt = 200
208
- assert_equal 2, conditions.send(:objects).size
209
-
210
- conditions.reset_name_begins_with!
211
- assert_equal 1, conditions.send(:objects).size
212
-
213
- conditions.reset_users!
214
- assert_equal({}, conditions.send(:objects))
215
- end
216
-
217
- def test_method_conflicts
218
- conditions = Searchlogic::Cache::AccountConditions.new
219
- assert_equal nil, conditions.id
220
- end
221
-
222
- def test_sti
223
- #s = User.new_search
224
- #s.conditions.dogs.description_like = "awesome"
225
- #s.conditions.cats.description_like = "awesome"
226
- #s.select = "ass"
227
- #s.all
228
-
229
- joins = []
230
- join_dependency = ::ActiveRecord::Associations::ClassMethods::JoinDependency.new(User, [:dogs, :cats], nil)
231
- join_dependency.join_associations.each_with_index do |assoc, index|
232
- #raise assoc.aliased_table_name.inspect if index == 1
233
- joins << assoc.association_join
234
- end
235
- #raise joins.inspect
236
-
237
- conditions = Searchlogic::Cache::UserConditions.new
238
- conditions.dogs.description_like = "Harry"
239
- r = User.reflect_on_association(:dogs)
240
- #raise r.inspect
241
- end
242
- end