Completed
Push — master ( ed48d3...e52a1e )
by Daniel
02:16
created

JobIteratorTest::testCurrentGetsFirstJobOnFirstMethodCall()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 6
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 6
rs 9.4285
cc 1
eloc 4
nc 1
nop 0
1
<?php
2
3
namespace Jobles\Tests\Core\Job;
4
5
use Jobles\Core\Job\Job;
6
use Jobles\Core\Job\JobCollection;
7
use Jobles\Core\Job\JobIterator;
8
9
class JobIteratorTest extends \PHPUnit_Framework_TestCase
10
{
11
    /**
12
     * @var JobIterator
13
     */
14
    private $iterator;
15
16
    public function setUp()
17
    {
18
        $jobCollection = new JobCollection;
19
20
        $job = new Job;
21
        $job->setTitle('Job 1');
22
        $jobCollection->addJob($job);
23
24
        $job = new Job;
25
        $job->setTitle('Job 2');
26
        $jobCollection->addJob($job);
27
28
        $this->iterator = new JobIterator($jobCollection);
29
    }
30
31
    public function testConstructionWithJobCollection()
32
    {
33
        $this->assertAttributeInstanceOf(JobCollection::class, 'jobs', $this->iterator);
34
    }
35
36
    public function testCurrentGetsFirstJobOnFirstMethodCall()
37
    {
38
        $job = $this->iterator->current();
39
        $this->assertInstanceOf(Job::class, $job);
40
        $this->assertEquals('Job 1', $job->getTitle());
41
    }
42
43
    public function testNextAdvancesPositionCursor()
44
    {
45
        $this->iterator->next();
46
        $this->assertAttributeEquals(1, 'position', $this->iterator);
47
    }
48
49
    public function testCurrentGetsSecondJobAfterCallingNextMethod()
50
    {
51
        $this->iterator->next();
52
        $job = $this->iterator->current();
53
        $this->assertInstanceOf(Job::class, $job);
54
        $this->assertEquals('Job 2', $job->getTitle());
55
    }
56
57
    public function testKeyReturnsExpectedPosition()
58
    {
59
        $this->assertAttributeEquals(0, 'position', $this->iterator);
60
        $this->iterator->next();
61
        $this->assertAttributeEquals(1, 'position', $this->iterator);
62
    }
63
64
    public function testValidReturnsTrueWhilePositionLessOrEqualJobCount()
65
    {
66
        $this->assertTrue($this->iterator->valid());
67
        $this->iterator->next();
68
        $this->assertTrue($this->iterator->valid());
69
    }
70
71
    public function testValidReturnsFalseWhenPositionGreaterThanJobCount()
72
    {
73
        $this->iterator->next();
74
        $this->iterator->next();
75
        $this->iterator->next();
76
        $this->assertFalse($this->iterator->valid());
77
    }
78
79
    public function testRewindMovesPositionCursorToFirstPosition()
80
    {
81
        $this->iterator->next();
82
        $this->assertNotEquals(0, $this->iterator->key());
83
84
        $this->iterator->rewind();
85
        $this->assertEquals(0, $this->iterator->key());
86
    }
87
88
    public function testCountReturnsCorrectJobCollectionSize()
89
    {
90
        $this->assertEquals(2, $this->iterator->count());
91
        $this->assertCount(2, $this->iterator);
92
    }
93
}
94