This project does not seem to handle request data directly as such no vulnerable execution paths were found.
include
, or for example
via PHP's auto-loading mechanism.
These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more
1 | <?php |
||
2 | |||
3 | namespace Tests\Wikibase\InternalSerialization\Deserializers; |
||
4 | |||
5 | use Deserializers\Deserializer; |
||
6 | use Deserializers\Exceptions\DeserializationException; |
||
7 | use Wikibase\DataModel\Entity\BasicEntityIdParser; |
||
8 | use Wikibase\DataModel\Entity\Item; |
||
9 | use Wikibase\DataModel\Snak\PropertyNoValueSnak; |
||
10 | use Wikibase\DataModel\Statement\Statement; |
||
11 | use Wikibase\InternalSerialization\Deserializers\LegacyEntityIdDeserializer; |
||
12 | use Wikibase\InternalSerialization\Deserializers\LegacyFingerprintDeserializer; |
||
13 | use Wikibase\InternalSerialization\Deserializers\LegacyItemDeserializer; |
||
14 | use Wikibase\InternalSerialization\Deserializers\LegacySiteLinkListDeserializer; |
||
15 | use Wikibase\InternalSerialization\Deserializers\LegacySnakDeserializer; |
||
16 | use Wikibase\InternalSerialization\Deserializers\LegacySnakListDeserializer; |
||
17 | use Wikibase\InternalSerialization\Deserializers\LegacyStatementDeserializer; |
||
18 | |||
19 | /** |
||
20 | * @covers Wikibase\InternalSerialization\Deserializers\LegacyItemDeserializer |
||
21 | * |
||
22 | * @license GPL-2.0-or-later |
||
23 | * @author Jeroen De Dauw < [email protected] > |
||
24 | */ |
||
25 | class LegacyItemDeserializerTest extends \PHPUnit\Framework\TestCase { |
||
26 | |||
27 | /** |
||
28 | * @var Deserializer |
||
29 | */ |
||
30 | private $deserializer; |
||
31 | |||
32 | protected function setUp() : void { |
||
33 | $idDeserializer = new LegacyEntityIdDeserializer( new BasicEntityIdParser() ); |
||
34 | |||
35 | $snakDeserializer = new LegacySnakDeserializer( $this->createMock( Deserializer::class ) ); |
||
0 ignored issues
–
show
|
|||
36 | |||
37 | $statementDeserializer = new LegacyStatementDeserializer( |
||
38 | $snakDeserializer, |
||
39 | new LegacySnakListDeserializer( $snakDeserializer ) |
||
40 | ); |
||
41 | |||
42 | $this->deserializer = new LegacyItemDeserializer( |
||
43 | $idDeserializer, |
||
44 | new LegacySiteLinkListDeserializer(), |
||
45 | $statementDeserializer, |
||
46 | new LegacyFingerprintDeserializer() |
||
47 | ); |
||
48 | } |
||
49 | |||
50 | public function invalidSerializationProvider() { |
||
51 | return array( |
||
52 | array( null ), |
||
53 | |||
54 | array( array( |
||
55 | 'links' => array( null ) |
||
56 | ) ), |
||
57 | |||
58 | array( array( |
||
59 | 'claims' => null |
||
60 | ) ), |
||
61 | |||
62 | array( array( |
||
63 | 'claims' => array( null ) |
||
64 | ) ), |
||
65 | |||
66 | array( array( |
||
67 | 'entity' => 42 |
||
68 | ) ), |
||
69 | ); |
||
70 | } |
||
71 | |||
72 | /** |
||
73 | * @dataProvider invalidSerializationProvider |
||
74 | */ |
||
75 | public function testGivenInvalidSerialization_deserializeThrowsException( $serialization ) { |
||
76 | $this->expectDeserializationException(); |
||
77 | $this->deserializer->deserialize( $serialization ); |
||
78 | } |
||
79 | |||
80 | private function expectDeserializationException() { |
||
81 | $this->expectException( DeserializationException::class ); |
||
82 | } |
||
83 | |||
84 | public function testGivenEmptyArray_emptyItemIsReturned() { |
||
85 | $this->assertEquals( |
||
86 | new Item(), |
||
87 | $this->deserializer->deserialize( array() ) |
||
88 | ); |
||
89 | } |
||
90 | |||
91 | public function testGivenLinks_itemHasSiteLinks() { |
||
92 | $item = new Item(); |
||
93 | |||
94 | $item->getSiteLinkList()->addNewSiteLink( 'foo', 'bar' ); |
||
95 | $item->getSiteLinkList()->addNewSiteLink( 'baz', 'bah' ); |
||
96 | |||
97 | $this->assertDeserialization( |
||
98 | array( |
||
99 | 'links' => array( |
||
100 | 'foo' => 'bar', |
||
101 | 'baz' => 'bah', |
||
102 | ) |
||
103 | ), |
||
104 | $item |
||
105 | ); |
||
106 | } |
||
107 | |||
108 | private function assertDeserialization( $serialization, Item $expectedItem ) { |
||
109 | $newItem = $this->itemFromSerialization( $serialization ); |
||
110 | |||
111 | $this->assertTrue( |
||
112 | $expectedItem->equals( $newItem ), |
||
113 | 'Deserialized Item should match expected Item' |
||
114 | ); |
||
115 | } |
||
116 | |||
117 | /** |
||
118 | * @param string $serialization |
||
119 | * |
||
120 | * @return Item |
||
121 | */ |
||
122 | private function itemFromSerialization( $serialization ) { |
||
123 | $item = $this->deserializer->deserialize( $serialization ); |
||
124 | $this->assertInstanceOf( Item::class, $item ); |
||
125 | return $item; |
||
126 | } |
||
127 | |||
128 | public function testGivenStatement_itemHasStatement() { |
||
129 | $item = new Item(); |
||
130 | $item->getStatements()->addStatement( $this->newStatement() ); |
||
131 | |||
132 | $this->assertDeserialization( |
||
133 | array( |
||
134 | 'claims' => array( |
||
135 | $this->newStatementSerialization() |
||
136 | ) |
||
137 | ), |
||
138 | $item |
||
139 | ); |
||
140 | } |
||
141 | |||
142 | private function newStatement() { |
||
143 | $statement = new Statement( new PropertyNoValueSnak( 42 ) ); |
||
144 | $statement->setGuid( 'foo' ); |
||
145 | return $statement; |
||
146 | } |
||
147 | |||
148 | private function newStatementSerialization() { |
||
149 | return array( |
||
150 | 'm' => array( 'novalue', 42 ), |
||
151 | 'q' => array(), |
||
152 | 'g' => 'foo', |
||
153 | 'rank' => Statement::RANK_NORMAL, |
||
154 | 'refs' => array() |
||
155 | ); |
||
156 | } |
||
157 | |||
158 | public function testGivenStatementWithLegacyKey_itemHasStatement() { |
||
159 | $item = new Item(); |
||
160 | $item->getStatements()->addStatement( $this->newStatement() ); |
||
161 | |||
162 | $this->assertDeserialization( |
||
163 | array( |
||
164 | 'statements' => array( |
||
165 | $this->newStatementSerialization() |
||
166 | ) |
||
167 | ), |
||
168 | $item |
||
169 | ); |
||
170 | } |
||
171 | |||
172 | /** |
||
173 | * @dataProvider TermListProvider |
||
174 | */ |
||
175 | public function testGivenLabels_getLabelsReturnsThem( array $labels ) { |
||
176 | $item = $this->itemFromSerialization( array( 'label' => $labels ) ); |
||
0 ignored issues
–
show
array('label' => $labels) is of type array<string,array,{"label":"array"}> , but the function expects a string .
It seems like the type of the argument is not accepted by the function/method which you are calling. In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug. We suggest to add an explicit type cast like in the following example: function acceptsInteger($int) { }
$x = '123'; // string "123"
// Instead of
acceptsInteger($x);
// we recommend to use
acceptsInteger((integer) $x);
Loading history...
|
|||
177 | |||
178 | $this->assertEquals( $labels, $item->getFingerprint()->getLabels()->toTextArray() ); |
||
179 | } |
||
180 | |||
181 | public function TermListProvider() { |
||
182 | return array( |
||
183 | array( array() ), |
||
184 | |||
185 | array( array( |
||
186 | 'en' => 'foo', |
||
187 | 'de' => 'bar', |
||
188 | ) ), |
||
189 | ); |
||
190 | } |
||
191 | |||
192 | public function testGivenInvalidLabels_exceptionIsThrown() { |
||
193 | $this->expectDeserializationException(); |
||
194 | $this->deserializer->deserialize( array( 'label' => null ) ); |
||
195 | } |
||
196 | |||
197 | /** |
||
198 | * @dataProvider TermListProvider |
||
199 | */ |
||
200 | public function testGivenDescriptions_getDescriptionsReturnsThem( array $descriptions ) { |
||
201 | $item = $this->itemFromSerialization( array( 'description' => $descriptions ) ); |
||
0 ignored issues
–
show
array('description' => $descriptions) is of type array<string,array,{"description":"array"}> , but the function expects a string .
It seems like the type of the argument is not accepted by the function/method which you are calling. In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug. We suggest to add an explicit type cast like in the following example: function acceptsInteger($int) { }
$x = '123'; // string "123"
// Instead of
acceptsInteger($x);
// we recommend to use
acceptsInteger((integer) $x);
Loading history...
|
|||
202 | |||
203 | $this->assertEquals( $descriptions, $item->getFingerprint()->getDescriptions()->toTextArray() ); |
||
204 | } |
||
205 | |||
206 | public function testGivenInvalidAliases_exceptionIsThrown() { |
||
207 | $this->expectDeserializationException(); |
||
208 | $this->deserializer->deserialize( array( 'aliases' => null ) ); |
||
209 | } |
||
210 | |||
211 | /** |
||
212 | * @dataProvider aliasesListProvider |
||
213 | */ |
||
214 | public function testGivenAliases_getAliasesReturnsThem( array $aliases ) { |
||
215 | $item = $this->itemFromSerialization( array( 'aliases' => $aliases ) ); |
||
0 ignored issues
–
show
array('aliases' => $aliases) is of type array<string,array,{"aliases":"array"}> , but the function expects a string .
It seems like the type of the argument is not accepted by the function/method which you are calling. In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug. We suggest to add an explicit type cast like in the following example: function acceptsInteger($int) { }
$x = '123'; // string "123"
// Instead of
acceptsInteger($x);
// we recommend to use
acceptsInteger((integer) $x);
Loading history...
|
|||
216 | |||
217 | $this->assertEquals( $aliases, $item->getFingerprint()->getAliasGroups()->toTextArray() ); |
||
218 | } |
||
219 | |||
220 | public function aliasesListProvider() { |
||
221 | return array( |
||
222 | array( array() ), |
||
223 | |||
224 | array( array( |
||
225 | 'en' => array( 'foo', 'bar' ), |
||
226 | 'de' => array( 'foo', 'bar', 'baz' ), |
||
227 | 'nl' => array( 'bah' ), |
||
228 | ) ), |
||
229 | ); |
||
230 | } |
||
231 | |||
232 | } |
||
233 |
It seems like the type of the argument is not accepted by the function/method which you are calling.
In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.
We suggest to add an explicit type cast like in the following example: