Issues (291)

tests/AlterableResultIteratorTest.php (2 issues)

Labels
Severity
1
<?php
2
3
declare(strict_types=1);
4
5
namespace TheCodingMachine\TDBM;
6
7
use PHPUnit\Framework\TestCase;
8
9
class AlterableResultIteratorTest extends TestCase
10
{
11
    public function testUnalteredResultSet(): void
12
    {
13
        $a = (object) ['a' => 'a'];
14
        $b = (object) ['b' => 'c'];
15
        $c = (object) ['b' => 'c'];
16
17
        $iterator = new \ArrayIterator([$a, $b, $c]);
18
19
        $alterableResultIterator = new AlterableResultIterator($iterator);
20
21
        $this->assertEquals([$a, $b, $c], $alterableResultIterator->toArray());
22
        $this->assertEquals([$a, $b, $c], $alterableResultIterator->jsonSerialize());
23
        $this->assertEquals($a, $alterableResultIterator[0]);
24
        $this->assertTrue(isset($alterableResultIterator[0]));
25
        $this->assertCount(3, $alterableResultIterator);
26
        $this->assertEquals($a, $alterableResultIterator->first());
0 ignored issues
show
Are you sure the usage of $alterableResultIterator->first() targeting TheCodingMachine\TDBM\Al...ResultIterator::first() seems to always return null.

This check looks for function or method calls that always return null and whose return value is used.

class A
{
    function getObject()
    {
        return null;
    }

}

$a = new A();
if ($a->getObject()) {

The method getObject() can return nothing but null, so it makes no sense to use the return value.

The reason is most likely that a function or method is imcomplete or has been reduced for debug purposes.

Loading history...
27
    }
28
29
    public function testEmptyResultSet(): void
30
    {
31
        $alterableResultIterator = new AlterableResultIterator();
32
33
        $this->assertEquals([], $alterableResultIterator->toArray());
34
35
        $this->assertEquals([], iterator_to_array($alterableResultIterator->getIterator()));
36
        $this->assertNull($alterableResultIterator->first());
0 ignored issues
show
Are you sure the usage of $alterableResultIterator->first() targeting TheCodingMachine\TDBM\Al...ResultIterator::first() seems to always return null.

This check looks for function or method calls that always return null and whose return value is used.

class A
{
    function getObject()
    {
        return null;
    }

}

$a = new A();
if ($a->getObject()) {

The method getObject() can return nothing but null, so it makes no sense to use the return value.

The reason is most likely that a function or method is imcomplete or has been reduced for debug purposes.

Loading history...
37
    }
38
39
    public function testAlterEmptyResultSet(): void
40
    {
41
        $alterableResultIterator = new AlterableResultIterator();
42
43
        $a = (object) ['a' => 'a'];
44
        $b = (object) ['b' => 'c'];
45
        $c = (object) ['b' => 'c'];
46
47
        $alterableResultIterator->add($a);
48
        $alterableResultIterator->add($b);
49
        $alterableResultIterator->remove($b);
50
        $alterableResultIterator->remove($c);
51
52
        $this->assertEquals([$a], $alterableResultIterator->toArray());
53
    }
54
55
    public function testAlterFilledResultSet(): void
56
    {
57
        $a = (object) ['a' => 'a'];
58
        $b = (object) ['b' => 'c'];
59
        $c = (object) ['b' => 'c'];
60
61
        $iterator = new \ArrayIterator([$a, $b]);
62
63
        $alterableResultIterator = new AlterableResultIterator($iterator);
64
65
        $alterableResultIterator->add($c);
66
        $alterableResultIterator->remove($b);
67
68
        $this->assertEquals([$a, $c], $alterableResultIterator->toArray());
69
        $this->assertEquals([$c], iterator_to_array($alterableResultIterator->take(1, 1)));
70
    }
71
72
    public function testAddAfterToArray(): void
73
    {
74
        $a = (object) ['a' => 'a'];
75
        $b = (object) ['b' => 'c'];
76
        $c = (object) ['b' => 'c'];
77
78
        $iterator = new \ArrayIterator([$a, $b]);
79
80
        $alterableResultIterator = new AlterableResultIterator($iterator);
81
82
        $this->assertEquals([$a, $b], $alterableResultIterator->toArray());
83
84
        $alterableResultIterator->add($c);
85
        $alterableResultIterator->remove($b);
86
87
        $this->assertEquals([$a, $c], $alterableResultIterator->toArray());
88
    }
89
90
    public function testGetIterator(): void
91
    {
92
        $a = (object) ['a' => 'a'];
93
        $b = (object) ['b' => 'c'];
94
        $c = (object) ['b' => 'c'];
95
96
        $iterator = new \ArrayIterator([$a, $b]);
97
98
        $alterableResultIterator = new AlterableResultIterator($iterator);
99
100
        // Test getting the iterator with no alterations (should serve the initial iterator)
101
        $this->assertEquals([$a, $b], iterator_to_array($alterableResultIterator->getIterator()));
102
        $this->assertInstanceOf(\ArrayIterator::class, $alterableResultIterator->getIterator());
103
104
        $alterableResultIterator->add($c);
105
        $this->assertEquals([$a, $b, $c], iterator_to_array($alterableResultIterator->getIterator()));
106
        $this->assertInstanceOf(\ArrayIterator::class, $alterableResultIterator->getIterator());
107
    }
108
109
    public function testSetException(): void
110
    {
111
        $alterableResultIterator = new AlterableResultIterator();
112
        $this->expectException(TDBMInvalidOperationException::class);
113
        $alterableResultIterator[0] = 'foo';
114
    }
115
116
    public function testUnsetException(): void
117
    {
118
        $alterableResultIterator = new AlterableResultIterator();
119
        $this->expectException(TDBMInvalidOperationException::class);
120
        unset($alterableResultIterator[0]);
121
    }
122
123
    public function testMap(): void
124
    {
125
        $a = (object) ['foo' => 'bar'];
126
127
        $iterator = new \ArrayIterator([$a]);
128
129
        $alterableResultIterator = new AlterableResultIterator($iterator);
130
131
        $map = $alterableResultIterator->map(function ($item) {
132
            return $item->foo;
133
        });
134
135
        $this->assertEquals(['bar'], iterator_to_array($map));
136
    }
137
138
    public function testSetIterator(): void
139
    {
140
        $alterableResultIterator = new AlterableResultIterator();
141
142
        $a = (object) ['a' => 'a'];
143
        $b = (object) ['b' => 'c'];
144
        $c = (object) ['b' => 'c'];
145
146
        $iterator = new \ArrayIterator([$a, $b, $c]);
147
148
        $alterableResultIterator->setResultIterator($iterator);
149
150
        $this->assertEquals([$a, $b, $c], $alterableResultIterator->toArray());
151
    }
152
}
153