Completed
Push — master ( 9c77e9...04aceb )
by
unknown
02:26
created

testFindAntecedentForMultiplePropertySearchPattern()   B

Complexity

Conditions 1
Paths 1

Size

Total Lines 56

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 56
rs 8.9599
c 0
b 0
f 0
cc 1
nc 1
nop 0

How to fix   Long Method   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
<?php
2
3
namespace SBL\Tests;
4
5
use SBL\ByPropertyHierarchicalLinksFinder;
6
use SMW\DIWikiPage;
7
use SMW\DIProperty;
8
use SMW\ApplicationFactory;
9
use Title;
10
11
/**
12
 * @covers \SBL\ByPropertyHierarchicalLinksFinder
13
 * @group semantic-breadcrumb-links
14
 *
15
 * @license GNU GPL v2+
16
 * @since 1.0
17
 *
18
 * @author mwjames
19
 */
20
class ByPropertyHierarchicalLinksFinderTest extends \PHPUnit_Framework_TestCase {
21
22
	public function testCanConstruct() {
23
24
		$store = $this->getMockBuilder( '\SMW\Store' )
25
			->disableOriginalConstructor()
26
			->getMockForAbstractClass();
27
28
		$this->assertInstanceOf(
29
			'\SBL\ByPropertyHierarchicalLinksFinder',
30
			new ByPropertyHierarchicalLinksFinder( $store )
31
		);
32
	}
33
34
	public function testNoValidConfigurationForAnyNamespace() {
35
36
		$store = $this->getMockBuilder( '\SMW\Store' )
37
			->disableOriginalConstructor()
38
			->getMockForAbstractClass();
39
40
		$instance = new ByPropertyHierarchicalLinksFinder( $store );
41
42
		$instance->findLinksBySubject( new DIWikiPage( 'Foo', NS_MAIN ) );
43
44
		$this->assertEmpty(
45
			$instance->getParents()
46
		);
47
48
		$this->assertEmpty(
49
			$instance->getChildren()
50
		);
51
	}
52
53
	public function testEmptyResultByTryingToFindAntecedent() {
54
55
		$subject = new DIWikiPage( 'Foo', NS_MAIN );
56
		$property = DIProperty::newFromUserLabel( 'Bar' );
57
58
		$store = $this->getMockBuilder( '\SMW\Store' )
59
			->disableOriginalConstructor()
60
			->getMockForAbstractClass();
61
62
		$store->expects( $this->once() )
63
			->method( 'getPropertyValues' )
64
			->with(
65
				$this->equalTo( $subject ),
66
				$this->equalTo( $property ) )
67
			->will( $this->returnValue( [] ) );
68
69
		$instance = new ByPropertyHierarchicalLinksFinder( $store );
70
71
		$instance->setFindClosestDescendantState( false );
72
		$instance->setPropertySearchPatternByNamespace(
73
			[ NS_MAIN => [ 'Bar' ] ]
74
		);
75
76
		$instance->findLinksBySubject( $subject );
77
78
		$this->assertEmpty(
79
			$instance->getParents()
80
		);
81
82
		$this->assertEmpty(
83
			$instance->getChildren()
84
		);
85
	}
86
87
	public function testFindAntecedentForMultiplePropertySearchPattern() {
88
89
		$subject = new DIWikiPage( 'Foo', NS_MAIN );
90
91
		$store = $this->getMockBuilder( '\SMW\Store' )
92
			->disableOriginalConstructor()
93
			->setMethods( [ 'getRedirectTarget' ] )
94
			->getMockForAbstractClass();
95
96
		$store->expects( $this->at( 0 ) )
97
			->method( 'getPropertyValues' )
98
			->with(
99
				$this->equalTo( $subject ),
100
				$this->equalTo( DIProperty::newFromUserLabel( 'Bar' ) ) )
101
			->will( $this->returnValue( [ new DIWikiPage( 'Ichi', NS_MAIN ) ] ) );
102
103
		$store->expects( $this->at( 1 ) )
104
			->method( 'getRedirectTarget' )
105
			->with(
106
				$this->equalTo( new DIWikiPage( 'Ichi', NS_MAIN ) ) )
107
			->will( $this->returnValue( new DIWikiPage( 'Ichi', NS_MAIN ) ) );
108
109
		$store->expects( $this->at( 2 ) )
110
			->method( 'getPropertyValues' )
111
			->with(
112
				$this->equalTo( new DIWikiPage( 'Ichi', NS_MAIN )  ),
113
				$this->equalTo( DIProperty::newFromUserLabel( 'Yin' )) )
114
			->will( $this->returnValue( [ new DIWikiPage( 'Ni', NS_MAIN ) ] ) );
115
116
		$store->expects( $this->at( 3 ) )
117
			->method( 'getRedirectTarget' )
118
			->with(
119
				$this->equalTo( new DIWikiPage( 'Ni', NS_MAIN ) ) )
120
			->will( $this->returnValue( new DIWikiPage( 'San', NS_MAIN ) ) );
121
122
		$instance = new ByPropertyHierarchicalLinksFinder( $store );
123
124
		$instance->setFindClosestDescendantState( false );
125
126
		$instance->setPropertySearchPatternByNamespace(
127
			[ NS_MAIN => [ 'Bar', 'Yin' ] ]
128
		);
129
130
		$instance->findLinksBySubject( $subject );
131
132
		$this->assertEquals(
133
			[
134
				new DIWikiPage( 'Ichi', NS_MAIN ),
135
				new DIWikiPage( 'San', NS_MAIN ) ],
136
			$instance->getParents()
137
		);
138
139
		$this->assertEmpty(
140
			$instance->getChildren()
141
		);
142
	}
143
144
	public function testCheckCircularReferenceForSomeSubject() {
145
146
		$subject = new DIWikiPage( 'Foo', NS_MAIN );
147
148
		$store = $this->getMockBuilder( '\SMW\Store' )
149
			->disableOriginalConstructor()
150
			->getMockForAbstractClass();
151
152
		$store->expects( $this->at( 0 ) )
153
			->method( 'getPropertyValues' )
154
			->with(
155
				$this->equalTo( $subject ),
156
				$this->equalTo( DIProperty::newFromUserLabel( 'Bar' ) ) )
157
			->will( $this->returnValue( [ $subject ] ) );
158
159
		$instance = new ByPropertyHierarchicalLinksFinder( $store );
160
161
		$instance->setFindClosestDescendantState( false );
162
163
		$instance->setPropertySearchPatternByNamespace(
164
			[ NS_MAIN => [ 'Bar', 'Yin' ] ]
165
		);
166
167
		$instance->findLinksBySubject( $subject );
168
169
		$this->assertEmpty(
170
			$instance->getParents()
171
		);
172
173
		$this->assertEmpty(
174
			$instance->getChildren()
175
		);
176
	}
177
178
	public function testChildSearchForValidPageTypeProperty() {
179
180
		$subject = new DIWikiPage( 'Foo', NS_MAIN );
181
182
		$property = DIProperty::newFromUserLabel( 'Bar' );
183
		$property->setPropertyTypeId( '_wpg' );
0 ignored issues
show
Deprecated Code introduced by
The method SMW\DIProperty::setPropertyTypeId() has been deprecated with message: since 3.0, use DIProperty::setPropertyValueType

This method has been deprecated. The supplier of the class has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the method will be removed from the class and what other method or class to use instead.

Loading history...
184
185
		$store = $this->getMockBuilder( '\SMW\Store' )
186
			->disableOriginalConstructor()
187
			->getMockForAbstractClass();
188
189
		$store->expects( $this->atLeastOnce() )
190
			->method( 'getPropertyValues' )
191
			->will( $this->returnValue( [] ) );
192
193
		$store->expects( $this->at( 1 ) )
194
			->method( 'getPropertySubjects' )
195
			->with(
196
				$this->equalTo( $property ),
197
				$this->equalTo( $subject ) )
198
			->will( $this->returnValue( [
199
				new DIWikiPage( 'Foo', NS_MAIN ),
200
				new DIWikiPage( 'NotEqualToFoo', NS_MAIN ),
201
				new DIWikiPage( 'AnotherChild', NS_MAIN ) ] ) );
202
203
		$instance = new ByPropertyHierarchicalLinksFinder( $store );
204
205
		$instance->setFindClosestDescendantState( true );
206
207
		$instance->setPropertySearchPatternByNamespace(
208
			[ NS_MAIN => [ 'Bar' ] ]
209
		);
210
211
		$instance->findLinksBySubject( $subject );
212
213
		$this->assertEmpty(
214
			$instance->getParents()
215
		);
216
217
		$this->assertEquals(
218
			[
219
				new DIWikiPage( 'NotEqualToFoo', NS_MAIN ),
220
				new DIWikiPage( 'AnotherChild', NS_MAIN ) ],
221
			$instance->getChildren()
222
		);
223
	}
224
225
	public function testChildSearchForInvalidPropertyType() {
226
227
		$subject = new DIWikiPage( 'Foo', NS_MAIN );
228
229
		$store = $this->getMockBuilder( '\SMW\Store' )
230
			->disableOriginalConstructor()
231
			->getMockForAbstractClass();
232
233
		$store->expects( $this->atLeastOnce() )
234
			->method( 'getPropertyValues' )
235
			->will( $this->returnValue( [] ) );
236
237
		$store->expects( $this->never() )
238
			->method( 'getPropertySubjects' );
239
240
		$instance = new ByPropertyHierarchicalLinksFinder( $store );
241
242
		$instance->setFindClosestDescendantState( true );
243
244
		$instance->setPropertySearchPatternByNamespace(
245
			[ NS_MAIN => [ '_MDAT' ] ]
246
		);
247
248
		$instance->findLinksBySubject( $subject );
249
250
		$this->assertEmpty(
251
			$instance->getParents()
252
		);
253
254
		$this->assertEmpty(
255
			$instance->getChildren()
256
		);
257
	}
258
259
}
260