Skip to content

Commit d8e14f3

Browse files
committed
add custom filter tests
1 parent 872f5db commit d8e14f3

File tree

2 files changed

+145
-9
lines changed

2 files changed

+145
-9
lines changed

tests/spec/DatatablesSpec.php

Lines changed: 73 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,7 @@ public function it_sorts_excluding_hidden_columns()
178178
public function it_sorts_excluding_hidden_columns_object_data()
179179
{
180180
$this->request->query->set('search', ['value' => '']);
181-
$this->request->query->set('order', [['column' => '1', 'dir' => 'asc']]); // age - asc
181+
$this->request->query->set('order', [['column' => '1', 'dir' => 'asc']]);
182182

183183
$this->request->query->set('columns', [
184184
['data' => 'name', 'name' => '', 'searchable' => true, 'orderable' => true, 'search' => ['value' => '']],
@@ -197,7 +197,7 @@ public function it_sorts_excluding_hidden_columns_object_data()
197197
public function it_does_not_affect_ordering_when_reordering_columns()
198198
{
199199
$this->request->query->set('search', ['value' => '']);
200-
$this->request->query->set('order', [['column' => '0', 'dir' => 'asc']]); // age - asc
200+
$this->request->query->set('order', [['column' => '0', 'dir' => 'asc']]);
201201

202202
$this->request->query->set('columns', [
203203
['data' => 'age', 'name' => '', 'searchable' => true, 'orderable' => true, 'search' => ['value' => '']],
@@ -214,7 +214,7 @@ public function it_does_not_affect_ordering_when_reordering_columns()
214214
public function it_does_not_affect_global_searching_when_reordering_columns()
215215
{
216216
$this->request->query->set('search', ['value' => 'Stephanie']);
217-
$this->request->query->set('order', [['column' => '0', 'dir' => 'asc']]); // age - asc
217+
$this->request->query->set('order', [['column' => '0', 'dir' => 'asc']]);
218218

219219
$this->request->query->set('columns', [
220220
['data' => '2', 'name' => '', 'searchable' => true, 'orderable' => true, 'search' => ['value' => '']],
@@ -228,10 +228,11 @@ public function it_does_not_affect_global_searching_when_reordering_columns()
228228

229229
$datatables['data'][0]->shouldReturn([ 'Stephanie', 'Skinner', '45']);
230230
}
231+
231232
public function it_does_not_affect_individual_searching_when_reordering_columns()
232233
{
233234
$this->request->query->set('search', ['value' => '']);
234-
$this->request->query->set('order', [['column' => '0', 'dir' => 'asc']]); // age - asc
235+
$this->request->query->set('order', [['column' => '0', 'dir' => 'asc']]);
235236

236237
$this->request->query->set('columns', [
237238
['data' => 'surname', 'name' => '', 'searchable' => true, 'orderable' => true, 'search' => ['value' => 'McCoy']],
@@ -246,4 +247,72 @@ public function it_does_not_affect_individual_searching_when_reordering_columns(
246247
$datatables['data'][0]->shouldReturn(['name' => 'Colin', 'surname' => 'McCoy', 'age' => '19']);
247248
}
248249

250+
public function it_does_custom_filtering_between()
251+
{
252+
$this->request->query->set('search', ['value' => '']);
253+
$this->request->query->set('order', [['column' => '0', 'dir' => 'asc']]);
254+
255+
$this->request->query->set('columns', [
256+
['data' => '0', 'name' => '', 'searchable' => true, 'orderable' => true, 'search' => ['value' => '']],
257+
['data' => '1', 'name' => '', 'searchable' => true, 'orderable' => true, 'search' => ['value' => '']],
258+
['data' => '2', 'name' => '', 'searchable' => true, 'orderable' => true, 'search' => ['value' => '']],
259+
]);
260+
261+
$this->query('Select id as fid, name, surname, age from mytable');
262+
$this->filter('fid', function(){
263+
return $this->between(4,6);
264+
});
265+
266+
$datatables = $this->generate()->toArray();
267+
268+
$datatables['recordsTotal']->shouldReturn(11);
269+
$datatables['recordsFiltered']->shouldReturn(3);
270+
}
271+
272+
public function it_does_custom_filtering_where_in()
273+
{
274+
$this->request->query->set('search', ['value' => '']);
275+
$this->request->query->set('order', [['column' => '0', 'dir' => 'asc']]);
276+
277+
$this->request->query->set('columns', [
278+
['data' => '0', 'name' => '', 'searchable' => true, 'orderable' => true, 'search' => ['value' => '']],
279+
['data' => '1', 'name' => '', 'searchable' => true, 'orderable' => true, 'search' => ['value' => '']],
280+
['data' => '2', 'name' => '', 'searchable' => true, 'orderable' => true, 'search' => ['value' => '']],
281+
]);
282+
283+
$this->query('Select id as fid, name, surname, age from mytable');
284+
$this->filter('fid', function(){
285+
return $this->whereIn([5]);
286+
});
287+
288+
$datatables = $this->generate()->toArray();
289+
290+
$datatables['recordsTotal']->shouldReturn(11);
291+
$datatables['recordsFiltered']->shouldReturn(1);
292+
$datatables['data'][0]->shouldReturn(['5', 'Ruby', 'Pickett', '28']);
293+
}
294+
295+
public function it_does_return_null_when_there_is_no_custom_filter_return_value()
296+
{
297+
$this->request->query->set('search', ['value' => '']);
298+
$this->request->query->set('order', [['column' => '0', 'dir' => 'asc']]);
299+
300+
$this->request->query->set('columns', [
301+
['data' => '0', 'name' => '', 'searchable' => true, 'orderable' => true, 'search' => ['value' => '5']],
302+
['data' => '1', 'name' => '', 'searchable' => true, 'orderable' => true, 'search' => ['value' => '']],
303+
['data' => '2', 'name' => '', 'searchable' => true, 'orderable' => true, 'search' => ['value' => '']],
304+
]);
305+
306+
$this->query('Select id as fid, name, surname, age from mytable');
307+
$this->filter('fid', function(){
308+
//return $this->defaultFilter(); // when it is not defined, returns defaultFilter
309+
});
310+
311+
$datatables = $this->generate()->toArray();
312+
313+
$datatables['recordsTotal']->shouldReturn(11);
314+
$datatables['recordsFiltered']->shouldReturn(1);
315+
$datatables['data'][0]->shouldReturn(['5', 'Ruby', 'Pickett', '28']);
316+
}
317+
249318
}

tests/unit/DatatablesTest.php

Lines changed: 72 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
namespace Ozdemir\Datatables\Test;
44

5-
use Ozdemir\Datatables\ColumnNameList;
65
use Ozdemir\Datatables\DB\SQLite;
76
use Ozdemir\Datatables\Datatables;
87
use PHPUnit\Framework\TestCase;
@@ -184,7 +183,7 @@ public function testSortsExcludingHiddenColumns()
184183
public function testSortsExcludingHiddenColumnsObjectData()
185184
{
186185
$this->request->query->set('search', ['value' => '']);
187-
$this->request->query->set('order', [['column' => '1', 'dir' => 'asc']]); // age - asc
186+
$this->request->query->set('order', [['column' => '1', 'dir' => 'asc']]);
188187

189188
$this->request->query->set('columns', [
190189
['data' => 'name', 'name' => '', 'searchable' => true, 'orderable' => true, 'search' => ['value' => '']],
@@ -203,7 +202,7 @@ public function testSortsExcludingHiddenColumnsObjectData()
203202
public function testReorderingColumnsDoesNotAffectOrdering()
204203
{
205204
$this->request->query->set('search', ['value' => '']);
206-
$this->request->query->set('order', [['column' => '0', 'dir' => 'asc']]); // age - asc
205+
$this->request->query->set('order', [['column' => '0', 'dir' => 'asc']]);
207206

208207
$this->request->query->set('columns', [
209208
['data' => 'age', 'name' => '', 'searchable' => true, 'orderable' => true, 'search' => ['value' => '']],
@@ -221,7 +220,7 @@ public function testReorderingColumnsDoesNotAffectOrdering()
221220
public function testReorderingColumnsDoesNotAffectGlobalSearching()
222221
{
223222
$this->request->query->set('search', ['value' => 'Stephanie']);
224-
$this->request->query->set('order', [['column' => '0', 'dir' => 'asc']]); // age - asc
223+
$this->request->query->set('order', [['column' => '0', 'dir' => 'asc']]);
225224

226225
$this->request->query->set('columns', [
227226
['data' => '2', 'name' => '', 'searchable' => true, 'orderable' => true, 'search' => ['value' => '']],
@@ -238,7 +237,7 @@ public function testReorderingColumnsDoesNotAffectGlobalSearching()
238237
public function testReorderingColumnsDoesNotAffectIndividualSearching()
239238
{
240239
$this->request->query->set('search', ['value' => '']);
241-
$this->request->query->set('order', [['column' => '0', 'dir' => 'asc']]); // age - asc
240+
$this->request->query->set('order', [['column' => '0', 'dir' => 'asc']]);
242241

243242
$this->request->query->set('columns', [
244243
['data' => 'surname', 'name' => '', 'searchable' => true, 'orderable' => true, 'search' => ['value' => 'McCoy']],
@@ -252,4 +251,72 @@ public function testReorderingColumnsDoesNotAffectIndividualSearching()
252251

253252
$this->assertSame(['name' => 'Colin', 'surname' => 'McCoy', 'age' => '19'], $datatables['data'][0]);
254253
}
254+
255+
public function testCustomFilteringBetween()
256+
{
257+
$this->request->query->set('search', ['value' => '']);
258+
$this->request->query->set('order', [['column' => '0', 'dir' => 'asc']]);
259+
260+
$this->request->query->set('columns', [
261+
['data' => '0', 'name' => '', 'searchable' => true, 'orderable' => true, 'search' => ['value' => '']],
262+
['data' => '1', 'name' => '', 'searchable' => true, 'orderable' => true, 'search' => ['value' => '']],
263+
['data' => '2', 'name' => '', 'searchable' => true, 'orderable' => true, 'search' => ['value' => '']],
264+
]);
265+
266+
$this->db->query('Select id as fid, name, surname, age from mytable');
267+
$this->db->filter('fid', function(){
268+
return $this->between(4,6);
269+
});
270+
271+
$datatables = $this->db->generate()->toArray();
272+
273+
$this->assertSame(11, $datatables['recordsTotal']);
274+
$this->assertSame(3, $datatables['recordsFiltered']);
275+
}
276+
277+
public function testCustomFilteringWhereIn()
278+
{
279+
$this->request->query->set('search', ['value' => '']);
280+
$this->request->query->set('order', [['column' => '0', 'dir' => 'asc']]);
281+
282+
$this->request->query->set('columns', [
283+
['data' => '0', 'name' => '', 'searchable' => true, 'orderable' => true, 'search' => ['value' => '']],
284+
['data' => '1', 'name' => '', 'searchable' => true, 'orderable' => true, 'search' => ['value' => '']],
285+
['data' => '2', 'name' => '', 'searchable' => true, 'orderable' => true, 'search' => ['value' => '']],
286+
]);
287+
288+
$this->db->query('Select id as fid, name, surname, age from mytable');
289+
$this->db->filter('fid', function(){
290+
return $this->whereIn([5]);
291+
});
292+
293+
$datatables = $this->db->generate()->toArray();
294+
295+
$this->assertSame(11, $datatables['recordsTotal']);
296+
$this->assertSame(1, $datatables['recordsFiltered']);
297+
$this->assertSame(['5', 'Ruby', 'Pickett', '28'], $datatables['data'][0]);
298+
}
299+
300+
public function testReturnDefaultSearchWhenNull()
301+
{
302+
$this->request->query->set('search', ['value' => '']);
303+
$this->request->query->set('order', [['column' => '0', 'dir' => 'asc']]);
304+
305+
$this->request->query->set('columns', [
306+
['data' => '0', 'name' => '', 'searchable' => true, 'orderable' => true, 'search' => ['value' => '5']],
307+
['data' => '1', 'name' => '', 'searchable' => true, 'orderable' => true, 'search' => ['value' => '']],
308+
['data' => '2', 'name' => '', 'searchable' => true, 'orderable' => true, 'search' => ['value' => '']],
309+
]);
310+
311+
$this->db->query('Select id as fid, name, surname, age from mytable');
312+
$this->db->filter('fid', function(){
313+
//return $this->defaultFilter(); // when it is not defined, returns defaultFilter
314+
});
315+
316+
$datatables = $this->db->generate()->toArray();
317+
318+
$this->assertSame(11, $datatables['recordsTotal']);
319+
$this->assertSame(1, $datatables['recordsFiltered']);
320+
$this->assertSame(['5', 'Ruby', 'Pickett', '28'], $datatables['data'][0]);
321+
}
255322
}

0 commit comments

Comments
 (0)