Passed
Push — master ( 01151b...3d8b44 )
by Kevin
04:44
created

PagerTest::createPager()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 1
nc 1
nop 3
dl 0
loc 3
rs 10
c 1
b 0
f 0
1
<?php
2
3
namespace Zenstruck\Porpaginas\Tests;
4
5
use PHPUnit\Framework\TestCase;
6
use Zenstruck\Porpaginas\Arrays\ArrayResult;
7
use Zenstruck\Porpaginas\Pager;
8
9
/**
10
 * @author Kevin Bond <[email protected]>
11
 */
12
final class PagerTest extends TestCase
13
{
14
    /**
15
     * @test
16
     */
17
    public function it_properly_handles_page1(): void
18
    {
19
        $pager = $this->createPager(\range(1, 504), 1, 20);
20
21
        $this->assertTrue($pager->haveToPaginate());
22
        $this->assertSame(1, $pager->current());
23
        $this->assertSame(1, $pager->first());
24
        $this->assertSame(2, $pager->next());
25
        $this->assertNull($pager->previous());
26
        $this->assertSame(26, $pager->last());
27
        $this->assertSame(26, $pager->pageCount());
28
        $this->assertSame(504, $pager->totalCount());
29
        $this->assertSame(20, $pager->limit());
30
        $this->assertCount(20, $pager);
31
        $this->assertSame(\range(1, 20), \iterator_to_array($pager));
32
    }
33
34
    /**
35
     * @test
36
     */
37
    public function it_properly_handles_page2(): void
38
    {
39
        $pager = $this->createPager(\range(1, 504), 2, 20);
40
41
        $this->assertTrue($pager->haveToPaginate());
42
        $this->assertSame(2, $pager->current());
43
        $this->assertSame(1, $pager->first());
44
        $this->assertSame(3, $pager->next());
45
        $this->assertSame(1, $pager->previous());
46
        $this->assertCount(20, $pager);
47
        $this->assertSame(\range(21, 40), \iterator_to_array($pager));
48
    }
49
50
    /**
51
     * @test
52
     */
53
    public function it_properly_handles_the_last_page(): void
54
    {
55
        $pager = $this->createPager(\range(1, 504), 26, 20);
56
57
        $this->assertTrue($pager->haveToPaginate());
58
        $this->assertSame(26, $pager->current());
59
        $this->assertSame(1, $pager->first());
60
        $this->assertNull($pager->next());
61
        $this->assertSame(25, $pager->previous());
62
        $this->assertCount(4, $pager);
63
        $this->assertSame(\range(501, 504), \iterator_to_array($pager));
64
    }
65
66
    /**
67
     * @test
68
     */
69
    public function it_properly_handles_an_empty_page(): void
70
    {
71
        $pager = $this->createPager([], 1, 20);
72
73
        $this->assertFalse($pager->haveToPaginate());
74
        $this->assertSame(1, $pager->current());
75
        $this->assertSame(1, $pager->first());
76
        $this->assertNull($pager->next());
77
        $this->assertNull($pager->previous());
78
        $this->assertSame(1, $pager->last());
79
        $this->assertSame(1, $pager->pageCount());
80
        $this->assertSame(0, $pager->totalCount());
81
        $this->assertCount(0, $pager);
82
        $this->assertSame([], \iterator_to_array($pager));
83
    }
84
85
    /**
86
     * @test
87
     */
88
    public function it_properly_handles_a_single_page(): void
89
    {
90
        $pager = $this->createPager(\range(1, 10), 1, 20);
91
92
        $this->assertFalse($pager->haveToPaginate());
93
        $this->assertSame(1, $pager->current());
94
        $this->assertSame(1, $pager->first());
95
        $this->assertNull($pager->next());
96
        $this->assertNull($pager->previous());
97
        $this->assertSame(1, $pager->last());
98
        $this->assertSame(1, $pager->pageCount());
99
        $this->assertSame(10, $pager->totalCount());
100
        $this->assertCount(10, $pager);
101
        $this->assertSame(\range(1, 10), \iterator_to_array($pager));
102
    }
103
104
    /**
105
     * @test
106
     */
107
    public function it_properly_handles_a_too_large_page_as_the_last_page(): void
108
    {
109
        $pager = $this->createPager(\range(1, 504), 30, 20);
110
111
        $this->assertSame(26, $pager->current());
112
        $this->assertSame(1, $pager->first());
113
        $this->assertNull($pager->next());
114
        $this->assertSame(25, $pager->previous());
115
        $this->assertCount(4, $pager);
116
        $this->assertSame(\range(501, 504), \iterator_to_array($pager));
117
    }
118
119
    /**
120
     * @test
121
     */
122
    public function invalid_page(): void
123
    {
124
        $pager = $this->createPager([], 0);
125
        $this->assertSame(1, $pager->current());
126
127
        $pager = $this->createPager([], -1);
128
        $this->assertSame(1, $pager->current());
129
    }
130
131
    /**
132
     * @test
133
     */
134
    public function invalid_limit(): void
135
    {
136
        $pager = $this->createPager([], 1, 0);
137
        $this->assertSame(20, $pager->limit());
138
139
        $pager = $this->createPager([], 1, -1);
140
        $this->assertSame(20, $pager->limit());
141
    }
142
143
    protected function createPager(array $results, int $page, int $limit = Pager::DEFAULT_LIMIT): Pager
144
    {
145
        return new Pager(new ArrayResult($results), $page, $limit);
146
    }
147
}
148