Passed
Pull Request — master (#219)
by Jeroen De
03:04
created

FingerprintDifferTest   A

Complexity

Total Complexity 5

Size/Duplication

Total Lines 103
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 7

Importance

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

5 Methods

Rating   Name   Duplication   Size   Complexity  
A testEmptyFingerprints() 0 6 1
A diff() 0 3 1
A testTermsNotInSecondAreReturned() 0 25 1
A testTermsInSecondAreNotReturned() 0 17 1
A testAllTheThings() 0 44 1
1
<?php
2
3
namespace Wikibase\DataModel\Services\Tests\Diff;
4
5
use PHPUnit\Framework\TestCase;
6
use Wikibase\DataModel\Services\Diff\FingerprintDiffer;
7
use Wikibase\DataModel\Term\AliasGroup;
8
use Wikibase\DataModel\Term\AliasGroupList;
9
use Wikibase\DataModel\Term\Fingerprint;
10
use Wikibase\DataModel\Term\Term;
11
use Wikibase\DataModel\Term\TermList;
12
13
/**
14
 * @covers \Wikibase\DataModel\Services\Diff\FingerprintDiffer
15
 */
16
class FingerprintDifferTest extends TestCase {
17
18
	public function testEmptyFingerprints() {
19
		$this->assertEquals(
20
			new Fingerprint(),
21
			$this->diff( new Fingerprint(), new Fingerprint() )
22
		);
23
	}
24
25
	private function diff( Fingerprint $first, Fingerprint $second ): Fingerprint {
26
		return ( new FingerprintDiffer() )->diff( $first, $second );
27
	}
28
29
	public function testTermsNotInSecondAreReturned() {
30
		$first = new Fingerprint(
31
			new TermList( [ new Term( 'en', 'FirstLabel' ) ] ),
32
			new TermList( [ new Term( 'en', 'FirstDesc' ) ] ),
33
			new AliasGroupList( [
34
				new AliasGroup( 'en', [ 'FirstAliasOne', 'FirstAliasTwo' ] ),
35
				new AliasGroup( 'de', [ 'DeAliasOne', 'DeAliasTwo' ] ),
36
			] )
37
		);
38
39
		$this->assertEquals(
40
			$first,
41
			$this->diff(
42
				$first,
43
				new Fingerprint(
44
					new TermList( [ new Term( 'en', 'SecondLabel' ) ] ),
45
					new TermList( [ new Term( 'en', 'SecondDesc' ) ] ),
46
					new AliasGroupList( [
47
						new AliasGroup( 'en', [ 'SecondAliasOne', 'SecondAliasTwo' ] ),
48
						new AliasGroup( 'different', [ 'DeAliasOne', 'DeAliasTwo' ] ),
49
					] )
50
				)
51
			)
52
		);
53
	}
54
55
	public function testTermsInSecondAreNotReturned() {
56
		$fingerprint = new Fingerprint(
57
			new TermList( [ new Term( 'en', 'FirstLabel' ) ] ),
58
			new TermList( [ new Term( 'en', 'FirstDesc' ) ] ),
59
			new AliasGroupList( [
60
				new AliasGroup( 'en', [ 'FirstAliasOne', 'FirstAliasTwo' ] ),
61
			] )
62
		);
63
64
		$this->assertEquals(
65
			new Fingerprint(),
66
			$this->diff(
67
				$fingerprint,
68
				$fingerprint
69
			)
70
		);
71
	}
72
73
	public function testAllTheThings() {
74
		$this->assertEquals(
75
			new Fingerprint(
76
				new TermList( [
77
					new Term( 'fr', 'OnlyInFirst' )
78
				] ),
79
				new TermList( [
80
					new Term( 'de', 'MismatchLanguage' )
81
				] ),
82
				new AliasGroupList( [
83
					new AliasGroup( 'en', [ 'AliasOnlyInFirst' ] ),
84
					new AliasGroup( 'de', [ 'AliasesOnlyInFirst' ] )
85
				] )
86
			),
87
			$this->diff(
88
				new Fingerprint(
89
					new TermList( [
90
						new Term( 'en', 'MatchingTerm' ),
91
						new Term( 'fr', 'OnlyInFirst' )
92
					] ),
93
					new TermList( [
94
						new Term( 'de', 'MismatchLanguage' )
95
					] ),
96
					new AliasGroupList( [
97
						new AliasGroup( 'en', [ 'MatchingAlias', 'AliasOnlyInFirst' ] ),
98
						new AliasGroup( 'de', [ 'AliasesOnlyInFirst' ] ),
99
					] )
100
				),
101
				new Fingerprint(
102
					new TermList( [
103
						new Term( 'en', 'MatchingTerm' ),
104
						new Term( 'ru', 'OnlyInSecond' )
105
					] ),
106
					new TermList( [
107
						new Term( 'different', 'MismatchLanguage' )
108
					] ),
109
					new AliasGroupList( [
110
						new AliasGroup( 'en', [ 'MatchingAlias', 'AliasOnlyInSecond' ] ),
111
						new AliasGroup( 'ru', [ 'AliasesOnlyInSecond' ] ),
112
					] )
113
				)
114
			)
115
		);
116
	}
117
118
}
119