Completed
Push — v2 ( e81eda...b3c0e1 )
by Joschi
04:43
created

ItemFactoryTest   A

Complexity

Total Complexity 4

Size/Duplication

Total Lines 117
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 3

Importance

Changes 0
Metric Value
c 0
b 0
f 0
dl 0
loc 117
rs 10
wmc 4
lcom 1
cbo 3

4 Methods

Rating   Name   Duplication   Size   Complexity  
A testItemFactory() 0 9 1
A testAliasedItemProperty() 0 65 1
A testInvalidItemPropertyList() 0 8 1
A testInvalidItemPropertyValueList() 0 17 1
1
<?php
2
3
/**
4
 * micrometa
5
 *
6
 * @category Jkphl
7
 * @package Jkphl\Micrometa
8
 * @subpackage Jkphl\Micrometa\Tests
9
 * @author Joschi Kuphal <[email protected]> / @jkphl
10
 * @copyright Copyright © 2017 Joschi Kuphal <[email protected]> / @jkphl
11
 * @license http://opensource.org/licenses/MIT The MIT License (MIT)
12
 */
13
14
/***********************************************************************************
15
 *  The MIT License (MIT)
16
 *
17
 *  Copyright © 2017 Joschi Kuphal <[email protected]> / @jkphl
18
 *
19
 *  Permission is hereby granted, free of charge, to any person obtaining a copy of
20
 *  this software and associated documentation files (the "Software"), to deal in
21
 *  the Software without restriction, including without limitation the rights to
22
 *  use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
23
 *  the Software, and to permit persons to whom the Software is furnished to do so,
24
 *  subject to the following conditions:
25
 *
26
 *  The above copyright notice and this permission notice shall be included in all
27
 *  copies or substantial portions of the Software.
28
 *
29
 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
30
 *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
31
 *  FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
32
 *  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
33
 *  IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
34
 *  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
35
 ***********************************************************************************/
36
37
namespace Jkphl\Micrometa\Tests\Application;
38
39
use Jkphl\Micrometa\Application\Factory\ItemFactory;
40
use Jkphl\Micrometa\Application\Item\Item;
41
use Jkphl\Micrometa\Application\Value\StringValue;
42
use Jkphl\Micrometa\Infrastructure\Factory\MicroformatsFactory;
43
44
/**
45
 * Item factory tests
46
 *
47
 * @package Jkphl\Micrometa
48
 * @subpackage Jkphl\Micrometa\Tests
49
 */
50
class ItemFactoryTest extends \PHPUnit_Framework_TestCase
51
{
52
    /**
53
     * Test the item factory
54
     */
55
    public function testItemFactory()
56
    {
57
        $itemFactory = new ItemFactory(0);
58
        $rawItem = (object)['type' => ['test']];
59
        $item = $itemFactory($rawItem);
60
        $this->assertInstanceOf(Item::class, $item);
61
        $this->assertEquals([(object)['profile' => '', 'name' => 'test']], $item->getType());
62
        $this->assertNull($item->getValue());
63
    }
64
65
    /**
66
     * Test an item property list with alias
67
     */
68
    public function testAliasedItemProperty()
69
    {
70
        $itemFactory = new ItemFactory(0);
71
        $rawItem = (object)[
72
            'type' => ['test'],
73
            'properties' => [
74
                (object)[
75
                    'name' => 'alias-property',
76
                    'profile' => MicroformatsFactory::MF2_PROFILE_URI,
77
                    'values' => ['value']
78
                ]
79
            ],
80
            'children' => [
81
                (object)[
82
                    'type' => ['test']
83
                ]
84
            ]
85
        ];
86
        $item = $itemFactory($rawItem);
87
        $this->assertInstanceOf(Item::class, $item);
88
        $this->assertEquals(
89
            [MicroformatsFactory::MF2_PROFILE_URI.'alias-property' => [new StringValue('value')]],
90
            $item->getProperties()->export()
91
        );
92
        $propertyList = $item->getProperties();
93
        $this->assertTrue(
94
            $propertyList->offsetExists(
95
                (object)['name' => 'alias-property', 'profile' => MicroformatsFactory::MF2_PROFILE_URI]
96
            )
97
        );
98
        /** @noinspection PhpIllegalArrayKeyTypeInspection */
99
        $this->assertTrue(
100
            isset(
101
                $propertyList[(object)['name' => 'alias-property', 'profile' => MicroformatsFactory::MF2_PROFILE_URI]]
102
            )
103
        );
104
        $this->assertTrue(
105
            $propertyList->offsetExists(
106
                (object)['name' => 'aliasProperty', 'profile' => MicroformatsFactory::MF2_PROFILE_URI]
107
            )
108
        );
109
        $this->assertTrue(
110
            $propertyList->offsetExists('alias-property')
111
        );
112
        $this->assertFalse(
113
            $propertyList->offsetExists('invalid-alias-property')
114
        );
115
        $this->assertEquals(
116
            (object)[
117
                'format' => 0,
118
                'types' => ['test'],
119
                'properties' => [
120
                    MicroformatsFactory::MF2_PROFILE_URI.'alias-property' => ['value']
121
                ],
122
                'items' => [
123
                    (object)[
124
                        'format' => 0,
125
                        'types' => ['test'],
126
                        'properties' => [],
127
                        'items' => []
128
                    ]
129
                ]
130
            ], $item->export()
131
        );
132
    }
133
134
    /**
135
     * Test an invalid item property list
136
     */
137
    public function testInvalidItemPropertyList()
138
    {
139
        $itemFactory = new ItemFactory(0);
140
        $rawItem = (object)['type' => ['test'], 'properties' => ['test' => false]];
141
        $item = $itemFactory($rawItem);
142
        $this->assertInstanceOf(Item::class, $item);
143
        $this->assertEquals([], $item->getProperties()->export());
144
    }
145
146
    /**
147
     * Test an invalid item property value list
148
     */
149
    public function testInvalidItemPropertyValueList()
150
    {
151
        $itemFactory = new ItemFactory(0);
152
        $rawItem = (object)[
153
            'type' => ['test'],
154
            'properties' => [
155
                'test' => (object)[
156
                    'profile' => MicroformatsFactory::MF2_PROFILE_URI,
157
                    'name' => 'name',
158
                    'values' => false
159
                ]
160
            ]
161
        ];
162
        $item = $itemFactory($rawItem);
163
        $this->assertInstanceOf(Item::class, $item);
164
        $this->assertEquals([], $item->getProperties()->export());
165
    }
166
}
167