Completed
Push — master ( abee42...78f3c7 )
by no
28s
created

LegacyItemDeserializerTest::newStatement()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 4
c 1
b 0
f 0
nc 1
nop 0
dl 0
loc 5
rs 9.4285
1
<?php
2
3
namespace Tests\Wikibase\InternalSerialization\Deserializers;
4
5
use Deserializers\Deserializer;
6
use Wikibase\DataModel\Entity\Item;
7
use Wikibase\DataModel\Entity\BasicEntityIdParser;
8
use Wikibase\DataModel\Snak\PropertyNoValueSnak;
9
use Wikibase\DataModel\Statement\Statement;
10
use Wikibase\InternalSerialization\Deserializers\LegacyStatementDeserializer;
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
18
/**
19
 * @covers Wikibase\InternalSerialization\Deserializers\LegacyItemDeserializer
20
 *
21
 * @licence GNU GPL v2+
22
 * @author Jeroen De Dauw < [email protected] >
23
 */
24
class LegacyItemDeserializerTest extends \PHPUnit_Framework_TestCase {
25
26
	/**
27
	 * @var Deserializer
28
	 */
29
	private $deserializer;
30
31
	protected function setUp() {
32
		$idDeserializer = new LegacyEntityIdDeserializer( new BasicEntityIdParser() );
33
34
		$snakDeserializer = new LegacySnakDeserializer( $this->getMock( 'Deserializers\Deserializer' ) );
35
36
		$statementDeserializer = new LegacyStatementDeserializer(
37
			$snakDeserializer,
38
			new LegacySnakListDeserializer( $snakDeserializer )
39
		);
40
41
		$this->deserializer = new LegacyItemDeserializer(
42
			$idDeserializer,
43
			new LegacySiteLinkListDeserializer(),
44
			$statementDeserializer,
45
			new LegacyFingerprintDeserializer()
46
		);
47
	}
48
49
	public function invalidSerializationProvider() {
50
		return array(
51
			array( null ),
52
53
			array( array(
54
				'links' => array( null )
55
			) ),
56
57
			array( array(
58
				'claims' => null
59
			) ),
60
61
			array( array(
62
				'claims' => array( null )
63
			) ),
64
65
			array( array(
66
				'entity' => 42
67
			) ),
68
		);
69
	}
70
71
	/**
72
	 * @dataProvider invalidSerializationProvider
73
	 */
74
	public function testGivenInvalidSerialization_deserializeThrowsException( $serialization ) {
75
		$this->expectDeserializationException();
76
		$this->deserializer->deserialize( $serialization );
77
	}
78
79
	private function expectDeserializationException() {
80
		$this->setExpectedException( 'Deserializers\Exceptions\DeserializationException' );
81
	}
82
83
	public function testGivenEmptyArray_emptyItemIsReturned() {
84
		$this->assertEquals(
85
			new Item(),
86
			$this->deserializer->deserialize( array() )
87
		);
88
	}
89
90
	public function testGivenLinks_itemHasSiteLinks() {
91
		$item = new Item();
92
93
		$item->getSiteLinkList()->addNewSiteLink( 'foo', 'bar' );
94
		$item->getSiteLinkList()->addNewSiteLink( 'baz', 'bah' );
95
96
		$this->assertDeserialization(
97
			array(
98
				'links' => array(
99
					'foo' => 'bar',
100
					'baz' => 'bah',
101
				)
102
			),
103
			$item
104
		);
105
	}
106
107
	private function assertDeserialization( $serialization, Item $expectedItem ) {
108
		$newItem = $this->itemFromSerialization( $serialization );
109
110
		$this->assertTrue(
111
			$expectedItem->equals( $newItem ),
112
			'Deserialized Item should match expected Item'
113
		);
114
	}
115
116
	/**
117
	 * @param string $serialization
118
	 *
119
	 * @return Item
120
	 */
121
	private function itemFromSerialization( $serialization ) {
122
		$item = $this->deserializer->deserialize( $serialization );
123
		$this->assertInstanceOf( 'Wikibase\DataModel\Entity\Item', $item );
124
		return $item;
125
	}
126
127
	public function testGivenStatement_itemHasStatement() {
128
		$item = new Item();
129
		$item->getStatements()->addStatement( $this->newStatement() );
130
131
		$this->assertDeserialization(
132
			array(
133
				'claims' => array(
134
					$this->newStatementSerialization()
135
				)
136
			),
137
			$item
138
		);
139
	}
140
141
	private function newStatement() {
142
		$statement = new Statement( new PropertyNoValueSnak( 42 ) );
143
		$statement->setGuid( 'foo' );
144
		return $statement;
145
	}
146
147
	private function newStatementSerialization() {
148
		return array(
149
			'm' => array( 'novalue', 42 ),
150
			'q' => array(),
151
			'g' => 'foo',
152
			'rank' => Statement::RANK_NORMAL,
153
			'refs' => array()
154
		);
155
	}
156
157
	public function testGivenStatementWithLegacyKey_itemHasStatement() {
158
		$item = new Item();
159
		$item->getStatements()->addStatement( $this->newStatement() );
160
161
		$this->assertDeserialization(
162
			array(
163
				'statements' => array(
164
					$this->newStatementSerialization()
165
				)
166
			),
167
			$item
168
		);
169
	}
170
171
	/**
172
	 * @dataProvider TermListProvider
173
	 */
174
	public function testGivenLabels_getLabelsReturnsThem( array $labels ) {
175
		$item = $this->itemFromSerialization( array( 'label' => $labels ) );
176
177
		$this->assertEquals( $labels, $item->getLabels()->toTextArray() );
178
	}
179
180
	public function TermListProvider() {
181
		return array(
182
			array( array() ),
183
184
			array( array(
185
				'en' => 'foo',
186
				'de' => 'bar',
187
			) ),
188
		);
189
	}
190
191
	public function testGivenInvalidLabels_exceptionIsThrown() {
192
		$this->expectDeserializationException();
193
		$this->deserializer->deserialize( array( 'label' => null ) );
194
	}
195
196
	/**
197
	 * @dataProvider TermListProvider
198
	 */
199
	public function testGivenDescriptions_getDescriptionsReturnsThem( array $descriptions ) {
200
		$item = $this->itemFromSerialization( array( 'description' => $descriptions ) );
201
202
		$this->assertEquals( $descriptions, $item->getDescriptions()->toTextArray() );
203
	}
204
205
	public function testGivenInvalidAliases_exceptionIsThrown() {
206
		$this->expectDeserializationException();
207
		$this->deserializer->deserialize( array( 'aliases' => null ) );
208
	}
209
210
	/**
211
	 * @dataProvider aliasesListProvider
212
	 */
213
	public function testGivenAliases_getAliasesReturnsThem( array $aliases ) {
214
		$item = $this->itemFromSerialization( array( 'aliases' => $aliases ) );
215
216
		$this->assertEquals( $aliases, $item->getAliasGroups()->toTextArray() );
217
	}
218
219
	public function aliasesListProvider() {
220
		return array(
221
			array( array() ),
222
223
			array( array(
224
				'en' => array( 'foo', 'bar' ),
225
				'de' => array( 'foo', 'bar', 'baz' ),
226
				'nl' => array( 'bah' ),
227
			) ),
228
		);
229
	}
230
231
}
232