3
3
4
4
describe 'RailsAdmin::Adapters::ActiveRecord' , active_record : true do
5
5
before do
6
- @like = if ::ActiveRecord ::Base . configurations [ Rails . env ] [ 'adapter' ] == 'postgresql'
6
+ @like = if [ 'postgresql' , 'postgis' ] . include? ::ActiveRecord ::Base . configurations [ Rails . env ] [ 'adapter' ]
7
7
'(field ILIKE ?)'
8
8
else
9
9
'(LOWER(field) LIKE ?)'
@@ -36,7 +36,11 @@ def predicates_for(scope)
36
36
let ( :abstract_model ) { RailsAdmin ::AbstractModel . new ( 'Player' ) }
37
37
38
38
before do
39
- @players = FactoryGirl . create_list ( :player , 3 )
39
+ @players = FactoryGirl . create_list ( :player , 3 ) + [
40
+ # Multibyte players
41
+ FactoryGirl . create ( :player , name : 'Антоха' ) ,
42
+ FactoryGirl . create ( :player , name : 'Петруха' ) ,
43
+ ]
40
44
end
41
45
42
46
it '#new returns instance of AbstractObject' do
@@ -77,7 +81,7 @@ class PlayerWithDefaultScope < Player
77
81
78
82
it '#destroy destroys multiple items' do
79
83
abstract_model . destroy ( @players [ 0 ..1 ] )
80
- expect ( Player . all ) . to eq ( @players [ 2 ..2 ] )
84
+ expect ( Player . all ) . to eq ( @players [ 2 ..- 1 ] )
81
85
end
82
86
83
87
it '#where returns filtered results' do
@@ -102,8 +106,8 @@ class PlayerWithDefaultScope < Player
102
106
end
103
107
104
108
it 'supports pagination' do
105
- expect ( abstract_model . all ( sort : 'id' , page : 2 , per : 1 ) ) . to eq ( @players [ 1 .. 1 ] )
106
- expect ( abstract_model . all ( sort : 'id' , page : 1 , per : 2 ) ) . to eq ( @players [ 1 .. 2 ] . reverse )
109
+ expect ( abstract_model . all ( sort : 'id' , page : 2 , per : 1 ) ) . to eq ( @players [ - 2 , 1 ] )
110
+ expect ( abstract_model . all ( sort : 'id' , page : 1 , per : 2 ) ) . to eq ( @players [ - 2 , 2 ] . reverse )
107
111
end
108
112
109
113
it 'supports ordering' do
@@ -115,6 +119,13 @@ class PlayerWithDefaultScope < Player
115
119
expect ( results ) . to eq ( @players [ 1 ..1 ] )
116
120
end
117
121
122
+ it 'supports multibyte querying' do
123
+ unless ::ActiveRecord ::Base . configurations [ Rails . env ] [ 'adapter' ] == 'sqlite3'
124
+ results = abstract_model . all ( query : @players [ 4 ] . name )
125
+ expect ( results ) . to eq ( @players [ 4 , 1 ] )
126
+ end
127
+ end
128
+
118
129
it 'supports filtering' do
119
130
expect ( abstract_model . all ( filters : { 'name' => { '0000' => { o : 'is' , v : @players [ 1 ] . name } } } ) ) . to eq ( @players [ 1 ..1 ] )
120
131
end
@@ -201,8 +212,10 @@ def build_statement(type, value, operator)
201
212
end
202
213
203
214
it 'performs case-insensitive searches' do
204
- expect ( build_statement ( :string , 'foo' , 'default' ) ) . to eq ( [ @like , '%foo%' ] )
205
- expect ( build_statement ( :string , 'FOO' , 'default' ) ) . to eq ( [ @like , '%foo%' ] )
215
+ unless [ 'postgresql' , 'postgis' ] . include? ( ::ActiveRecord ::Base . configurations [ Rails . env ] [ 'adapter' ] )
216
+ expect ( build_statement ( :string , 'foo' , 'default' ) ) . to eq ( [ @like , '%foo%' ] )
217
+ expect ( build_statement ( :string , 'FOO' , 'default' ) ) . to eq ( [ @like , '%foo%' ] )
218
+ end
206
219
end
207
220
208
221
it "supports '_blank' operator" do
@@ -380,6 +393,11 @@ def build_statement(type, value, operator)
380
393
it 'supports enum type query' do
381
394
expect ( build_statement ( :enum , '1' , nil ) ) . to eq ( [ '(field IN (?))' , [ '1' ] ] )
382
395
end
396
+
397
+ it 'supports uuid type query' do
398
+ uuid = SecureRandom . uuid
399
+ expect ( build_statement ( :uuid , uuid , nil ) ) . to eq ( [ '(field = ?)' , uuid ] )
400
+ end
383
401
end
384
402
385
403
describe 'model attribute method' do
0 commit comments