forked from laravel/framework
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCursorPaginatorTest.php
127 lines (100 loc) · 4.18 KB
/
CursorPaginatorTest.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
<?php
namespace Illuminate\Tests\Pagination;
use Illuminate\Pagination\Cursor;
use Illuminate\Pagination\CursorPaginator;
use Illuminate\Support\Collection;
use PHPUnit\Framework\TestCase;
class CursorPaginatorTest extends TestCase
{
public function testReturnsRelevantContextInformation()
{
$p = new CursorPaginator($array = [['id' => 1], ['id' => 2], ['id' => 3]], 2, null, [
'parameters' => ['id'],
]);
$this->assertTrue($p->hasPages());
$this->assertTrue($p->hasMorePages());
$this->assertEquals([['id' => 1], ['id' => 2]], $p->items());
$pageInfo = [
'data' => [['id' => 1], ['id' => 2]],
'path' => '/',
'per_page' => 2,
'next_cursor' => $this->getCursor(['id' => 2]),
'next_page_url' => '/?cursor='.$this->getCursor(['id' => 2]),
'prev_cursor' => null,
'prev_page_url' => null,
];
$this->assertEquals($pageInfo, $p->toArray());
}
public function testPaginatorRemovesTrailingSlashes()
{
$p = new CursorPaginator($array = [['id' => 4], ['id' => 5], ['id' => 6]], 2, null,
['path' => 'http://website.com/test/', 'parameters' => ['id']]);
$this->assertSame('http://website.com/test?cursor='.$this->getCursor(['id' => 5]), $p->nextPageUrl());
}
public function testPaginatorGeneratesUrlsWithoutTrailingSlash()
{
$p = new CursorPaginator($array = [['id' => 4], ['id' => 5], ['id' => 6]], 2, null,
['path' => 'http://website.com/test', 'parameters' => ['id']]);
$this->assertSame('http://website.com/test?cursor='.$this->getCursor(['id' => 5]), $p->nextPageUrl());
}
public function testItRetrievesThePaginatorOptions()
{
$p = new CursorPaginator($array = [['id' => 4], ['id' => 5], ['id' => 6]], 2, null,
$options = ['path' => 'http://website.com/test', 'parameters' => ['id']]);
$this->assertSame($p->getOptions(), $options);
}
public function testPaginatorReturnsPath()
{
$p = new CursorPaginator($array = [['id' => 4], ['id' => 5], ['id' => 6]], 2, null,
$options = ['path' => 'http://website.com/test', 'parameters' => ['id']]);
$this->assertSame($p->path(), 'http://website.com/test');
}
public function testCanTransformPaginatorItems()
{
$p = new CursorPaginator($array = [['id' => 4], ['id' => 5], ['id' => 6]], 2, null,
$options = ['path' => 'http://website.com/test', 'parameters' => ['id']]);
$p->through(function ($item) {
$item['id'] = $item['id'] + 2;
return $item;
});
$this->assertInstanceOf(CursorPaginator::class, $p);
$this->assertSame([['id' => 6], ['id' => 7]], $p->items());
}
public function testCursorPaginatorOnFirstAndLastPage()
{
$paginator = new CursorPaginator([['id' => 1], ['id' => 2], ['id' => 3], ['id' => 4]], 2, null, [
'parameters' => ['id'],
]);
$this->assertTrue($paginator->onFirstPage());
$this->assertFalse($paginator->onLastPage());
$cursor = new Cursor(['id' => 3]);
$paginator = new CursorPaginator([['id' => 3], ['id' => 4]], 2, $cursor, [
'parameters' => ['id'],
]);
$this->assertFalse($paginator->onFirstPage());
$this->assertTrue($paginator->onLastPage());
}
public function testReturnEmptyCursorWhenItemsAreEmpty()
{
$cursor = new Cursor(['id' => 25], true);
$p = new CursorPaginator(new Collection, 25, $cursor, [
'path' => 'http://website.com/test',
'cursorName' => 'cursor',
'parameters' => ['id'],
]);
$this->assertInstanceOf(CursorPaginator::class, $p);
$this->assertSame([
'data' => [],
'path' => 'http://website.com/test',
'per_page' => 25,
'next_cursor' => null,
'next_page_url' => null,
'prev_cursor' => null,
'prev_page_url' => null,
], $p->toArray());
}
protected function getCursor($params, $isNext = true)
{
return (new Cursor($params, $isNext))->encode();
}
}