LegacySiteLinkListDeserializerTest   A
last analyzed

Complexity

Total Complexity 7

Size/Duplication

Total Lines 106
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 6

Importance

Changes 0
Metric Value
wmc 7
lcom 1
cbo 6
dl 0
loc 106
rs 10
c 0
b 0
f 0

7 Methods

Rating   Name   Duplication   Size   Complexity  
A setUp() 0 3 1
A invalidSerializationProvider() 0 18 1
A testGivenInvalidSerialization_deserializeThrowsException() 0 4 1
A testEmptyListDeserialization() 0 4 1
A serializationProvider() 0 33 1
A testGivenValidSerialization_deserializeReturnsSiteLinkList() 0 4 1
A testDeserialization() 0 19 1
1
<?php
2
3
namespace Tests\Wikibase\InternalSerialization\Deserializers;
4
5
use Deserializers\Deserializer;
6
use Deserializers\Exceptions\DeserializationException;
7
use Wikibase\DataModel\Entity\ItemId;
8
use Wikibase\DataModel\SiteLink;
9
use Wikibase\DataModel\SiteLinkList;
10
use Wikibase\InternalSerialization\Deserializers\LegacySiteLinkListDeserializer;
11
12
/**
13
 * @covers Wikibase\InternalSerialization\Deserializers\LegacySiteLinkListDeserializer
14
 *
15
 * @license GPL-2.0-or-later
16
 * @author Jeroen De Dauw < [email protected] >
17
 */
18
class LegacySiteLinkListDeserializerTest extends \PHPUnit\Framework\TestCase {
19
20
	/**
21
	 * @var Deserializer
22
	 */
23
	private $deserializer;
24
25
	protected function setUp() : void {
26
		$this->deserializer = new LegacySiteLinkListDeserializer();
27
	}
28
29
	public function invalidSerializationProvider() {
30
		return array(
31
			array( null ),
32
			array( 42 ),
33
			array( 'foo' ),
34
35
			array( array( 'foo' ) ),
36
			array( array( 'foo' => 42 ) ),
37
			array( array( 'foo' => array() ) ),
38
39
			array( array( 'foo' => array( 'bar' => 'baz' ) ) ),
40
			array( array( 'foo' => array( 'name' => 'baz' ) ) ),
41
			array( array( 'foo' => array( 'badges' => array() ) ) ),
42
43
			array( array( 'foo' => array( 'name' => 'baz', 'badges' => array( 42 ) ) ) ),
44
			array( array( 'foo' => array( 'name' => 'baz', 'badges' => array( new ItemId( 'Q42' ), 'Q42' ) ) ) ),
45
		);
46
	}
47
48
	/**
49
	 * @dataProvider invalidSerializationProvider
50
	 */
51
	public function testGivenInvalidSerialization_deserializeThrowsException( $serialization ) {
52
		$this->expectException( DeserializationException::class );
53
		$this->deserializer->deserialize( $serialization );
54
	}
55
56
	public function testEmptyListDeserialization() {
57
		$list = $this->deserializer->deserialize( array() );
58
		$this->assertInstanceOf( SiteLinkList::class, $list );
59
	}
60
61
	public function serializationProvider() {
62
		return array(
63
			array( array(
64
			) ),
65
66
			array( array(
67
				'foo' => array(
68
					'name' => 'bar',
69
					'badges' => array(),
70
				),
71
				'baz' => array(
72
					'name' => 'bah',
73
					'badges' => array(),
74
				)
75
			) ),
76
77
			array( array(
78
				'foo' => array(
79
					'name' => 'bar',
80
					'badges' => array( 'Q42', 'Q1337' ),
81
				)
82
			) ),
83
84
			array( array(
85
				'foo' => 'bar',
86
			) ),
87
88
			array( array(
89
				'foo' => 'bar',
90
				'baz' => 'bah',
91
			) ),
92
		);
93
	}
94
95
	/**
96
	 * @dataProvider serializationProvider
97
	 */
98
	public function testGivenValidSerialization_deserializeReturnsSiteLinkList( $serialization ) {
99
		$siteLinkList = $this->deserializer->deserialize( $serialization );
100
		$this->assertInstanceOf( SiteLinkList::class, $siteLinkList );
101
	}
102
103
	public function testDeserialization() {
104
		$this->assertEquals(
105
			new SiteLinkList(
106
				array(
107
					new SiteLink( 'foo', 'bar', array( new ItemId( 'Q42' ), new ItemId( 'Q1337' ) ) ),
108
					new SiteLink( 'bar', 'baz' )
109
				)
110
			),
111
			$this->deserializer->deserialize(
112
				array(
113
					'foo' => array(
114
						'name' => 'bar',
115
						'badges' => array( 'Q42', 'Q1337' ),
116
					),
117
					'bar' => 'baz'
118
				)
119
			)
120
		);
121
	}
122
123
}
124