FilterTest::testFilterWithDateMultipleAndLogic()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 20
Code Lines 11

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 11
dl 0
loc 20
rs 9.9
c 0
b 0
f 0
cc 1
nc 1
nop 0
1
<?php
2
declare(strict_types=1);
3
4
namespace TBolier\RethinkQL\IntegrationTest\Operation;
5
6
use TBolier\RethinkQL\Response\Cursor;
7
use TBolier\RethinkQL\Response\ResponseInterface;
8
9
class FilterTest extends AbstractTableTest
10
{
11
    /**
12
     * @throws \Exception
13
     */
14
    public function testFilter()
15
    {
16
        $this->insertDocument(1);
17
18
        /** @var Cursor $cursor */
19
        $cursor = $this->r()
20
            ->table('tabletest')
21
            ->filter(['title' => 'Test document 1'])
22
            ->run();
23
24
        /** @var array $array */
25
        $array = $cursor->current();
26
27
        $this->assertInstanceOf(\Iterator::class, $cursor);
28
        $this->assertArraySubset(['title' => 'Test document 1'], $array);
0 ignored issues
show
Deprecated Code introduced by
The function PHPUnit\Framework\Assert::assertArraySubset() has been deprecated: https://github.com/sebastianbergmann/phpunit/issues/3494 ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-deprecated  annotation

28
        /** @scrutinizer ignore-deprecated */ $this->assertArraySubset(['title' => 'Test document 1'], $array);

This function has been deprecated. The supplier of the function has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the function will be removed and what other function to use instead.

Loading history...
29
    }
30
31
    /**
32
     * @throws \Exception
33
     */
34
    public function testFilterOnMultipleDocuments()
35
    {
36
        $this->insertDocument(1);
37
        $this->insertDocument(2);
38
        $this->insertDocument(3);
39
        $this->insertDocument(4);
40
        $this->insertDocument(5);
41
42
        /** @var Cursor $cursor */
43
        $cursor = $this->r()
44
            ->table('tabletest')
45
            ->filter(['title' => 'Test document 1'])
46
            ->run();
47
48
        $this->assertCount(1, $cursor);
49
    }
50
51
    /**
52
     * @return void
53
     * @throws \Exception
54
     */
55
    public function testFilterAndIsEmpty(): void
56
    {
57
        $this->insertDocument(1);
58
        $this->insertDocument('stringId');
59
60
        /** @var ResponseInterface $res */
61
        $res = $this->r()
62
            ->table('tabletest')
63
            ->filter(['id' => 1])
64
            ->isEmpty()
65
            ->run();
66
67
        $this->assertFalse($res->getData());
68
    }
69
70
    /**
71
     * @return void
72
     * @throws \Exception
73
     */
74
    public function testFilterAndCount(): void
75
    {
76
        $this->insertDocument(1);
77
        $this->insertDocument('stringId');
78
79
        /** @var ResponseInterface $res */
80
        $res = $this->r()
81
            ->table('tabletest')
82
            ->filter(['description' => 'A document description.'])
83
            ->count()
84
            ->run();
85
86
        $this->assertEquals(2, $res->getData());
87
    }
88
89
    /**
90
     * @return void
91
     * @throws \Exception
92
     */
93
    public function testFilterAndAvg(): void
94
    {
95
        $this->insertDocumentWithNumber(1, 50);
96
        $this->insertDocumentWithNumber(2, 100);
97
98
        /** @var ResponseInterface $res */
99
        $res = $this->r()
100
            ->table('tabletest')
101
            ->filter(['description' => 'A document description.'])
102
            ->avg('number')
103
            ->run();
104
105
        $this->assertEquals(75, $res->getData());
106
    }
107
108
    /**
109
     * @return void
110
     * @throws \Exception
111
     */
112
    public function testFilterAndSum(): void
113
    {
114
        $this->insertDocumentWithNumber(1, 50);
115
        $this->insertDocumentWithNumber(2, 100);
116
117
        /** @var ResponseInterface $res */
118
        $res = $this->r()
119
            ->table('tabletest')
120
            ->filter(['description' => 'A document description.'])
121
            ->sum('number')
122
            ->run();
123
124
        $this->assertEquals(150, $res->getData());
125
    }
126
127
    /**
128
     * @return void
129
     * @throws \Exception
130
     */
131
    public function testFilterAndLimit(): void
132
    {
133
        $this->insertDocument(1);
134
        $this->insertDocument('stringId');
135
136
        /** @var ResponseInterface $res */
137
        $cursor = $this->r()
138
            ->table('tabletest')
139
            ->filter(['description' => 'A document description.'])
140
            ->limit(1)
141
            ->run();
142
143
        $this->assertCount(1, $cursor);
144
    }
145
146
    /**
147
     * @return void
148
     * @throws \Exception
149
     */
150
    public function testFilterAndSkip(): void
151
    {
152
        $this->insertDocument(1);
153
        $this->insertDocument('stringId');
154
155
        /** @var ResponseInterface $res */
156
        $cursor = $this->r()
157
            ->table('tabletest')
158
            ->filter(['description' => 'A document description.'])
159
            ->skip(1)
160
            ->run();
161
162
        $this->assertCount(1, $cursor);
163
    }
164
165
    /**
166
     * @return void
167
     * @throws \Exception
168
     */
169
    public function testFilterAndOrderBy(): void
170
    {
171
        $this->insertDocument(1);
172
        $this->insertDocument('stringId');
173
174
        /** @var ResponseInterface $res */
175
        $res = $this->r()
176
            ->table('tabletest')
177
            ->filter(['description' => 'A document description.'])
178
            ->orderBy($this->r()->desc('id'))
179
            ->run();
180
181
        $this->assertArraySubset(['id' => 'stringId'], $res->getData()[0]);
0 ignored issues
show
Deprecated Code introduced by
The function PHPUnit\Framework\Assert::assertArraySubset() has been deprecated: https://github.com/sebastianbergmann/phpunit/issues/3494 ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-deprecated  annotation

181
        /** @scrutinizer ignore-deprecated */ $this->assertArraySubset(['id' => 'stringId'], $res->getData()[0]);

This function has been deprecated. The supplier of the function has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the function will be removed and what other function to use instead.

Loading history...
182
    }
183
184
    /**
185
     * @return void
186
     * @throws \Exception
187
     */
188
    public function testFilterAndMin(): void
189
    {
190
        $this->insertDocumentWithNumber(1, 77);
191
        $this->insertDocumentWithNumber(2, 99);
192
193
        /** @var ResponseInterface $res */
194
        $res = $this->r()
195
            ->table('tabletest')
196
            ->filter(['description' => 'A document description.'])
197
            ->min('number')
198
            ->run();
199
200
        $this->assertArraySubset(['number' => 77], $res->getData());
0 ignored issues
show
Deprecated Code introduced by
The function PHPUnit\Framework\Assert::assertArraySubset() has been deprecated: https://github.com/sebastianbergmann/phpunit/issues/3494 ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-deprecated  annotation

200
        /** @scrutinizer ignore-deprecated */ $this->assertArraySubset(['number' => 77], $res->getData());

This function has been deprecated. The supplier of the function has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the function will be removed and what other function to use instead.

Loading history...
201
    }
202
203
    /**
204
     * @return void
205
     * @throws \Exception
206
     */
207
    public function testFilterAndMax(): void
208
    {
209
        $this->insertDocumentWithNumber(1, 77);
210
        $this->insertDocumentWithNumber(2, 99);
211
212
        /** @var ResponseInterface $res */
213
        $res = $this->r()
214
            ->table('tabletest')
215
            ->filter(['description' => 'A document description.'])
216
            ->max('number')
217
            ->run();
218
219
        $this->assertArraySubset(['number' => 99], $res->getData());
0 ignored issues
show
Deprecated Code introduced by
The function PHPUnit\Framework\Assert::assertArraySubset() has been deprecated: https://github.com/sebastianbergmann/phpunit/issues/3494 ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-deprecated  annotation

219
        /** @scrutinizer ignore-deprecated */ $this->assertArraySubset(['number' => 99], $res->getData());

This function has been deprecated. The supplier of the function has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the function will be removed and what other function to use instead.

Loading history...
220
    }
221
222
    /**
223
     * @throws \Exception
224
     */
225
    public function testFilterWithDateGreaterThanLogic(): void
226
    {
227
        $this->insertDocumentWithDate(1, new \DateTime('-1 days'));
228
        $this->insertDocumentWithDate(2, new \DateTime('+1 days'));
229
230
        /** @var ResponseInterface $res */
231
        $row = $this->r()->row('date')->gt((new \DateTime('now'))->format(\DateTime::ATOM));
232
        $cursor = $this->r()
233
            ->table('tabletest')
234
            ->filter($row)
235
            ->run();
236
237
        $this->assertCount(1, $cursor);
238
    }
239
240
    /**
241
     * @throws \Exception
242
     */
243
    public function testFilterWithDateLowerThanLogic(): void
244
    {
245
        $this->insertDocumentWithDate(1, new \DateTime('-1 days'));
246
        $this->insertDocumentWithDate(2, new \DateTime('+1 days'));
247
248
        /** @var ResponseInterface $res */
249
        $row = $this->r()->row('date')->lt((new \DateTime('now'))->format(\DateTime::ATOM));
250
        $cursor = $this->r()
251
            ->table('tabletest')
252
            ->filter($row)
253
            ->run();
254
255
        $this->assertCount(1, $cursor);
256
    }
257
258
    /**
259
     * @throws \Exception
260
     */
261
    public function testFilterGreaterOrEqualThanLogic(): void
262
    {
263
        $this->insertDocumentWithNumber(1, 11);
264
        $this->insertDocumentWithNumber(2, 22);
265
        $this->insertDocumentWithNumber(3, 33);
266
267
        /** @var ResponseInterface $res */
268
        $row = $this->r()->row('number')->ge(22);
269
        $cursor = $this->r()
270
            ->table('tabletest')
271
            ->filter($row)
272
            ->run();
273
274
        $this->assertCount(2, $cursor);
275
    }
276
277
    /**
278
     * @throws \Exception
279
     */
280
    public function testFilterLowerOrEqualThanLogic(): void
281
    {
282
        $this->insertDocumentWithNumber(1, 11);
283
        $this->insertDocumentWithNumber(2, 22);
284
        $this->insertDocumentWithNumber(3, 33);
285
286
        /** @var ResponseInterface $res */
287
        $row = $this->r()->row('number')->le(22);
288
        $cursor = $this->r()
289
            ->table('tabletest')
290
            ->filter($row)
291
            ->run();
292
293
        $this->assertCount(2, $cursor);
294
    }
295
296
    /**
297
     * @throws \Exception
298
     */
299
    public function testFilterWithDateEqualLogic(): void
300
    {
301
        $this->insertDocumentWithDate(1, $yesterday = new \DateTime('-1 days'));
302
        $this->insertDocumentWithDate(2, new \DateTime('+1 days'));
303
304
        /** @var ResponseInterface $res */
305
        $row = $this->r()->row('date')->eq($yesterday->format(\DateTime::ATOM));
306
        $cursor = $this->r()
307
            ->table('tabletest')
308
            ->filter($row)
309
            ->run();
310
311
        $this->assertCount(1, $cursor);
312
    }
313
314
    /**
315
     * @throws \Exception
316
     */
317
    public function testFilterWithDateNotEqualLogic(): void
318
    {
319
        $this->insertDocumentWithDate(1, $yesterday = new \DateTime('-1 days'));
320
        $this->insertDocumentWithDate(2, new \DateTime('+1 days'));
321
322
        $row = $this->r()->row('date')->ne($yesterday->format(\DateTime::ATOM));
323
        $cursor = $this->r()
324
            ->table('tabletest')
325
            ->filter($row)
326
            ->run();
327
328
        $this->assertCount(1, $cursor);
329
    }
330
331
    /**
332
     * @throws \Exception
333
     */
334
    public function testFilterWithDateMultipleAndLogic(): void
335
    {
336
        $this->insertDocumentWithDate(1, $yesterday = new \DateTime('-1 days'));
337
        $this->insertDocumentWithDate(2, $tomorrow = new \DateTime('+1 days'));
338
339
        /** @var ResponseInterface $res */
340
        $row = $this->r()->row('date')->eq($yesterday->format(\DateTime::ATOM))->and(
341
            $this->r()->row('date')->ne($tomorrow->format(\DateTime::ATOM))->and(
342
                $this->r()->row('id')->eq(1)->and(
343
                    $this->r()->row('id')->ne(2)
344
                )
345
            )
346
        );
347
348
        $cursor = $this->r()
349
            ->table('tabletest')
350
            ->filter($row)
351
            ->run();
352
353
        $this->assertCount(1, $cursor);
354
    }
355
356
    /**
357
     * @throws \Exception
358
     */
359
    public function testFilterWithDateMultipleOrLogic(): void
360
    {
361
        $this->insertDocumentWithDate(1, $yesterday = new \DateTime('-1 days'));
362
        $this->insertDocumentWithDate(2, $tomorrow = new \DateTime('+1 days'));
363
364
        /** @var ResponseInterface $res */
365
        $row = $this->r()->row('date')->eq($yesterday->format(\DateTime::ATOM))->or(
366
            $this->r()->row('date')->eq($tomorrow->format(\DateTime::ATOM))->and(
367
                $this->r()->row('id')->gt(0)->or(
368
                    $this->r()->row('id')->lt(3)
369
                )
370
            )
371
        );
372
373
        $cursor = $this->r()
374
            ->table('tabletest')
375
            ->filter($row)
376
            ->run();
377
378
        $this->assertCount(2, $cursor);
379
    }
380
381
    /**
382
     * @return void
383
     * @throws \Exception
384
     */
385
    public function testNotLogic(): void
386
    {
387
        $this->insertDocumentWithNumber(1, 55);
388
        $this->insertDocumentWithNumber(2, 77);
389
        $this->insertDocumentWithNumber(3, 99);
390
        $this->insertDocumentWithNumber(4, 111);
391
392
        $row = $this->r()->row('number')->eq(77)->not();
393
        $cursor = $this->r()
394
            ->table('tabletest')
395
            ->filter($row)
396
            ->run();
397
398
        $this->assertCount(3, $cursor);
399
    }
400
}
401