schof-searchlogic 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.rdoc +302 -0
- data/MIT-LICENSE +20 -0
- data/Manifest +157 -0
- data/README.rdoc +461 -0
- data/Rakefile +13 -0
- data/TODO.rdoc +4 -0
- data/init.rb +1 -0
- data/lib/searchlogic.rb +100 -0
- data/lib/searchlogic/active_record/associations.rb +52 -0
- data/lib/searchlogic/active_record/base.rb +224 -0
- data/lib/searchlogic/active_record/connection_adapters/mysql_adapter.rb +176 -0
- data/lib/searchlogic/active_record/connection_adapters/postgresql_adapter.rb +172 -0
- data/lib/searchlogic/active_record/connection_adapters/sqlite_adapter.rb +80 -0
- data/lib/searchlogic/condition/base.rb +165 -0
- data/lib/searchlogic/condition/begins_with.rb +17 -0
- data/lib/searchlogic/condition/blank.rb +21 -0
- data/lib/searchlogic/condition/child_of.rb +11 -0
- data/lib/searchlogic/condition/descendant_of.rb +11 -0
- data/lib/searchlogic/condition/ends_with.rb +17 -0
- data/lib/searchlogic/condition/equals.rb +33 -0
- data/lib/searchlogic/condition/greater_than.rb +15 -0
- data/lib/searchlogic/condition/greater_than_or_equal_to.rb +15 -0
- data/lib/searchlogic/condition/inclusive_descendant_of.rb +10 -0
- data/lib/searchlogic/condition/keywords.rb +47 -0
- data/lib/searchlogic/condition/less_than.rb +15 -0
- data/lib/searchlogic/condition/less_than_or_equal_to.rb +15 -0
- data/lib/searchlogic/condition/like.rb +15 -0
- data/lib/searchlogic/condition/nested_set.rb +17 -0
- data/lib/searchlogic/condition/nil.rb +21 -0
- data/lib/searchlogic/condition/not_begin_with.rb +20 -0
- data/lib/searchlogic/condition/not_blank.rb +19 -0
- data/lib/searchlogic/condition/not_end_with.rb +20 -0
- data/lib/searchlogic/condition/not_equal.rb +27 -0
- data/lib/searchlogic/condition/not_have_keywords.rb +20 -0
- data/lib/searchlogic/condition/not_like.rb +20 -0
- data/lib/searchlogic/condition/not_nil.rb +19 -0
- data/lib/searchlogic/condition/sibling_of.rb +14 -0
- data/lib/searchlogic/conditions/any_or_all.rb +42 -0
- data/lib/searchlogic/conditions/base.rb +244 -0
- data/lib/searchlogic/conditions/groups.rb +74 -0
- data/lib/searchlogic/conditions/magic_methods.rb +286 -0
- data/lib/searchlogic/conditions/multiparameter_attributes.rb +105 -0
- data/lib/searchlogic/conditions/protection.rb +36 -0
- data/lib/searchlogic/config.rb +31 -0
- data/lib/searchlogic/config/helpers.rb +338 -0
- data/lib/searchlogic/config/search.rb +53 -0
- data/lib/searchlogic/core_ext/hash.rb +75 -0
- data/lib/searchlogic/core_ext/object.rb +19 -0
- data/lib/searchlogic/helpers/control_types/link.rb +310 -0
- data/lib/searchlogic/helpers/control_types/links.rb +242 -0
- data/lib/searchlogic/helpers/control_types/remote_link.rb +87 -0
- data/lib/searchlogic/helpers/control_types/remote_links.rb +72 -0
- data/lib/searchlogic/helpers/control_types/remote_select.rb +36 -0
- data/lib/searchlogic/helpers/control_types/select.rb +82 -0
- data/lib/searchlogic/helpers/form.rb +208 -0
- data/lib/searchlogic/helpers/utilities.rb +197 -0
- data/lib/searchlogic/modifiers/absolute.rb +15 -0
- data/lib/searchlogic/modifiers/acos.rb +11 -0
- data/lib/searchlogic/modifiers/asin.rb +11 -0
- data/lib/searchlogic/modifiers/atan.rb +11 -0
- data/lib/searchlogic/modifiers/avg.rb +15 -0
- data/lib/searchlogic/modifiers/base.rb +27 -0
- data/lib/searchlogic/modifiers/ceil.rb +15 -0
- data/lib/searchlogic/modifiers/char_length.rb +15 -0
- data/lib/searchlogic/modifiers/cos.rb +15 -0
- data/lib/searchlogic/modifiers/cot.rb +15 -0
- data/lib/searchlogic/modifiers/count.rb +11 -0
- data/lib/searchlogic/modifiers/day_of_month.rb +15 -0
- data/lib/searchlogic/modifiers/day_of_week.rb +15 -0
- data/lib/searchlogic/modifiers/day_of_year.rb +15 -0
- data/lib/searchlogic/modifiers/degrees.rb +11 -0
- data/lib/searchlogic/modifiers/exp.rb +15 -0
- data/lib/searchlogic/modifiers/floor.rb +15 -0
- data/lib/searchlogic/modifiers/hex.rb +11 -0
- data/lib/searchlogic/modifiers/hour.rb +11 -0
- data/lib/searchlogic/modifiers/log.rb +15 -0
- data/lib/searchlogic/modifiers/log10.rb +11 -0
- data/lib/searchlogic/modifiers/log2.rb +11 -0
- data/lib/searchlogic/modifiers/lower.rb +15 -0
- data/lib/searchlogic/modifiers/ltrim.rb +15 -0
- data/lib/searchlogic/modifiers/md5.rb +11 -0
- data/lib/searchlogic/modifiers/microseconds.rb +11 -0
- data/lib/searchlogic/modifiers/milliseconds.rb +11 -0
- data/lib/searchlogic/modifiers/minute.rb +15 -0
- data/lib/searchlogic/modifiers/month.rb +15 -0
- data/lib/searchlogic/modifiers/octal.rb +15 -0
- data/lib/searchlogic/modifiers/radians.rb +11 -0
- data/lib/searchlogic/modifiers/round.rb +11 -0
- data/lib/searchlogic/modifiers/rtrim.rb +15 -0
- data/lib/searchlogic/modifiers/second.rb +15 -0
- data/lib/searchlogic/modifiers/sign.rb +11 -0
- data/lib/searchlogic/modifiers/sin.rb +11 -0
- data/lib/searchlogic/modifiers/square_root.rb +15 -0
- data/lib/searchlogic/modifiers/sum.rb +11 -0
- data/lib/searchlogic/modifiers/tan.rb +15 -0
- data/lib/searchlogic/modifiers/trim.rb +15 -0
- data/lib/searchlogic/modifiers/upper.rb +15 -0
- data/lib/searchlogic/modifiers/week.rb +11 -0
- data/lib/searchlogic/modifiers/year.rb +11 -0
- data/lib/searchlogic/search/base.rb +148 -0
- data/lib/searchlogic/search/conditions.rb +53 -0
- data/lib/searchlogic/search/ordering.rb +244 -0
- data/lib/searchlogic/search/pagination.rb +121 -0
- data/lib/searchlogic/search/protection.rb +89 -0
- data/lib/searchlogic/search/searching.rb +32 -0
- data/lib/searchlogic/shared/utilities.rb +56 -0
- data/lib/searchlogic/shared/virtual_classes.rb +39 -0
- data/lib/searchlogic/version.rb +79 -0
- data/searchlogic.gemspec +41 -0
- data/test/active_record_tests/associations_test.rb +94 -0
- data/test/active_record_tests/base_test.rb +115 -0
- data/test/condition_tests/base_test.rb +54 -0
- data/test/condition_tests/begins_with_test.rb +11 -0
- data/test/condition_tests/blank_test.rb +31 -0
- data/test/condition_tests/child_of_test.rb +17 -0
- data/test/condition_tests/descendant_of_test.rb +12 -0
- data/test/condition_tests/ends_with_test.rb +11 -0
- data/test/condition_tests/equals_test.rb +28 -0
- data/test/condition_tests/greater_than_or_equal_to_test.rb +11 -0
- data/test/condition_tests/greater_than_test.rb +11 -0
- data/test/condition_tests/inclusive_descendant_of_test.rb +12 -0
- data/test/condition_tests/keywords_test.rb +23 -0
- data/test/condition_tests/less_than_or_equal_to_test.rb +11 -0
- data/test/condition_tests/less_than_test.rb +11 -0
- data/test/condition_tests/like_test.rb +11 -0
- data/test/condition_tests/nil_test.rb +31 -0
- data/test/condition_tests/not_begin_with_test.rb +8 -0
- data/test/condition_tests/not_blank_test.rb +8 -0
- data/test/condition_tests/not_end_with_test.rb +8 -0
- data/test/condition_tests/not_equal_test.rb +19 -0
- data/test/condition_tests/not_have_keywords_test.rb +8 -0
- data/test/condition_tests/not_like_test.rb +8 -0
- data/test/condition_tests/not_nil_test.rb +13 -0
- data/test/condition_tests/sibling_of_test.rb +15 -0
- data/test/conditions_tests/any_or_all_test.rb +23 -0
- data/test/conditions_tests/base_test.rb +185 -0
- data/test/conditions_tests/groups_test.rb +68 -0
- data/test/conditions_tests/magic_methods_test.rb +36 -0
- data/test/conditions_tests/multiparameter_attributes_test.rb +15 -0
- data/test/conditions_tests/protection_test.rb +18 -0
- data/test/config_test.rb +23 -0
- data/test/fixtures/accounts.yml +12 -0
- data/test/fixtures/animals.yml +7 -0
- data/test/fixtures/orders.yml +12 -0
- data/test/fixtures/user_groups.yml +5 -0
- data/test/fixtures/users.yml +45 -0
- data/test/libs/awesome_nested_set.rb +545 -0
- data/test/libs/awesome_nested_set/compatability.rb +29 -0
- data/test/libs/awesome_nested_set/helper.rb +40 -0
- data/test/libs/awesome_nested_set/named_scope.rb +140 -0
- data/test/libs/rexml_fix.rb +14 -0
- data/test/modifier_tests/day_of_month_test.rb +16 -0
- data/test/search_tests/base_test.rb +241 -0
- data/test/search_tests/conditions_test.rb +21 -0
- data/test/search_tests/ordering_test.rb +167 -0
- data/test/search_tests/pagination_test.rb +74 -0
- data/test/search_tests/protection_test.rb +26 -0
- data/test/test_helper.rb +116 -0
- metadata +385 -0
@@ -0,0 +1,94 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../test_helper.rb'
|
2
|
+
|
3
|
+
module ActiveRecordTests
|
4
|
+
class AssociationsTest < ActiveSupport::TestCase
|
5
|
+
def test_has_many
|
6
|
+
binary_logic = accounts(:binary_logic)
|
7
|
+
ben = users(:ben)
|
8
|
+
jennifer = users(:jennifer)
|
9
|
+
|
10
|
+
search = binary_logic.users.new_search
|
11
|
+
assert_kind_of Searchlogic::Search::Base, search
|
12
|
+
assert_equal User, search.klass
|
13
|
+
assert_equal({:conditions => "\"users\".account_id = #{binary_logic.id}"}, search.scope)
|
14
|
+
|
15
|
+
assert_equal [ben, jennifer], search.all
|
16
|
+
assert_equal ben, search.first
|
17
|
+
assert_equal ((ben.id + jennifer.id) / 2.0), search.average("id")
|
18
|
+
assert_equal 2, search.count
|
19
|
+
|
20
|
+
search.conditions.first_name_contains = "Ben"
|
21
|
+
|
22
|
+
assert_equal [ben], search.all
|
23
|
+
assert_equal ben, search.first
|
24
|
+
assert_equal ben.id, search.average("id")
|
25
|
+
assert_equal 1, search.count
|
26
|
+
|
27
|
+
assert_equal 2, binary_logic.users.count
|
28
|
+
assert_equal 1, binary_logic.users.all(:conditions => {:first_name_contains => "Ben"}).size
|
29
|
+
assert_equal 0, binary_logic.users.all(:conditions => {:first_name_contains => "No one"}).size
|
30
|
+
assert_equal ben.id, binary_logic.users.sum("id", :conditions => {:first_name_contains => "Ben"})
|
31
|
+
assert_equal 0, binary_logic.users.sum("id", :conditions => {:first_name_contains => "No one"})
|
32
|
+
assert_equal ben.id, binary_logic.users.average("id", :conditions => {:first_name_contains => "Ben"})
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_has_many_through
|
36
|
+
binary_logic = accounts(:binary_logic)
|
37
|
+
|
38
|
+
search = binary_logic.orders.new_search
|
39
|
+
assert_kind_of Searchlogic::Search::Base, search
|
40
|
+
assert_equal Order, search.klass
|
41
|
+
assert_equal({:joins => "INNER JOIN users ON orders.user_id = users.id ", :conditions => "(\"users\".account_id = #{binary_logic.id})"}, search.scope)
|
42
|
+
|
43
|
+
bens_order = orders(:bens_order)
|
44
|
+
assert_equal [bens_order], search.all
|
45
|
+
assert_equal bens_order, search.first
|
46
|
+
assert_equal bens_order.id, search.average("id")
|
47
|
+
assert_equal 1, search.count
|
48
|
+
|
49
|
+
search.conditions.total_gt = 100
|
50
|
+
|
51
|
+
assert_equal [bens_order], search.all
|
52
|
+
assert_equal bens_order, search.first
|
53
|
+
assert_equal bens_order.id, search.average("id")
|
54
|
+
assert_equal 1, search.count
|
55
|
+
|
56
|
+
assert_equal 1, binary_logic.orders.count
|
57
|
+
assert_equal 1, binary_logic.orders.all(:conditions => {:total_gt => 100}).size
|
58
|
+
assert_equal 0, binary_logic.orders.all(:conditions => {:total_gt => 1000}).size
|
59
|
+
assert_equal bens_order.id, binary_logic.orders.sum("id", :conditions => {:total_gt => 100})
|
60
|
+
assert_equal 0, binary_logic.orders.sum("id", :conditions => {:total_gt => 1000})
|
61
|
+
assert_equal bens_order.id, binary_logic.orders.average("id", :conditions => {:total_gt => 100})
|
62
|
+
end
|
63
|
+
|
64
|
+
def test_habtm
|
65
|
+
neco = user_groups(:neco)
|
66
|
+
ben = users(:ben)
|
67
|
+
drew = users(:drew)
|
68
|
+
|
69
|
+
search = neco.users.new_search
|
70
|
+
assert_kind_of Searchlogic::Search::Base, search
|
71
|
+
assert_equal User, search.klass
|
72
|
+
assert_equal({:conditions => "\"user_groups_users\".user_group_id = #{neco.id} ", :joins => "INNER JOIN \"user_groups_users\" ON \"users\".id = \"user_groups_users\".user_id"}, search.scope)
|
73
|
+
assert_equal [drew, ben], search.all
|
74
|
+
|
75
|
+
assert_equal drew, search.first
|
76
|
+
assert_equal ((ben.id + drew.id) / 2.0).to_s, search.average("id").to_s
|
77
|
+
assert_equal 2, search.count
|
78
|
+
|
79
|
+
search.conditions.first_name_contains = "Ben"
|
80
|
+
|
81
|
+
assert_equal [ben], search.all
|
82
|
+
assert_equal ben, search.first
|
83
|
+
assert_equal ben.id, search.average("id")
|
84
|
+
assert_equal 1, search.count
|
85
|
+
|
86
|
+
assert_equal 2, neco.users.count
|
87
|
+
assert_equal 1, neco.users.all(:conditions => {:first_name_contains => "Ben"}).size
|
88
|
+
assert_equal 0, neco.users.all(:conditions => {:first_name_contains => "No one"}).size
|
89
|
+
assert_equal ben.id, neco.users.sum("id", :conditions => {:first_name_contains => "Ben"})
|
90
|
+
assert_equal 0, neco.users.sum("id", :conditions => {:first_name_contains => "No one"})
|
91
|
+
assert_equal ben.id, neco.users.average("id", :conditions => {:first_name_contains => "Ben"})
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
@@ -0,0 +1,115 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../test_helper.rb'
|
2
|
+
|
3
|
+
module ActiveRecordTests
|
4
|
+
class BaseTest < ActiveSupport::TestCase
|
5
|
+
def test_standard_find
|
6
|
+
binary_logic = accounts(:binary_logic)
|
7
|
+
neco = accounts(:neco)
|
8
|
+
binary_fun = accounts(:binary_fun)
|
9
|
+
|
10
|
+
assert_equal [binary_logic, binary_fun, neco], Account.all
|
11
|
+
assert_equal binary_logic, Account.first
|
12
|
+
|
13
|
+
assert_equal [binary_logic, binary_fun, neco], Account.find(:all)
|
14
|
+
assert_equal [binary_logic], Account.find(:all, :conditions => {:name => "Binary Logic"})
|
15
|
+
assert_equal [binary_logic], Account.find(:all, :conditions => ["name = ?", "Binary Logic"])
|
16
|
+
assert_equal [binary_logic], Account.find(:all, :conditions => "name = 'Binary Logic'")
|
17
|
+
assert_equal binary_logic, Account.find(:first)
|
18
|
+
assert_equal [binary_logic, binary_fun, neco], Account.find(:all, nil)
|
19
|
+
assert_equal [binary_logic, binary_fun, neco], Account.find(:all, {})
|
20
|
+
assert_equal [binary_logic, binary_fun, neco], Account.find(:all, :select => "id, name")
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_standard_calculations
|
24
|
+
binary_logic = accounts(:binary_logic)
|
25
|
+
neco = accounts(:neco)
|
26
|
+
binary_fun = accounts(:binary_fun)
|
27
|
+
|
28
|
+
assert_equal 3, Account.count({})
|
29
|
+
assert_equal 3, Account.count(nil)
|
30
|
+
assert_equal 3, Account.count(:limit => 1)
|
31
|
+
assert_equal 0, Account.count(:limit => 10, :offset => 10)
|
32
|
+
assert_equal binary_logic.id + neco.id + binary_fun.id, Account.sum("id")
|
33
|
+
assert_equal binary_logic.id + neco.id + binary_fun.id, Account.sum("id", {})
|
34
|
+
assert_equal (binary_logic.id + neco.id + binary_fun.id) / 3.0, Account.average("id")
|
35
|
+
assert_equal neco.id, Account.maximum("id")
|
36
|
+
assert_equal binary_logic.id, Account.minimum("id")
|
37
|
+
end
|
38
|
+
|
39
|
+
def test_valid_ar_options
|
40
|
+
assert_equal [:conditions, :include, :joins, :limit, :offset, :order, :select, :readonly, :group, :from, :lock], ActiveRecord::Base.valid_find_options
|
41
|
+
assert_equal [:conditions, :joins, :order, :select, :group, :having, :distinct, :limit, :offset, :include, :from], ActiveRecord::Base.valid_calculations_options
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_build_search
|
45
|
+
search = Account.new_search(:conditions => {:name_keywords => "awesome"}, :page => 2, :per_page => 15)
|
46
|
+
assert_kind_of Searchlogic::Search::Base, search
|
47
|
+
assert_equal({}, search.scope)
|
48
|
+
assert_equal Account, search.klass
|
49
|
+
assert_equal "awesome", search.conditions.name_keywords
|
50
|
+
assert_equal 2, search.page
|
51
|
+
assert_equal 15, search.per_page
|
52
|
+
end
|
53
|
+
|
54
|
+
def test_searchlogic_searching
|
55
|
+
binary_logic = accounts(:binary_logic)
|
56
|
+
neco = accounts(:neco)
|
57
|
+
binary_fun = accounts(:binary_fun)
|
58
|
+
|
59
|
+
assert_equal [binary_logic, binary_fun], Account.all(:conditions => {:name_contains => "Binary"})
|
60
|
+
assert_equal [binary_logic], Account.all(:conditions => {:name_contains => "Binary", :users => {:first_name_starts_with => "Ben"}})
|
61
|
+
assert_equal [], Account.all(:conditions => {:name_contains => "Binary", :users => {:first_name_starts_with => "Ben", :last_name => "Mills"}})
|
62
|
+
assert_equal [binary_logic, neco], Account.all(:conditions => {:users => {:id_gt => 0}}, :include => :users)
|
63
|
+
|
64
|
+
read_only_accounts = Account.all(:conditions => {:name_contains => "Binary"}, :readonly => true)
|
65
|
+
assert read_only_accounts.first.readonly?
|
66
|
+
|
67
|
+
assert_equal [binary_logic, binary_fun], Account.all(:conditions => {:name_contains => "Binary"}, :page => 2)
|
68
|
+
assert_equal [], Account.all(:conditions => {:name_contains => "Binary"}, :page => 2, :per_page => 20)
|
69
|
+
|
70
|
+
assert_equal [binary_logic], Account.scope1.all(:conditions => {:users => {:first_name_starts_with => "Ben"}})
|
71
|
+
end
|
72
|
+
|
73
|
+
def test_searchlogic_counting
|
74
|
+
assert_equal 2, Account.count(:conditions => {:name_contains => "Binary"})
|
75
|
+
assert_equal 1, Account.count(:conditions => {:name_contains => "Binary", :users => {:first_name_contains => "Ben"}})
|
76
|
+
assert_equal 1, Account.count(:conditions => {:name_contains => "Binary", :users => {:first_name_contains => "Ben"}}, :limit => 10, :offset => 10, :order_by => "id", :group => "accounts.id")
|
77
|
+
end
|
78
|
+
|
79
|
+
def test_scoping
|
80
|
+
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) })
|
81
|
+
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) })
|
82
|
+
end
|
83
|
+
|
84
|
+
def test_accessible_conditions
|
85
|
+
Account.conditions_accessible :name_contains
|
86
|
+
assert_equal Set.new(["name_contains"]), Account.accessible_conditions
|
87
|
+
Account.conditions_accessible :id_gt
|
88
|
+
assert_equal Set.new(["id_gt", "name_contains"]), Account.accessible_conditions
|
89
|
+
Account.conditions_accessible :id_gt, :name_contains
|
90
|
+
assert_equal Set.new(["id_gt", "name_contains"]), Account.accessible_conditions
|
91
|
+
Account.send(:write_inheritable_attribute, :conditions_accessible, nil)
|
92
|
+
end
|
93
|
+
|
94
|
+
def test_protected_conditions
|
95
|
+
Account.conditions_protected :name_contains
|
96
|
+
assert_equal Set.new(["name_contains"]), Account.protected_conditions
|
97
|
+
Account.conditions_protected :id_gt
|
98
|
+
assert_equal Set.new(["id_gt", "name_contains"]), Account.protected_conditions
|
99
|
+
Account.conditions_protected :id_gt, :name_contains
|
100
|
+
assert_equal Set.new(["id_gt", "name_contains"]), Account.protected_conditions
|
101
|
+
Account.send(:write_inheritable_attribute, :conditions_protected, nil)
|
102
|
+
end
|
103
|
+
|
104
|
+
def test_includes
|
105
|
+
assert_nothing_raised { Account.all(:conditions => {:users => {:first_name_like => "Ben"}}, :include => :users) }
|
106
|
+
end
|
107
|
+
|
108
|
+
def test_remove_duplicate_joins
|
109
|
+
query = "SELECT DISTINCT `ticket_groups`.* FROM `ticket_groups` INNER JOIN tickets ON ticket_groups.id = tickets.ticket_group_id LEFT OUTER JOIN `tickets` ON tickets.ticket_group_id = ticket_groups.id WHERE (`tickets`.`id` = 2) AND ((`tickets`.event_id = 810802042)) LIMIT 20"
|
110
|
+
cleaned_query = ActiveRecord::Base.send(:remove_duplicate_joins, query)
|
111
|
+
expected_query = "SELECT DISTINCT `ticket_groups`.* FROM `ticket_groups` INNER JOIN tickets ON ticket_groups.id = tickets.ticket_group_id WHERE (`tickets`.`id` = 2) AND ((`tickets`.event_id = 810802042)) LIMIT 20"
|
112
|
+
assert_equal expected_query, cleaned_query
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../test_helper.rb'
|
2
|
+
|
3
|
+
module ConditionTests
|
4
|
+
class BaseTest < ActiveSupport::TestCase
|
5
|
+
def test_condition_type_name
|
6
|
+
assert_equal "equals", Searchlogic::Condition::Equals.condition_type_name
|
7
|
+
assert_equal "keywords", Searchlogic::Condition::Keywords.condition_type_name
|
8
|
+
assert_equal "greater_than_or_equal_to", Searchlogic::Condition::GreaterThanOrEqualTo.condition_type_name
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_ignore_meaningless_value?
|
12
|
+
assert !Searchlogic::Condition::Equals.ignore_meaningless_value?
|
13
|
+
assert Searchlogic::Condition::Keywords.ignore_meaningless_value?
|
14
|
+
assert !Searchlogic::Condition::NotEqual.ignore_meaningless_value?
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_value_type
|
18
|
+
assert_nil Searchlogic::Condition::Equals.value_type
|
19
|
+
assert_nil Searchlogic::Condition::Keywords.value_type
|
20
|
+
assert_equal :boolean, Searchlogic::Condition::Nil.value_type
|
21
|
+
assert_equal :boolean, Searchlogic::Condition::Blank.value_type
|
22
|
+
assert_nil Searchlogic::Condition::GreaterThan.value_type
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_initialize
|
26
|
+
condition = Searchlogic::Condition::Keywords.new(Account, :column => Account.columns_hash["name"])
|
27
|
+
assert_equal condition.klass, Account
|
28
|
+
assert_equal Account.columns_hash["name"], condition.column
|
29
|
+
|
30
|
+
condition = Searchlogic::Condition::GreaterThan.new(Account, :column => "id")
|
31
|
+
assert_equal Account.columns_hash["id"], condition.column
|
32
|
+
|
33
|
+
condition = Searchlogic::Condition::GreaterThan.new(Account, :column => "id", :column_type => :string, :column_sql_format => "some sql")
|
34
|
+
assert_equal Account.columns_hash["id"], condition.column
|
35
|
+
condition.value = "awesome"
|
36
|
+
assert_equal ["some sql > ?", "awesome"], condition.sanitize
|
37
|
+
end
|
38
|
+
|
39
|
+
def test_explicitly_set_value
|
40
|
+
condition = Searchlogic::Condition::Keywords.new(Account, :column => Account.columns_hash["name"])
|
41
|
+
assert !condition.explicitly_set_value?
|
42
|
+
condition.value = "test"
|
43
|
+
assert condition.explicitly_set_value?
|
44
|
+
end
|
45
|
+
|
46
|
+
def test_sanitize
|
47
|
+
# This is tested thoroughly in test_condition_types
|
48
|
+
end
|
49
|
+
|
50
|
+
def test_value
|
51
|
+
# This is tested thoroughly in test_condition_types
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../test_helper.rb'
|
2
|
+
|
3
|
+
module ConditionTests
|
4
|
+
class BeginsWithTest < ActiveSupport::TestCase
|
5
|
+
def test_sanitize
|
6
|
+
condition = Searchlogic::Condition::BeginsWith.new(Account, :column => Account.columns_hash["name"])
|
7
|
+
condition.value = "Binary"
|
8
|
+
assert_equal ["\"accounts\".\"name\" LIKE ?", "Binary%"], condition.sanitize
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../test_helper.rb'
|
2
|
+
|
3
|
+
module ConditionTests
|
4
|
+
class BlankTest < ActiveSupport::TestCase
|
5
|
+
def test_sanitize
|
6
|
+
condition = Searchlogic::Condition::Blank.new(Account, :column => Account.columns_hash["id"])
|
7
|
+
condition.value = "true"
|
8
|
+
assert_equal "(\"accounts\".\"id\" IS NULL or \"accounts\".\"id\" = '' or \"accounts\".\"id\" = false)", condition.sanitize
|
9
|
+
|
10
|
+
condition = Searchlogic::Condition::Blank.new(Account, :column => Account.columns_hash["id"])
|
11
|
+
condition.value = "false"
|
12
|
+
assert_equal "(\"accounts\".\"id\" IS NOT NULL and \"accounts\".\"id\" != '' and \"accounts\".\"id\" != false)", condition.sanitize
|
13
|
+
|
14
|
+
condition = Searchlogic::Condition::Blank.new(Account, :column => Account.columns_hash["id"])
|
15
|
+
condition.value = true
|
16
|
+
assert_equal "(\"accounts\".\"id\" IS NULL or \"accounts\".\"id\" = '' or \"accounts\".\"id\" = false)", condition.sanitize
|
17
|
+
|
18
|
+
condition = Searchlogic::Condition::Blank.new(Account, :column => Account.columns_hash["id"])
|
19
|
+
condition.value = false
|
20
|
+
assert_equal "(\"accounts\".\"id\" IS NOT NULL and \"accounts\".\"id\" != '' and \"accounts\".\"id\" != false)", condition.sanitize
|
21
|
+
|
22
|
+
condition = Searchlogic::Condition::Blank.new(Account, :column => Account.columns_hash["id"])
|
23
|
+
condition.value = nil
|
24
|
+
assert_nil condition.sanitize
|
25
|
+
|
26
|
+
condition = Searchlogic::Condition::Blank.new(Account, :column => Account.columns_hash["id"])
|
27
|
+
condition.value = ""
|
28
|
+
assert_nil condition.sanitize
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../test_helper.rb'
|
2
|
+
|
3
|
+
module ConditionTests
|
4
|
+
class ChildOfTest < ActiveSupport::TestCase
|
5
|
+
def test_sanitize
|
6
|
+
ben = users(:ben)
|
7
|
+
|
8
|
+
condition = Searchlogic::Condition::ChildOf.new(User)
|
9
|
+
condition.value = ben.id
|
10
|
+
assert_equal ["\"users\".\"parent_id\" = ?", ben.id], condition.sanitize
|
11
|
+
|
12
|
+
condition = Searchlogic::Condition::ChildOf.new(User)
|
13
|
+
condition.value = ben
|
14
|
+
assert_equal ["\"users\".\"parent_id\" = ?", ben.id], condition.sanitize
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../test_helper.rb'
|
2
|
+
|
3
|
+
module ConditionTests
|
4
|
+
class DescendantOfTest < ActiveSupport::TestCase
|
5
|
+
def test_sanitize
|
6
|
+
ben = users(:ben)
|
7
|
+
condition = Searchlogic::Condition::DescendantOf.new(User)
|
8
|
+
condition.value = ben
|
9
|
+
assert_equal ["(\"users\".\"id\" != ? AND (\"users\".\"lft\" >= ? AND \"users\".\"rgt\" <= ?))", ben.id, ben.left, ben.right], condition.sanitize
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../test_helper.rb'
|
2
|
+
|
3
|
+
module ConditionTests
|
4
|
+
class EndsWithTest < ActiveSupport::TestCase
|
5
|
+
def test_sanitize
|
6
|
+
condition = Searchlogic::Condition::EndsWith.new(Account, :column => Account.columns_hash["name"])
|
7
|
+
condition.value = "Binary"
|
8
|
+
assert_equal ["\"accounts\".\"name\" LIKE ?", "%Binary"], condition.sanitize
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../test_helper.rb'
|
2
|
+
|
3
|
+
module ConditionTests
|
4
|
+
class EqualsTest < ActiveSupport::TestCase
|
5
|
+
def test_sanitize
|
6
|
+
condition = Searchlogic::Condition::Equals.new(Account, :column => Account.columns_hash["id"])
|
7
|
+
condition.value = 12
|
8
|
+
assert_equal ["\"accounts\".\"id\" = ?", 12], condition.sanitize
|
9
|
+
|
10
|
+
condition = Searchlogic::Condition::Equals.new(Account, :column => Account.columns_hash["id"])
|
11
|
+
condition.value = [1,2,3,4]
|
12
|
+
assert_equal ["\"accounts\".\"id\" IN (?)", [1, 2, 3, 4]], condition.sanitize
|
13
|
+
|
14
|
+
condition = Searchlogic::Condition::Equals.new(Account, :column => Account.columns_hash["id"])
|
15
|
+
condition.value = []
|
16
|
+
assert_equal [], condition.value
|
17
|
+
assert_nil condition.sanitize
|
18
|
+
|
19
|
+
search = User.new_search
|
20
|
+
search.conditions.id = []
|
21
|
+
assert_equal [], search.conditions.id
|
22
|
+
|
23
|
+
condition = Searchlogic::Condition::Equals.new(Account, :column => Account.columns_hash["id"])
|
24
|
+
condition.value = (1..10)
|
25
|
+
assert_equal ["\"accounts\".\"id\" BETWEEN ? AND ?", 1, 10], condition.sanitize
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../test_helper.rb'
|
2
|
+
|
3
|
+
module ConditionTests
|
4
|
+
class GreaterThanOrEqualToTest < ActiveSupport::TestCase
|
5
|
+
def test_sanitize
|
6
|
+
condition = Searchlogic::Condition::GreaterThanOrEqualTo.new(Account, :column => Account.columns_hash["id"])
|
7
|
+
condition.value = 2
|
8
|
+
assert_equal ["\"accounts\".\"id\" >= ?", 2], condition.sanitize
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../test_helper.rb'
|
2
|
+
|
3
|
+
module ConditionTests
|
4
|
+
class GreaterThanTest < ActiveSupport::TestCase
|
5
|
+
def test_sanitize
|
6
|
+
condition = Searchlogic::Condition::GreaterThan.new(Account, :column => Account.columns_hash["id"])
|
7
|
+
condition.value = 2
|
8
|
+
assert_equal ["\"accounts\".\"id\" > ?", 2], condition.sanitize
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../test_helper.rb'
|
2
|
+
|
3
|
+
module ConditionTests
|
4
|
+
class InclusiveDescendantOfTest < ActiveSupport::TestCase
|
5
|
+
def test_sanitize
|
6
|
+
ben = users(:ben)
|
7
|
+
condition = Searchlogic::Condition::InclusiveDescendantOf.new(User)
|
8
|
+
condition.value = ben
|
9
|
+
assert_equal ["(\"users\".\"lft\" >= ? AND \"users\".\"rgt\" <= ?)", ben.left, ben.right], condition.sanitize
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../test_helper.rb'
|
2
|
+
|
3
|
+
module ConditionTests
|
4
|
+
class KeywordsTest < ActiveSupport::TestCase
|
5
|
+
def test_sanitize
|
6
|
+
condition = Searchlogic::Condition::Keywords.new(Account, :column => Account.columns_hash["name"])
|
7
|
+
condition.value = "freedom yeah, freedom YEAH right"
|
8
|
+
assert_equal ["\"accounts\".\"name\" LIKE ? AND \"accounts\".\"name\" LIKE ? AND \"accounts\".\"name\" LIKE ?", "%freedom%", "%yeah%", "%right%"], condition.sanitize
|
9
|
+
|
10
|
+
condition = Searchlogic::Condition::Keywords.new(Account, :column => Account.columns_hash["name"])
|
11
|
+
condition.value = "%^$*(^$)"
|
12
|
+
assert_nil condition.sanitize
|
13
|
+
|
14
|
+
condition = Searchlogic::Condition::Keywords.new(Account, :column => Account.columns_hash["name"])
|
15
|
+
condition.value = "%^$*(^$) àáâãäåßéèêëìíîïñòóôõöùúûüýÿ"
|
16
|
+
assert_equal ["\"accounts\".\"name\" LIKE ?", "%àáâãäåßéèêëìíîïñòóôõöùúûüýÿ%"], condition.sanitize
|
17
|
+
|
18
|
+
condition = Searchlogic::Condition::Keywords.new(Account, :column => Account.columns_hash["name"])
|
19
|
+
condition.value = "ben@ben.com"
|
20
|
+
assert_equal ["\"accounts\".\"name\" LIKE ?", "%ben@ben.com%"], condition.sanitize
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|