Completed
Pull Request — master (#7)
by Chito
07:08
created

PaginationResultTest::testJsonSerialize()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 2
c 0
b 0
f 0
dl 0
loc 4
rs 10
cc 1
nc 1
nop 3
1
<?php
2
3
namespace Lampager\Cake\Test\TestCase;
4
5
use Cake\I18n\Time;
6
use Cake\ORM\Entity;
7
use Lampager\Cake\PaginationResult;
8
9
class PaginationResultTest extends TestCase
10
{
11
    /**
12
     * @dataProvider resultProvider
13
     */
14
    public function testIteratorCurrent(array $entities, array $meta)
15
    {
16
        $actual = new PaginationResult($entities, $meta);
17
18
        $this->assertSame($entities[0], $actual->current());
19
20
        $actual->next();
21
        $this->assertTrue($actual->valid());
22
        $this->assertSame(1, $actual->key());
23
        $this->assertSame($entities[1], $actual->current());
24
25
        $actual->next();
26
        $this->assertTrue($actual->valid());
27
        $this->assertSame(2, $actual->key());
28
        $this->assertSame($entities[2], $actual->current());
29
30
        $actual->next();
31
        $this->assertFalse($actual->valid());
32
33
        $actual->rewind();
34
        $this->assertTrue($actual->valid());
35
        $this->assertSame(0, $actual->key());
36
        $this->assertSame($entities[0], $actual->current());
37
    }
38
39
    /**
40
     * @dataProvider resultProvider
41
     */
42
    public function testIteratorKey(array $entities, array $meta)
43
    {
44
        $actual = new PaginationResult($entities, $meta);
45
46
        $this->assertSame(0, $actual->key());
47
48
        $actual->next();
49
        $this->assertTrue($actual->valid());
50
        $this->assertSame(1, $actual->key());
51
        $this->assertSame($entities[1], $actual->current());
52
53
        $actual->next();
54
        $this->assertTrue($actual->valid());
55
        $this->assertSame(2, $actual->key());
56
        $this->assertSame($entities[2], $actual->current());
57
58
        $actual->next();
59
        $this->assertFalse($actual->valid());
60
61
        $actual->rewind();
62
        $this->assertTrue($actual->valid());
63
        $this->assertSame(0, $actual->key());
64
        $this->assertSame($entities[0], $actual->current());
65
    }
66
67
    /**
68
     * @dataProvider resultProvider
69
     */
70
    public function testIteratorNext(array $entities, array $meta)
71
    {
72
        $actual = new PaginationResult($entities, $meta);
73
74
        $actual->next();
75
        $this->assertTrue($actual->valid());
76
        $this->assertSame(1, $actual->key());
77
        $this->assertSame($entities[1], $actual->current());
78
79
        $actual->next();
80
        $this->assertTrue($actual->valid());
81
        $this->assertSame(2, $actual->key());
82
        $this->assertSame($entities[2], $actual->current());
83
84
        $actual->next();
85
        $this->assertFalse($actual->valid());
86
87
        $actual->rewind();
88
        $this->assertTrue($actual->valid());
89
        $this->assertSame(0, $actual->key());
90
        $this->assertSame($entities[0], $actual->current());
91
    }
92
93
    /**
94
     * @dataProvider resultProvider
95
     */
96
    public function testIteratorValid(array $entities, array $meta)
97
    {
98
        $actual = new PaginationResult($entities, $meta);
99
100
        $this->assertTrue($actual->valid());
101
        $this->assertSame(0, $actual->key());
102
        $this->assertSame($entities[0], $actual->current());
103
104
        $actual->next();
105
        $this->assertTrue($actual->valid());
106
        $this->assertSame(1, $actual->key());
107
        $this->assertSame($entities[1], $actual->current());
108
109
        $actual->next();
110
        $this->assertTrue($actual->valid());
111
        $this->assertSame(2, $actual->key());
112
        $this->assertSame($entities[2], $actual->current());
113
114
        $actual->next();
115
        $this->assertFalse($actual->valid());
116
117
        $actual->rewind();
118
        $this->assertTrue($actual->valid());
119
        $this->assertSame(0, $actual->key());
120
        $this->assertSame($entities[0], $actual->current());
121
    }
122
123
    /**
124
     * @dataProvider resultProvider
125
     */
126
    public function testJsonSerialize(array $entities, array $meta, $expected)
127
    {
128
        $actual = json_encode(new PaginationResult($entities, $meta));
129
        $this->assertJsonStringEqualsJsonString($expected, $actual);
130
    }
131
132
    /**
133
     * @dataProvider resultProvider
134
     */
135
    public function testSerializeAndUnserialize(array $entities, array $meta)
136
    {
137
        $actual = unserialize(serialize(new PaginationResult($entities, $meta)));
138
        $expected = new PaginationResult($entities, $meta);
139
        $this->assertJsonEquals($expected, $actual);
140
    }
141
142
    public function resultProvider()
143
    {
144
        yield [
145
            [
146
                new Entity([
147
                    'id' => 1,
148
                    'modified' => new Time('2017-01-01 10:00:00'),
149
                ]),
150
                new Entity([
151
                    'id' => 3,
152
                    'modified' => new Time('2017-01-01 10:00:00'),
153
                ]),
154
                new Entity([
155
                    'id' => 5,
156
                    'modified' => new Time('2017-01-01 10:00:00'),
157
                ]),
158
            ],
159
            [
160
                'hasPrevious' => null,
161
                'previousCursor' => null,
162
                'hasNext' => true,
163
                'nextCursor' => [
164
                    'Posts.id' => 2,
165
                    'Posts.modified' => new Time('2017-01-01 11:00:00'),
166
                ],
167
            ],
168
            '{
169
                "records": [
170
                    {
171
                        "id": 1,
172
                        "modified": "2017-01-01T10:00:00+00:00"
173
                    },
174
                    {
175
                        "id": 3,
176
                        "modified": "2017-01-01T10:00:00+00:00"
177
                    },
178
                    {
179
                        "id": 5,
180
                        "modified": "2017-01-01T10:00:00+00:00"
181
                    }
182
                ],
183
                "hasPrevious": null,
184
                "previousCursor": null,
185
                "hasNext": true,
186
                "nextCursor": {
187
                    "Posts.id": 2,
188
                    "Posts.modified": "2017-01-01T11:00:00+00:00"
189
                }
190
            }',
191
        ];
192
    }
193
}
194