FileBagTest   A
last analyzed

Complexity

Total Complexity 7

Size/Duplication

Total Lines 156
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 1

Importance

Changes 2
Bugs 0 Features 0
Metric Value
wmc 7
c 2
b 0
f 0
lcom 0
cbo 1
dl 0
loc 156
rs 10

6 Methods

Rating   Name   Duplication   Size   Complexity  
A testArrayAccessForOneValidItem() 0 17 1
A testArrayAccessForOneValidItemwithoutKey() 0 14 1
A testArrayAccessForOneInalidItem() 0 17 1
A testIteratorWithForeachLoop() 0 17 2
A testIteratorDirectlyWithNumericKeys() 0 21 1
A provideListOfUploadedFileInstances() 0 23 1
1
<?php
2
3
4
namespace Fracture\Http;
5
6
use Exception;
7
use ReflectionClass;
8
use PHPUnit_Framework_TestCase;
9
10
class FileBagTest extends PHPUnit_Framework_TestCase
11
{
12
13
    /**
14
     * @covers Fracture\Http\FileBag::offsetExists
15
     * @covers Fracture\Http\FileBag::offsetSet
16
     * @covers Fracture\Http\FileBag::offsetGet
17
     * @covers Fracture\Http\FileBag::offsetUnset
18
     */
19
    public function testArrayAccessForOneValidItem()
20
    {
21
        $instance = new FileBag;
22
23
24
        $item  = $this->getMock('Fracture\Http\UploadedFile', ['isValid'], ['foo' => 'bar']);
25
        $item->expects($this->once())
26
                 ->method('isValid')
27
                 ->will($this->returnValue(true));
28
29
        $this->assertFalse(isset($instance['foo']));
30
        $instance['foo'] = $item;
31
        $this->assertTrue(isset($instance['foo']));
32
        $this->assertEquals($item, $instance['foo']);
33
        unset($instance['foo']);
34
        $this->assertFalse(isset($instance['foo']));
35
    }
36
37
38
    /**
39
     * @covers Fracture\Http\FileBag::offsetExists
40
     * @covers Fracture\Http\FileBag::offsetSet
41
     */
42
    public function testArrayAccessForOneValidItemwithoutKey()
43
    {
44
        $instance = new FileBag;
45
46
47
        $item  = $this->getMock('Fracture\Http\UploadedFile', ['isValid'], ['foo' => 'bar']);
48
        $item->expects($this->once())
49
                 ->method('isValid')
50
                 ->will($this->returnValue(true));
51
52
        $this->assertFalse(isset($instance[0]));
53
        $instance[] = $item;
54
        $this->assertTrue(isset($instance[0]));
55
    }
56
57
    /**
58
     * @covers Fracture\Http\FileBag::offsetExists
59
     * @covers Fracture\Http\FileBag::offsetSet
60
     * @covers Fracture\Http\FileBag::offsetGet
61
     * @covers Fracture\Http\FileBag::offsetUnset
62
     */
63
    public function testArrayAccessForOneInalidItem()
64
    {
65
        $instance = new FileBag;
66
67
68
        $item  = $this->getMock('Fracture\Http\UploadedFile', ['isValid'], ['foo' => 'bar']);
69
        $item->expects($this->once())
70
             ->method('isValid')
71
             ->will($this->returnValue(false));
72
73
        $this->assertFalse(isset($instance['foo']));
74
        $instance['foo'] = $item;
75
        $this->assertFalse(isset($instance['foo']));
76
        $this->assertNull($instance['foo']);
77
        unset($instance['foo']);
78
        $this->assertFalse(isset($instance['foo']));
79
    }
80
81
82
    /**
83
     * @dataProvider provideListOfUploadedFileInstances
84
     *
85
     * @covers Fracture\Http\FileBag::current
86
     * @covers Fracture\Http\FileBag::key
87
     * @covers Fracture\Http\FileBag::next
88
     * @covers Fracture\Http\FileBag::rewind
89
     * @covers Fracture\Http\FileBag::valid
90
     */
91
    public function testIteratorWithForeachLoop($first, $second, $third)
92
    {
93
        $instance = new FileBag;
94
95
        $instance['a'] = $first;
96
        $instance['b'] = $second;
97
        $instance['c'] = $third;
98
99
100
        $expected = ['a' =>  $first, 'b' => $second, 'c' => $third];
101
        $keys = ['a', 'b', 'c'];
102
103
        foreach ($instance as $key => $value) {
104
            $this->assertEquals(array_shift($keys), $key);
105
            $this->assertEquals($expected[$key], $value);
106
        }
107
    }
108
109
110
    /**
111
     * @dataProvider provideListOfUploadedFileInstances
112
     *
113
     * @covers Fracture\Http\FileBag::current
114
     * @covers Fracture\Http\FileBag::key
115
     * @covers Fracture\Http\FileBag::next
116
     * @covers Fracture\Http\FileBag::rewind
117
     * @covers Fracture\Http\FileBag::valid
118
     */
119
    public function testIteratorDirectlyWithNumericKeys($first, $second, $third)
120
    {
121
        $instance = new FileBag;
122
123
        $instance[] = $first;
124
        $instance[] = $second;
125
        $instance[] = $third;
126
127
        $this->assertEquals($first, $instance->current());
128
        $instance->next();
129
        $this->assertEquals(1, $instance->key());
130
        $instance->next();
131
        $instance->next();
132
        $this->assertFalse($instance->valid());
133
        $this->assertEquals(3, $instance->key());
134
        $instance->rewind();
135
        $this->assertEquals(0, $instance->key());
136
        $instance->next();
137
        $this->assertEquals($second, $instance->current());
138
139
    }
140
141
142
    public function provideListOfUploadedFileInstances()
143
    {
144
        $first  = $this->getMock('Fracture\Http\UploadedFile', ['isValid'], ['foo' => 'bar']);
145
        $first->expects($this->once())
146
                 ->method('isValid')
147
                 ->will($this->returnValue(true));
148
149
        $second  = $this->getMock('Fracture\Http\UploadedFile', ['isValid'], ['foo' => 'bar']);
150
        $second->expects($this->once())
151
                 ->method('isValid')
152
                 ->will($this->returnValue(true));
153
154
        $third  = $this->getMock('Fracture\Http\UploadedFile', ['isValid'], ['foo' => 'bar']);
155
        $third->expects($this->once())
156
                 ->method('isValid')
157
                 ->will($this->returnValue(true));
158
159
        return [[
160
            'first'  => $first,
161
            'second' => $second,
162
            'third'  => $third,
163
        ]];
164
    }
165
}
166