Completed
Pull Request — master (#16)
by
unknown
05:41
created

testCleanTerms_completelyCleansArray()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 21

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 21
rs 9.584
c 0
b 0
f 0
cc 1
nc 1
nop 0
1
<?php
2
3
namespace Wikibase\TermStore\MediaWiki\Tests\Unit\PackagePrivate;
4
5
use PHPUnit\Framework\TestCase;
6
use Wikibase\TermStore\MediaWiki\PackagePrivate\InMemoryTermIdsAcquirer;
7
use Wikimedia\TestingAccessWrapper;
8
9
class InMemeoryTermIdsAcquirerTest extends TestCase {
10
11
	public function testAcquiresUniqueIdsForNonExistingTerms() {
12
		$termsIdsAcquirer = new InMemoryTermIdsAcquirer();
13
14
		$ids = $termsIdsAcquirer->acquireTermIds( [
15
			'label' => [
16
				'en' => 'some label',
17
				'de' => 'another label',
18
			],
19
			'alias' => [
20
				'en' => [ 'alias', 'another alias' ],
21
				'de' => 'de alias'
22
			]
23
		] );
24
25
		$this->assertNoDuplicates( $ids );
26
	}
27
28
	public function testReusesIdsOfExistingTerms() {
29
		$termsIdsAcquirer = new InMemoryTermIdsAcquirer();
30
31
		$previouslyAcquiredIds = $termsIdsAcquirer->acquireTermIds( [
32
			'label' => [
33
				'en' => 'some label',
34
				'de' => 'another label',
35
			],
36
			'alias' => [
37
				'en' => [ 'alias', 'another alias' ],
38
				'de' => 'de alias'
39
			]
40
		] );
41
42
		$newlyAcquiredIds = $termsIdsAcquirer->acquireTermIds( [
43
			'label' => [
44
				'en' => 'some label',
45
				'de' => 'another label',
46
			],
47
			'alias' => [
48
				'en' => [ 'alias', 'another alias' ],
49
				'de' => 'de alias'
50
			]
51
		] );
52
53
		$this->assertEquals(
54
			$previouslyAcquiredIds,
55
			$newlyAcquiredIds
56
		);
57
	}
58
59
	public function testAcquiresAndReusesIdsForNewAndExistingTerms() {
60
		$termsIdsAcquirer = new InMemoryTermIdsAcquirer();
61
62
		$previouslyAcquiredIds = $termsIdsAcquirer->acquireTermIds( [
63
			'label' => [
64
				'en' => 'some label',
65
				'de' => 'another label',
66
			]
67
		] );
68
69
		$newlyAcquiredIds = $termsIdsAcquirer->acquireTermIds( [
70
			'label' => [
71
				'en' => 'some label',
72
				'de' => 'another label',
73
			],
74
			'alias' => [
75
				'en' => [ 'alias', 'another alias' ],
76
				'de' => 'de alias'
77
			]
78
		] );
79
80
		$this->assertNoDuplicates( $newlyAcquiredIds );
81
82
		$this->assertEquals(
83
			$previouslyAcquiredIds,
84
			array_intersect( $previouslyAcquiredIds, $newlyAcquiredIds )
85
		);
86
	}
87
88
	private function assertNoDuplicates( $ids ) {
89
		$this->assertEquals(
90
			count( $ids ),
91
			count( array_unique( $ids ) )
92
		);
93
	}
94
95
	public function testCleanTerms_doesNotReuseIds() {
96
		$termIdsAcquirer = new InMemoryTermIdsAcquirer();
97
98
		$ids1 = $termIdsAcquirer->acquireTermIds( [
99
			'label' => [
100
				'en' => 'the label',
101
				'de' => 'die Bezeichnung',
102
			],
103
			'alias' => [
104
				'en' => [ 'alias', 'another' ],
105
			],
106
		] );
107
		$ids2 = $termIdsAcquirer->acquireTermIds( [
108
			'label' => [ 'en' => 'the label' ],
109
			'description' => [ 'en' => 'the description' ],
110
		] );
111
112
		$termIdsAcquirer->cleanTerms( array_merge( $ids1, $ids2 ) );
113
114
		$ids3 = $termIdsAcquirer->acquireTermIds( [
115
			'label' => [ 'en' => 'the label' ],
116
			'description' => [ 'en' => 'the description' ],
117
		] );
118
		$this->assertGreaterThan( max( max( $ids1 ), max( $ids2 ) ), min( $ids3 ) );
119
	}
120
121
	public function testCleanTerms_completelyCleansArray() {
122
		$termIdsAcquirer = new InMemoryTermIdsAcquirer();
123
124
		$ids1 = $termIdsAcquirer->acquireTermIds( [
125
			'label' => [
126
				'en' => 'the label',
127
				'de' => 'die Bezeichnung',
128
			],
129
			'alias' => [
130
				'en' => [ 'alias', 'another' ],
131
			],
132
		] );
133
		$ids2 = $termIdsAcquirer->acquireTermIds( [
134
			'label' => [ 'en' => 'the label' ],
135
			'description' => [ 'en' => 'the description' ],
136
		] );
137
138
		$termIdsAcquirer->cleanTerms( array_merge( $ids1, $ids2 ) );
139
140
		$this->assertEmpty( TestingAccessWrapper::newFromObject( $termIdsAcquirer )->terms );
141
	}
142
143
	public function testCleanTerms_keepsOtherIds() {
144
		$termIdsAcquirer = new InMemoryTermIdsAcquirer();
145
146
		$ids1 = $termIdsAcquirer->acquireTermIds( [
147
			'label' => [
148
				'en' => 'the label',
149
				'de' => 'die Bezeichnung',
150
			],
151
			'alias' => [
152
				'en' => [ 'alias', 'another' ],
153
			],
154
		] );
155
		$ids2 = $termIdsAcquirer->acquireTermIds( [
156
			'label' => [ 'en' => 'the label' ],
157
			'description' => [ 'en' => 'the description' ],
158
		] );
159
160
		$termIdsAcquirer->cleanTerms( array_diff( $ids1, $ids2 ) );
161
162
		$ids3 = $termIdsAcquirer->acquireTermIds( [
163
			'label' => [ 'en' => 'the label' ],
164
			'description' => [ 'en' => 'the description' ],
165
		] );
166
		$this->assertSame( $ids2, $ids3 );
167
	}
168
169
}
170