Skip to content

Commit d9013a2

Browse files
committed
wrote test for general structure of datatable
1 parent 99b85b0 commit d9013a2

File tree

1 file changed

+162
-8
lines changed

1 file changed

+162
-8
lines changed

tests/DatatableTest.php

Lines changed: 162 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,173 @@
33
use \HamidRrj\LaravelDatatable\Tests\Models\User;
44
use \HamidRrj\LaravelDatatable\Facades\DatatableFacade;
55

6-
it('can shit', function() {
6+
it('can get data with empty filters', function () {
7+
8+
$users = User::factory()->count(5)->create();
9+
10+
$query = User::query();
11+
12+
$requestParameters = [
13+
'start' => 0,
14+
'size' => 10,
15+
'filters' => json_encode([]),
16+
'sorting' => json_encode([])
17+
];
18+
19+
$data = DatatableFacade::run(
20+
$query,
21+
$requestParameters
22+
);
23+
24+
expect($data['data'])
25+
->toEqual($users->toArray());
26+
27+
expect($data['meta']['totalRowCount'])
28+
->toBe(5);
29+
30+
31+
});
32+
33+
it('can get correct data with providing start and size arguments', function () {
34+
35+
$users = User::factory()->count(15)->create();
36+
37+
$query = User::query();
38+
39+
$requestParameters = [
40+
'start' => 5,
41+
'size' => 8,
42+
'filters' => json_encode([]),
43+
'sorting' => json_encode([])
44+
];
45+
46+
$data = DatatableFacade::run(
47+
$query,
48+
$requestParameters
49+
);
50+
51+
$expected = array_slice($users->toArray(), 5, 8);
52+
53+
expect($data['data'])
54+
->toEqual($expected);
55+
56+
expect($data['meta']['totalRowCount'])
57+
->toBe(15);
58+
59+
});
60+
61+
it('throws exception when trying to filter a field which is not allowed to be filtered', function () {
62+
63+
$query = User::query();
64+
65+
$requestParameters = [
66+
'start' => 5,
67+
'size' => 8,
68+
'filters' => json_encode([
69+
[
70+
'id' => 'username',
71+
'value' => 'sth',
72+
'fn' => 'contains',
73+
'datatype' => 'text'
74+
]
75+
]),
76+
'sorting' => json_encode([])
77+
];
78+
79+
$data = DatatableFacade::run(
80+
$query,
81+
$requestParameters
82+
);
83+
84+
})->throws(\HamidRrj\LaravelDatatable\Exceptions\InvalidFilterException::class, "filtering field `username` is not allowed.");
85+
86+
it('throws exception when provided filter fn is not defined and is invalid', function () {
787

888
$query = User::query();
989

10-
DatatableFacade::run(
90+
$requestParameters = [
91+
'start' => 5,
92+
'size' => 8,
93+
'filters' => json_encode([
94+
[
95+
'id' => 'username',
96+
'value' => 'sth',
97+
'fn' => 'sth',
98+
'datatype' => 'text'
99+
]
100+
]),
101+
'sorting' => json_encode([])
102+
];
103+
104+
$allowedFilters = array('username');
105+
106+
$data = DatatableFacade::run(
11107
$query,
12-
$request
108+
$requestParameters,
109+
$allowedFilters
13110
);
14111

15-
\Pest\Laravel\assertDatabaseHas('users', [
16-
'name' => $user->name,
17-
'username' => $user->username,
18-
'email' => $user->email,
19-
]);
112+
})->throws(\HamidRrj\LaravelDatatable\Exceptions\InvalidFilterException::class, "search function `sth` is invalid.");
113+
114+
it('throws exception when provided filter datatype is not defined and is invalid', function () {
115+
116+
$query = User::query();
117+
118+
$requestParameters = [
119+
'start' => 5,
120+
'size' => 8,
121+
'filters' => json_encode([
122+
[
123+
'id' => 'username',
124+
'value' => 'sth',
125+
'fn' => 'notEquals',
126+
'datatype' => 'sth'
127+
]
128+
]),
129+
'sorting' => json_encode([])
130+
];
131+
132+
$allowedFilters = array('username');
133+
134+
$data = DatatableFacade::run(
135+
$query,
136+
$requestParameters,
137+
$allowedFilters
138+
);
139+
140+
})->throws(\HamidRrj\LaravelDatatable\Exceptions\InvalidFilterException::class, "datatype `sth` is invalid.");
141+
142+
it('can get correct data with providing filter fn:`contains` and datatype:`text`', function () {
143+
144+
$users = User::factory()->count(15)->create();
145+
146+
$query = User::query();
147+
148+
$requestParameters = [
149+
'start' => 5,
150+
'size' => 8,
151+
'filters' => json_encode([]),
152+
'sorting' => json_encode([])
153+
];
154+
155+
$data = DatatableFacade::run(
156+
$query,
157+
$requestParameters
158+
);
159+
160+
$expected = array_slice($users->toArray(), 5, 8);
161+
162+
expect($data['data'])
163+
->toEqual($expected);
164+
165+
expect($data['meta']['totalRowCount'])
166+
->toBe(15);
20167

21168
});
169+
170+
171+
// contains: text, numeric
172+
// equals: text, numeric, date
173+
// not equals: text, numeric, date
174+
// between: numeric, date & text
175+
// GT AND LT: numeric , date

0 commit comments

Comments
 (0)