ajax-datatables-rails 1.3.0 → 1.4.0
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.
- checksums.yaml +4 -4
- data/.codeclimate.yml +5 -23
- data/.github/workflows/ci.yml +16 -8
- data/.gitignore +6 -3
- data/.rubocop.yml +1 -1
- data/Appraisals +18 -25
- data/CHANGELOG.md +14 -0
- data/Gemfile +2 -0
- data/README.md +15 -15
- data/ajax-datatables-rails.gemspec +5 -2
- data/appraisal.yml +56 -0
- data/bin/bundle +114 -0
- data/bin/rackup +27 -0
- data/config.ru +7 -0
- data/doc/migrate.md +1 -1
- data/gemfiles/rails_5.2.8.gemfile +21 -0
- data/gemfiles/rails_6.0.6.gemfile +21 -0
- data/gemfiles/rails_6.1.7.gemfile +21 -0
- data/gemfiles/rails_7.0.4.gemfile +21 -0
- data/lib/ajax-datatables-rails/base.rb +21 -1
- data/lib/ajax-datatables-rails/datatable/column/search.rb +8 -8
- data/lib/ajax-datatables-rails/datatable/column.rb +10 -9
- data/lib/ajax-datatables-rails/datatable/datatable.rb +0 -1
- data/lib/ajax-datatables-rails/version.rb +1 -1
- data/spec/ajax-datatables-rails/base_spec.rb +39 -19
- data/spec/ajax-datatables-rails/datatable/column_spec.rb +30 -33
- data/spec/ajax-datatables-rails/datatable/datatable_spec.rb +12 -10
- data/spec/ajax-datatables-rails/datatable/simple_order_spec.rb +5 -3
- data/spec/ajax-datatables-rails/datatable/simple_search_spec.rb +4 -2
- data/spec/ajax-datatables-rails/orm/active_record_filter_records_spec.rb +109 -120
- data/spec/ajax-datatables-rails/orm/active_record_paginate_records_spec.rb +6 -4
- data/spec/ajax-datatables-rails/orm/active_record_sort_records_spec.rb +7 -5
- data/spec/dummy/app/assets/config/manifest.js +0 -0
- data/spec/dummy/config/database.yml +25 -0
- data/spec/dummy/config/routes.rb +5 -0
- data/spec/dummy/config/storage.yml +3 -0
- data/spec/{support → dummy/db}/schema.rb +3 -4
- data/spec/dummy/log/.gitignore +1 -0
- data/spec/dummy/public/favicon.ico +0 -0
- data/spec/factories/user.rb +3 -1
- data/spec/spec_helper.rb +32 -19
- data/spec/support/datatables/complex_datatable.rb +4 -0
- data/spec/support/datatables/complex_datatable_array.rb +2 -0
- data/spec/support/datatables/datatable_cond_date.rb +2 -0
- data/spec/support/datatables/datatable_cond_numeric.rb +2 -0
- data/spec/support/datatables/datatable_cond_proc.rb +2 -0
- data/spec/support/datatables/datatable_cond_string.rb +4 -2
- data/spec/support/datatables/datatable_cond_unknown.rb +2 -0
- data/spec/support/datatables/datatable_custom_column.rb +17 -0
- data/spec/support/datatables/datatable_order_nulls_last.rb +2 -0
- data/spec/support/helpers/params.rb +14 -6
- data/spec/support/models/user.rb +5 -0
- metadata +65 -12
- data/gemfiles/rails_5.2.4.gemfile +0 -11
- data/gemfiles/rails_6.0.3.gemfile +0 -11
- data/gemfiles/rails_6.1.0.gemfile +0 -11
- data/spec/ajax-datatables-rails/orm/active_record_spec.rb +0 -24
@@ -1,13 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'spec_helper'
|
2
4
|
|
3
|
-
describe AjaxDatatablesRails::ORM::ActiveRecord do
|
5
|
+
RSpec.describe AjaxDatatablesRails::ORM::ActiveRecord do
|
4
6
|
|
5
7
|
let(:datatable) { ComplexDatatable.new(sample_params) }
|
6
8
|
let(:records) { User.all }
|
7
9
|
|
8
10
|
describe '#filter_records' do
|
9
11
|
it 'requires a records collection as argument' do
|
10
|
-
expect { datatable.filter_records
|
12
|
+
expect { datatable.filter_records }.to raise_error(ArgumentError)
|
11
13
|
end
|
12
14
|
|
13
15
|
it 'performs a simple search first' do
|
@@ -24,14 +26,14 @@ describe AjaxDatatablesRails::ORM::ActiveRecord do
|
|
24
26
|
end
|
25
27
|
|
26
28
|
describe '#build_conditions' do
|
27
|
-
before
|
29
|
+
before do
|
28
30
|
create(:user, username: 'johndoe', email: 'johndoe@example.com')
|
29
31
|
create(:user, username: 'msmith', email: 'mary.smith@example.com')
|
30
32
|
create(:user, username: 'hsmith', email: 'henry.smith@example.net')
|
31
33
|
end
|
32
34
|
|
33
35
|
context 'with column and global search' do
|
34
|
-
before
|
36
|
+
before do
|
35
37
|
datatable.params[:search] = { value: 'example.com', regex: 'false' }
|
36
38
|
datatable.params[:columns]['0'][:search][:value] = 'smith'
|
37
39
|
end
|
@@ -47,7 +49,7 @@ describe AjaxDatatablesRails::ORM::ActiveRecord do
|
|
47
49
|
end
|
48
50
|
|
49
51
|
describe '#build_conditions_for_datatable' do
|
50
|
-
before
|
52
|
+
before do
|
51
53
|
create(:user, username: 'johndoe', email: 'johndoe@example.com')
|
52
54
|
create(:user, username: 'msmith', email: 'mary.smith@example.com')
|
53
55
|
end
|
@@ -66,12 +68,12 @@ describe AjaxDatatablesRails::ORM::ActiveRecord do
|
|
66
68
|
end
|
67
69
|
|
68
70
|
context 'when none of columns are connected' do
|
69
|
-
before
|
71
|
+
before do
|
70
72
|
allow(datatable).to receive(:searchable_columns) { [] }
|
71
73
|
end
|
72
74
|
|
73
75
|
context 'when search value is a string' do
|
74
|
-
before
|
76
|
+
before do
|
75
77
|
datatable.params[:search] = { value: 'msmith' }
|
76
78
|
end
|
77
79
|
|
@@ -87,7 +89,7 @@ describe AjaxDatatablesRails::ORM::ActiveRecord do
|
|
87
89
|
end
|
88
90
|
|
89
91
|
context 'when search value is space-separated string' do
|
90
|
-
before
|
92
|
+
before do
|
91
93
|
datatable.params[:search] = { value: 'foo bar' }
|
92
94
|
end
|
93
95
|
|
@@ -105,7 +107,7 @@ describe AjaxDatatablesRails::ORM::ActiveRecord do
|
|
105
107
|
|
106
108
|
context 'with search query' do
|
107
109
|
context 'when search value is a string' do
|
108
|
-
before
|
110
|
+
before do
|
109
111
|
datatable.params[:search] = { value: 'john', regex: 'false' }
|
110
112
|
end
|
111
113
|
|
@@ -118,7 +120,7 @@ describe AjaxDatatablesRails::ORM::ActiveRecord do
|
|
118
120
|
end
|
119
121
|
|
120
122
|
context 'when search value is space-separated string' do
|
121
|
-
before
|
123
|
+
before do
|
122
124
|
datatable.params[:search] = { value: 'john doe', regex: 'false' }
|
123
125
|
end
|
124
126
|
|
@@ -134,7 +136,7 @@ describe AjaxDatatablesRails::ORM::ActiveRecord do
|
|
134
136
|
context 'when column.search_query returns nil' do
|
135
137
|
let(:datatable) { DatatableCondUnknown.new(sample_params) }
|
136
138
|
|
137
|
-
before
|
139
|
+
before do
|
138
140
|
datatable.params[:search] = { value: 'john doe', regex: 'false' }
|
139
141
|
end
|
140
142
|
|
@@ -150,7 +152,7 @@ describe AjaxDatatablesRails::ORM::ActiveRecord do
|
|
150
152
|
end
|
151
153
|
|
152
154
|
describe '#build_conditions_for_selected_columns' do
|
153
|
-
before
|
155
|
+
before do
|
154
156
|
create(:user, username: 'johndoe', email: 'johndoe@example.com')
|
155
157
|
create(:user, username: 'msmith', email: 'mary.smith@example.com')
|
156
158
|
end
|
@@ -166,7 +168,7 @@ describe AjaxDatatablesRails::ORM::ActiveRecord do
|
|
166
168
|
expect(result).to be_a(Arel::Nodes::And)
|
167
169
|
end
|
168
170
|
|
169
|
-
if
|
171
|
+
if RunningSpec.postgresql?
|
170
172
|
context 'when db_adapter is postgresql' do
|
171
173
|
it 'can call #to_sql on returned object' do
|
172
174
|
result = datatable.build_conditions_for_selected_columns
|
@@ -178,7 +180,7 @@ describe AjaxDatatablesRails::ORM::ActiveRecord do
|
|
178
180
|
end
|
179
181
|
end
|
180
182
|
|
181
|
-
if
|
183
|
+
if RunningSpec.oracle?
|
182
184
|
context 'when db_adapter is oracle' do
|
183
185
|
it 'can call #to_sql on returned object' do
|
184
186
|
result = datatable.build_conditions_for_selected_columns
|
@@ -190,7 +192,7 @@ describe AjaxDatatablesRails::ORM::ActiveRecord do
|
|
190
192
|
end
|
191
193
|
end
|
192
194
|
|
193
|
-
if
|
195
|
+
if RunningSpec.mysql?
|
194
196
|
context 'when db_adapter is mysql2' do
|
195
197
|
it 'can call #to_sql on returned object' do
|
196
198
|
result = datatable.build_conditions_for_selected_columns
|
@@ -209,7 +211,7 @@ describe AjaxDatatablesRails::ORM::ActiveRecord do
|
|
209
211
|
end
|
210
212
|
|
211
213
|
context 'with search values in columns' do
|
212
|
-
before
|
214
|
+
before do
|
213
215
|
datatable.params[:columns]['0'][:search][:value] = 'doe'
|
214
216
|
end
|
215
217
|
|
@@ -227,14 +229,14 @@ describe AjaxDatatablesRails::ORM::ActiveRecord do
|
|
227
229
|
describe 'it can filter records with condition :date_range' do
|
228
230
|
let(:datatable) { DatatableCondDate.new(sample_params) }
|
229
231
|
|
230
|
-
before
|
232
|
+
before do
|
231
233
|
create(:user, username: 'johndoe', email: 'johndoe@example.com', last_name: 'Doe', created_at: '01/01/2000')
|
232
234
|
create(:user, username: 'msmith', email: 'mary.smith@example.com', last_name: 'Smith', created_at: '01/02/2000')
|
233
235
|
end
|
234
236
|
|
235
237
|
context 'when range is empty' do
|
236
|
-
it '
|
237
|
-
datatable.params[:columns]['
|
238
|
+
it 'does not filter records' do
|
239
|
+
datatable.params[:columns]['6'][:search][:value] = '-'
|
238
240
|
expect(datatable.data.size).to eq 2
|
239
241
|
item = datatable.data.first
|
240
242
|
expect(item[:last_name]).to eq 'Doe'
|
@@ -242,31 +244,31 @@ describe AjaxDatatablesRails::ORM::ActiveRecord do
|
|
242
244
|
end
|
243
245
|
|
244
246
|
context 'when start date is filled' do
|
245
|
-
it '
|
246
|
-
datatable.params[:columns]['
|
247
|
+
it 'filters records created after this date' do
|
248
|
+
datatable.params[:columns]['6'][:search][:value] = '31/12/1999-'
|
247
249
|
expect(datatable.data.size).to eq 2
|
248
250
|
end
|
249
251
|
end
|
250
252
|
|
251
253
|
context 'when end date is filled' do
|
252
|
-
it '
|
253
|
-
datatable.params[:columns]['
|
254
|
+
it 'filters records created before this date' do
|
255
|
+
datatable.params[:columns]['6'][:search][:value] = '-31/12/1999'
|
254
256
|
expect(datatable.data.size).to eq 0
|
255
257
|
end
|
256
258
|
end
|
257
259
|
|
258
260
|
context 'when both date are filled' do
|
259
|
-
it '
|
260
|
-
datatable.params[:columns]['
|
261
|
+
it 'filters records created between the range' do
|
262
|
+
datatable.params[:columns]['6'][:search][:value] = '01/12/1999-15/01/2000'
|
261
263
|
expect(datatable.data.size).to eq 1
|
262
264
|
end
|
263
265
|
end
|
264
266
|
|
265
267
|
context 'when another filter is active' do
|
266
268
|
context 'when range is empty' do
|
267
|
-
it '
|
269
|
+
it 'filters records' do
|
268
270
|
datatable.params[:columns]['0'][:search][:value] = 'doe'
|
269
|
-
datatable.params[:columns]['
|
271
|
+
datatable.params[:columns]['6'][:search][:value] = '-'
|
270
272
|
expect(datatable.data.size).to eq 1
|
271
273
|
item = datatable.data.first
|
272
274
|
expect(item[:last_name]).to eq 'Doe'
|
@@ -274,9 +276,9 @@ describe AjaxDatatablesRails::ORM::ActiveRecord do
|
|
274
276
|
end
|
275
277
|
|
276
278
|
context 'when start date is filled' do
|
277
|
-
it '
|
279
|
+
it 'filters records' do
|
278
280
|
datatable.params[:columns]['0'][:search][:value] = 'doe'
|
279
|
-
datatable.params[:columns]['
|
281
|
+
datatable.params[:columns]['6'][:search][:value] = '01/12/1999-'
|
280
282
|
expect(datatable.data.size).to eq 1
|
281
283
|
item = datatable.data.first
|
282
284
|
expect(item[:last_name]).to eq 'Doe'
|
@@ -284,9 +286,9 @@ describe AjaxDatatablesRails::ORM::ActiveRecord do
|
|
284
286
|
end
|
285
287
|
|
286
288
|
context 'when end date is filled' do
|
287
|
-
it '
|
289
|
+
it 'filters records' do
|
288
290
|
datatable.params[:columns]['0'][:search][:value] = 'doe'
|
289
|
-
datatable.params[:columns]['
|
291
|
+
datatable.params[:columns]['6'][:search][:value] = '-15/01/2000'
|
290
292
|
expect(datatable.data.size).to eq 1
|
291
293
|
item = datatable.data.first
|
292
294
|
expect(item[:last_name]).to eq 'Doe'
|
@@ -294,9 +296,9 @@ describe AjaxDatatablesRails::ORM::ActiveRecord do
|
|
294
296
|
end
|
295
297
|
|
296
298
|
context 'when both date are filled' do
|
297
|
-
it '
|
299
|
+
it 'filters records' do
|
298
300
|
datatable.params[:columns]['0'][:search][:value] = 'doe'
|
299
|
-
datatable.params[:columns]['
|
301
|
+
datatable.params[:columns]['6'][:search][:value] = '01/12/1999-15/01/2000'
|
300
302
|
expect(datatable.data.size).to eq 1
|
301
303
|
item = datatable.data.first
|
302
304
|
expect(item[:last_name]).to eq 'Doe'
|
@@ -307,16 +309,16 @@ describe AjaxDatatablesRails::ORM::ActiveRecord do
|
|
307
309
|
end
|
308
310
|
|
309
311
|
context 'numeric condition' do
|
312
|
+
before do
|
313
|
+
create(:user, first_name: 'john', post_id: 1)
|
314
|
+
create(:user, first_name: 'mary', post_id: 2)
|
315
|
+
end
|
316
|
+
|
310
317
|
describe 'it can filter records with condition :eq' do
|
311
318
|
let(:datatable) { DatatableCondEq.new(sample_params) }
|
312
319
|
|
313
|
-
|
314
|
-
|
315
|
-
create(:user, first_name: 'mary', post_id: 2)
|
316
|
-
end
|
317
|
-
|
318
|
-
it 'should filter records matching' do
|
319
|
-
datatable.params[:columns]['4'][:search][:value] = 1
|
320
|
+
it 'filters records matching' do
|
321
|
+
datatable.params[:columns]['5'][:search][:value] = 1
|
320
322
|
expect(datatable.data.size).to eq 1
|
321
323
|
item = datatable.data.first
|
322
324
|
expect(item[:first_name]).to eq 'john'
|
@@ -326,13 +328,8 @@ describe AjaxDatatablesRails::ORM::ActiveRecord do
|
|
326
328
|
describe 'it can filter records with condition :not_eq' do
|
327
329
|
let(:datatable) { DatatableCondNotEq.new(sample_params) }
|
328
330
|
|
329
|
-
|
330
|
-
|
331
|
-
create(:user, first_name: 'mary', post_id: 2)
|
332
|
-
end
|
333
|
-
|
334
|
-
it 'should filter records matching' do
|
335
|
-
datatable.params[:columns]['4'][:search][:value] = 1
|
331
|
+
it 'filters records matching' do
|
332
|
+
datatable.params[:columns]['5'][:search][:value] = 1
|
336
333
|
expect(datatable.data.size).to eq 1
|
337
334
|
item = datatable.data.first
|
338
335
|
expect(item[:first_name]).to eq 'mary'
|
@@ -342,13 +339,8 @@ describe AjaxDatatablesRails::ORM::ActiveRecord do
|
|
342
339
|
describe 'it can filter records with condition :lt' do
|
343
340
|
let(:datatable) { DatatableCondLt.new(sample_params) }
|
344
341
|
|
345
|
-
|
346
|
-
|
347
|
-
create(:user, first_name: 'mary', post_id: 2)
|
348
|
-
end
|
349
|
-
|
350
|
-
it 'should filter records matching' do
|
351
|
-
datatable.params[:columns]['4'][:search][:value] = 2
|
342
|
+
it 'filters records matching' do
|
343
|
+
datatable.params[:columns]['5'][:search][:value] = 2
|
352
344
|
expect(datatable.data.size).to eq 1
|
353
345
|
item = datatable.data.first
|
354
346
|
expect(item[:first_name]).to eq 'john'
|
@@ -358,13 +350,8 @@ describe AjaxDatatablesRails::ORM::ActiveRecord do
|
|
358
350
|
describe 'it can filter records with condition :gt' do
|
359
351
|
let(:datatable) { DatatableCondGt.new(sample_params) }
|
360
352
|
|
361
|
-
|
362
|
-
|
363
|
-
create(:user, first_name: 'mary', post_id: 2)
|
364
|
-
end
|
365
|
-
|
366
|
-
it 'should filter records matching' do
|
367
|
-
datatable.params[:columns]['4'][:search][:value] = 1
|
353
|
+
it 'filters records matching' do
|
354
|
+
datatable.params[:columns]['5'][:search][:value] = 1
|
368
355
|
expect(datatable.data.size).to eq 1
|
369
356
|
item = datatable.data.first
|
370
357
|
expect(item[:first_name]).to eq 'mary'
|
@@ -374,13 +361,8 @@ describe AjaxDatatablesRails::ORM::ActiveRecord do
|
|
374
361
|
describe 'it can filter records with condition :lteq' do
|
375
362
|
let(:datatable) { DatatableCondLteq.new(sample_params) }
|
376
363
|
|
377
|
-
|
378
|
-
|
379
|
-
create(:user, first_name: 'mary', post_id: 2)
|
380
|
-
end
|
381
|
-
|
382
|
-
it 'should filter records matching' do
|
383
|
-
datatable.params[:columns]['4'][:search][:value] = 2
|
364
|
+
it 'filters records matching' do
|
365
|
+
datatable.params[:columns]['5'][:search][:value] = 2
|
384
366
|
expect(datatable.data.size).to eq 2
|
385
367
|
end
|
386
368
|
end
|
@@ -388,13 +370,8 @@ describe AjaxDatatablesRails::ORM::ActiveRecord do
|
|
388
370
|
describe 'it can filter records with condition :gteq' do
|
389
371
|
let(:datatable) { DatatableCondGteq.new(sample_params) }
|
390
372
|
|
391
|
-
|
392
|
-
|
393
|
-
create(:user, first_name: 'mary', post_id: 2)
|
394
|
-
end
|
395
|
-
|
396
|
-
it 'should filter records matching' do
|
397
|
-
datatable.params[:columns]['4'][:search][:value] = 1
|
373
|
+
it 'filters records matching' do
|
374
|
+
datatable.params[:columns]['5'][:search][:value] = 1
|
398
375
|
expect(datatable.data.size).to eq 2
|
399
376
|
end
|
400
377
|
end
|
@@ -402,13 +379,8 @@ describe AjaxDatatablesRails::ORM::ActiveRecord do
|
|
402
379
|
describe 'it can filter records with condition :in' do
|
403
380
|
let(:datatable) { DatatableCondIn.new(sample_params) }
|
404
381
|
|
405
|
-
|
406
|
-
|
407
|
-
create(:user, first_name: 'mary', post_id: 2)
|
408
|
-
end
|
409
|
-
|
410
|
-
it 'should filter records matching' do
|
411
|
-
datatable.params[:columns]['4'][:search][:value] = [1]
|
382
|
+
it 'filters records matching' do
|
383
|
+
datatable.params[:columns]['5'][:search][:value] = [1]
|
412
384
|
expect(datatable.data.size).to eq 1
|
413
385
|
item = datatable.data.first
|
414
386
|
expect(item[:first_name]).to eq 'john'
|
@@ -418,14 +390,9 @@ describe AjaxDatatablesRails::ORM::ActiveRecord do
|
|
418
390
|
describe 'it can filter records with condition :in with regex' do
|
419
391
|
let(:datatable) { DatatableCondInWithRegex.new(sample_params) }
|
420
392
|
|
421
|
-
|
422
|
-
|
423
|
-
|
424
|
-
end
|
425
|
-
|
426
|
-
it 'should filter records matching' do
|
427
|
-
datatable.params[:columns]['4'][:search][:value] = '1|2'
|
428
|
-
datatable.params[:order]['0'] = { column: '4', dir: 'asc' }
|
393
|
+
it 'filters records matching' do
|
394
|
+
datatable.params[:columns]['5'][:search][:value] = '1|2'
|
395
|
+
datatable.params[:order]['0'] = { column: '5', dir: 'asc' }
|
429
396
|
expect(datatable.data.size).to eq 2
|
430
397
|
item = datatable.data.first
|
431
398
|
expect(item[:first_name]).to eq 'john'
|
@@ -434,27 +401,27 @@ describe AjaxDatatablesRails::ORM::ActiveRecord do
|
|
434
401
|
|
435
402
|
describe 'Integer overflows' do
|
436
403
|
let(:datatable) { DatatableCondEq.new(sample_params) }
|
437
|
-
let(:largest_postgresql_integer_value) {
|
438
|
-
let(:smallest_postgresql_integer_value) { -
|
404
|
+
let(:largest_postgresql_integer_value) { 2_147_483_647 }
|
405
|
+
let(:smallest_postgresql_integer_value) { -2_147_483_648 }
|
439
406
|
|
440
|
-
before
|
407
|
+
before do
|
441
408
|
create(:user, first_name: 'john', post_id: 1)
|
442
409
|
create(:user, first_name: 'mary', post_id: 2)
|
443
410
|
create(:user, first_name: 'phil', post_id: largest_postgresql_integer_value)
|
444
411
|
end
|
445
412
|
|
446
|
-
it '
|
447
|
-
datatable.params[:columns]['
|
413
|
+
it 'returns an empty result if input value is too large' do
|
414
|
+
datatable.params[:columns]['5'][:search][:value] = largest_postgresql_integer_value + 1
|
448
415
|
expect(datatable.data.size).to eq 0
|
449
416
|
end
|
450
417
|
|
451
|
-
it '
|
452
|
-
datatable.params[:columns]['
|
418
|
+
it 'returns an empty result if input value is too small' do
|
419
|
+
datatable.params[:columns]['5'][:search][:value] = smallest_postgresql_integer_value - 1
|
453
420
|
expect(datatable.data.size).to eq 0
|
454
421
|
end
|
455
422
|
|
456
423
|
it 'returns the matching user' do
|
457
|
-
datatable.params[:columns]['
|
424
|
+
datatable.params[:columns]['5'][:search][:value] = largest_postgresql_integer_value
|
458
425
|
expect(datatable.data.size).to eq 1
|
459
426
|
end
|
460
427
|
end
|
@@ -464,13 +431,13 @@ describe AjaxDatatablesRails::ORM::ActiveRecord do
|
|
464
431
|
describe 'it can filter records with lambda/proc condition' do
|
465
432
|
let(:datatable) { DatatableCondProc.new(sample_params) }
|
466
433
|
|
467
|
-
before
|
434
|
+
before do
|
468
435
|
create(:user, username: 'johndoe', email: 'johndoe@example.com')
|
469
436
|
create(:user, username: 'johndie', email: 'johndie@example.com')
|
470
437
|
create(:user, username: 'msmith', email: 'mary.smith@example.com')
|
471
438
|
end
|
472
439
|
|
473
|
-
it '
|
440
|
+
it 'filters records matching' do
|
474
441
|
datatable.params[:columns]['0'][:search][:value] = 'john'
|
475
442
|
expect(datatable.data.size).to eq 2
|
476
443
|
item = datatable.data.first
|
@@ -483,12 +450,12 @@ describe AjaxDatatablesRails::ORM::ActiveRecord do
|
|
483
450
|
describe 'it can filter records with condition :start_with' do
|
484
451
|
let(:datatable) { DatatableCondStartWith.new(sample_params) }
|
485
452
|
|
486
|
-
before
|
453
|
+
before do
|
487
454
|
create(:user, first_name: 'John')
|
488
455
|
create(:user, first_name: 'Mary')
|
489
456
|
end
|
490
457
|
|
491
|
-
it '
|
458
|
+
it 'filters records matching' do
|
492
459
|
datatable.params[:columns]['2'][:search][:value] = 'Jo'
|
493
460
|
expect(datatable.data.size).to eq 1
|
494
461
|
item = datatable.data.first
|
@@ -499,14 +466,14 @@ describe AjaxDatatablesRails::ORM::ActiveRecord do
|
|
499
466
|
describe 'it can filter records with condition :end_with' do
|
500
467
|
let(:datatable) { DatatableCondEndWith.new(sample_params) }
|
501
468
|
|
502
|
-
before
|
469
|
+
before do
|
503
470
|
create(:user, last_name: 'JOHN')
|
504
471
|
create(:user, last_name: 'MARY')
|
505
472
|
end
|
506
473
|
|
507
|
-
if
|
474
|
+
if RunningSpec.oracle?
|
508
475
|
context 'when db_adapter is oracleenhanced' do
|
509
|
-
it '
|
476
|
+
it 'filters records matching' do
|
510
477
|
datatable.params[:columns]['3'][:search][:value] = 'RY'
|
511
478
|
expect(datatable.data.size).to eq 1
|
512
479
|
item = datatable.data.first
|
@@ -514,7 +481,7 @@ describe AjaxDatatablesRails::ORM::ActiveRecord do
|
|
514
481
|
end
|
515
482
|
end
|
516
483
|
else
|
517
|
-
it '
|
484
|
+
it 'filters records matching' do
|
518
485
|
datatable.params[:columns]['3'][:search][:value] = 'ry'
|
519
486
|
expect(datatable.data.size).to eq 1
|
520
487
|
item = datatable.data.first
|
@@ -526,12 +493,12 @@ describe AjaxDatatablesRails::ORM::ActiveRecord do
|
|
526
493
|
describe 'it can filter records with condition :like' do
|
527
494
|
let(:datatable) { DatatableCondLike.new(sample_params) }
|
528
495
|
|
529
|
-
before
|
496
|
+
before do
|
530
497
|
create(:user, email: 'john@foo.com')
|
531
498
|
create(:user, email: 'mary@bar.com')
|
532
499
|
end
|
533
500
|
|
534
|
-
it '
|
501
|
+
it 'filters records matching' do
|
535
502
|
datatable.params[:columns]['1'][:search][:value] = 'foo'
|
536
503
|
expect(datatable.data.size).to eq 1
|
537
504
|
item = datatable.data.first
|
@@ -542,12 +509,12 @@ describe AjaxDatatablesRails::ORM::ActiveRecord do
|
|
542
509
|
describe 'it can filter records with condition :string_eq' do
|
543
510
|
let(:datatable) { DatatableCondStringEq.new(sample_params) }
|
544
511
|
|
545
|
-
before
|
512
|
+
before do
|
546
513
|
create(:user, email: 'john@foo.com')
|
547
514
|
create(:user, email: 'mary@bar.com')
|
548
515
|
end
|
549
516
|
|
550
|
-
it '
|
517
|
+
it 'filters records matching' do
|
551
518
|
datatable.params[:columns]['1'][:search][:value] = 'john@foo.com'
|
552
519
|
expect(datatable.data.size).to eq 1
|
553
520
|
item = datatable.data.first
|
@@ -558,20 +525,20 @@ describe AjaxDatatablesRails::ORM::ActiveRecord do
|
|
558
525
|
describe 'it can filter records with condition :string_in' do
|
559
526
|
let(:datatable) { DatatableCondStringIn.new(sample_params) }
|
560
527
|
|
561
|
-
before
|
528
|
+
before do
|
562
529
|
create(:user, email: 'john@foo.com')
|
563
530
|
create(:user, email: 'mary@bar.com')
|
564
531
|
create(:user, email: 'henry@baz.com')
|
565
532
|
end
|
566
533
|
|
567
|
-
it '
|
534
|
+
it 'filters records matching' do
|
568
535
|
datatable.params[:columns]['1'][:search][:value] = 'john@foo.com'
|
569
536
|
expect(datatable.data.size).to eq 1
|
570
537
|
item = datatable.data.first
|
571
538
|
expect(item[:email]).to eq 'john@foo.com'
|
572
539
|
end
|
573
540
|
|
574
|
-
it '
|
541
|
+
it 'filters records matching with multiple' do
|
575
542
|
datatable.params[:columns]['1'][:search][:value] = 'john@foo.com|henry@baz.com'
|
576
543
|
expect(datatable.data.size).to eq 2
|
577
544
|
items = datatable.data.sort_by { |h| h[:email] }
|
@@ -581,7 +548,7 @@ describe AjaxDatatablesRails::ORM::ActiveRecord do
|
|
581
548
|
expect(item_last[:email]).to eq 'john@foo.com'
|
582
549
|
end
|
583
550
|
|
584
|
-
it '
|
551
|
+
it 'filters records matching with multiple contains not found' do
|
585
552
|
datatable.params[:columns]['1'][:search][:value] = 'john@foo.com|henry_not@baz.com'
|
586
553
|
expect(datatable.data.size).to eq 1
|
587
554
|
item = datatable.data.first
|
@@ -592,13 +559,13 @@ describe AjaxDatatablesRails::ORM::ActiveRecord do
|
|
592
559
|
describe 'it can filter records with condition :null_value' do
|
593
560
|
let(:datatable) { DatatableCondNullValue.new(sample_params) }
|
594
561
|
|
595
|
-
before
|
562
|
+
before do
|
596
563
|
create(:user, first_name: 'john', email: 'foo@bar.com')
|
597
564
|
create(:user, first_name: 'mary', email: nil)
|
598
565
|
end
|
599
566
|
|
600
567
|
context 'when condition is NULL' do
|
601
|
-
it '
|
568
|
+
it 'filters records matching' do
|
602
569
|
datatable.params[:columns]['1'][:search][:value] = 'NULL'
|
603
570
|
expect(datatable.data.size).to eq 1
|
604
571
|
item = datatable.data.first
|
@@ -607,7 +574,7 @@ describe AjaxDatatablesRails::ORM::ActiveRecord do
|
|
607
574
|
end
|
608
575
|
|
609
576
|
context 'when condition is !NULL' do
|
610
|
-
it '
|
577
|
+
it 'filters records matching' do
|
611
578
|
datatable.params[:columns]['1'][:search][:value] = '!NULL'
|
612
579
|
expect(datatable.data.size).to eq 1
|
613
580
|
item = datatable.data.first
|
@@ -620,22 +587,44 @@ describe AjaxDatatablesRails::ORM::ActiveRecord do
|
|
620
587
|
context 'unknown condition' do
|
621
588
|
let(:datatable) { DatatableCondUnknown.new(sample_params) }
|
622
589
|
|
623
|
-
before
|
590
|
+
before do
|
624
591
|
datatable.params[:search] = { value: 'john doe', regex: 'false' }
|
625
592
|
end
|
626
593
|
|
627
|
-
it '
|
594
|
+
it 'raises error' do
|
628
595
|
expect {
|
629
596
|
datatable.data.size
|
630
597
|
}.to raise_error(AjaxDatatablesRails::Error::InvalidSearchCondition).with_message('foo')
|
631
598
|
end
|
632
599
|
end
|
600
|
+
|
601
|
+
context 'custom column' do
|
602
|
+
describe 'it can filter records with custom column' do
|
603
|
+
let(:datatable) { DatatableCustomColumn.new(sample_params) }
|
604
|
+
|
605
|
+
before do
|
606
|
+
create(:user, username: 'msmith', email: 'mary.smith@example.com', first_name: 'Mary', last_name: 'Smith')
|
607
|
+
create(:user, username: 'jsmith', email: 'john.smith@example.com', first_name: 'John', last_name: 'Smith')
|
608
|
+
create(:user, username: 'johndoe', email: 'johndoe@example.com', first_name: 'John', last_name: 'Doe')
|
609
|
+
end
|
610
|
+
|
611
|
+
it 'filters records' do
|
612
|
+
skip('unsupported database adapter') if RunningSpec.oracle? || RunningSpec.sqlite?
|
613
|
+
|
614
|
+
datatable.params[:columns]['4'][:search][:value] = 'John'
|
615
|
+
datatable.params[:order]['0'][:column] = '4'
|
616
|
+
expect(datatable.data.size).to eq 2
|
617
|
+
item = datatable.data.first
|
618
|
+
expect(item[:full_name]).to eq 'John Doe'
|
619
|
+
end
|
620
|
+
end
|
621
|
+
end
|
633
622
|
end
|
634
623
|
|
635
624
|
describe 'formatter option' do
|
636
625
|
let(:datatable) { DatatableWithFormater.new(sample_params) }
|
637
626
|
|
638
|
-
before
|
627
|
+
before do
|
639
628
|
create(:user, username: 'johndoe', email: 'johndoe@example.com', last_name: 'DOE')
|
640
629
|
create(:user, username: 'msmith', email: 'mary.smith@example.com', last_name: 'SMITH')
|
641
630
|
datatable.params[:columns]['3'][:search][:value] = 'doe'
|
@@ -1,11 +1,13 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'spec_helper'
|
2
4
|
|
3
|
-
describe AjaxDatatablesRails::ORM::ActiveRecord do
|
5
|
+
RSpec.describe AjaxDatatablesRails::ORM::ActiveRecord do
|
4
6
|
|
5
7
|
let(:datatable) { ComplexDatatable.new(sample_params) }
|
6
8
|
let(:records) { User.all }
|
7
9
|
|
8
|
-
before
|
10
|
+
before do
|
9
11
|
create(:user, username: 'johndoe', email: 'johndoe@example.com')
|
10
12
|
create(:user, username: 'msmith', email: 'mary.smith@example.com')
|
11
13
|
end
|
@@ -16,7 +18,7 @@ describe AjaxDatatablesRails::ORM::ActiveRecord do
|
|
16
18
|
end
|
17
19
|
|
18
20
|
it 'paginates records properly' do
|
19
|
-
if
|
21
|
+
if RunningSpec.oracle?
|
20
22
|
if Rails.version.in? %w[4.2.11]
|
21
23
|
expect(datatable.paginate_records(records).to_sql).to include(
|
22
24
|
'rownum <= 10'
|
@@ -34,7 +36,7 @@ describe AjaxDatatablesRails::ORM::ActiveRecord do
|
|
34
36
|
|
35
37
|
datatable.params[:start] = '26'
|
36
38
|
datatable.params[:length] = '25'
|
37
|
-
if
|
39
|
+
if RunningSpec.oracle?
|
38
40
|
if Rails.version.in? %w[4.2.11]
|
39
41
|
expect(datatable.paginate_records(records).to_sql).to include(
|
40
42
|
'rownum <= 51'
|
@@ -1,12 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'spec_helper'
|
2
4
|
|
3
|
-
describe AjaxDatatablesRails::ORM::ActiveRecord do
|
5
|
+
RSpec.describe AjaxDatatablesRails::ORM::ActiveRecord do
|
4
6
|
|
5
7
|
let(:datatable) { ComplexDatatable.new(sample_params) }
|
6
8
|
let(:nulls_last_datatable) { DatatableOrderNullsLast.new(sample_params) }
|
7
9
|
let(:records) { User.all }
|
8
10
|
|
9
|
-
before
|
11
|
+
before do
|
10
12
|
create(:user, username: 'johndoe', email: 'johndoe@example.com')
|
11
13
|
create(:user, username: 'msmith', email: 'mary.smith@example.com')
|
12
14
|
end
|
@@ -30,7 +32,7 @@ describe AjaxDatatablesRails::ORM::ActiveRecord do
|
|
30
32
|
)
|
31
33
|
end
|
32
34
|
|
33
|
-
it '
|
35
|
+
it 'does not sort a column which is not orderable' do
|
34
36
|
datatable.params[:order]['0'] = { column: '0', dir: 'asc' }
|
35
37
|
datatable.params[:order]['1'] = { column: '4', dir: 'desc' }
|
36
38
|
|
@@ -49,7 +51,7 @@ describe AjaxDatatablesRails::ORM::ActiveRecord do
|
|
49
51
|
after { datatable.nulls_last = false }
|
50
52
|
|
51
53
|
it 'can handle multiple sorting columns' do
|
52
|
-
skip('unsupported database adapter') if
|
54
|
+
skip('unsupported database adapter') if RunningSpec.oracle?
|
53
55
|
|
54
56
|
# set to order by Users username in ascending order, and
|
55
57
|
# by Users email in descending order
|
@@ -63,7 +65,7 @@ describe AjaxDatatablesRails::ORM::ActiveRecord do
|
|
63
65
|
|
64
66
|
describe '#sort_records with nulls last using column config' do
|
65
67
|
it 'can handle multiple sorting columns' do
|
66
|
-
skip('unsupported database adapter') if
|
68
|
+
skip('unsupported database adapter') if RunningSpec.oracle?
|
67
69
|
|
68
70
|
# set to order by Users username in ascending order, and
|
69
71
|
# by Users email in descending order
|
File without changes
|