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

testBuildBreadcrumbsForNoHierarchicalLinksButSubpageFallback()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 38

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 38
rs 9.312
c 0
b 0
f 0
cc 1
nc 1
nop 0
1
<?php
2
3
namespace SBL\Tests;
4
5
use SBL\HtmlBreadcrumbLinksBuilder;
6
use SMW\DIWikiPage;
7
use Title;
8
9
/**
10
 * @covers \SBL\HtmlBreadcrumbLinksBuilder
11
 * @group semantic-breadcrumb-links
12
 *
13
 * @license GNU GPL v2+
14
 * @since 1.0
15
 *
16
 * @author mwjames
17
 */
18
class HtmlBreadcrumbLinksBuilderTest extends \PHPUnit_Framework_TestCase {
19
20
	public function testCanConstruct() {
21
22
		$byPropertyHierarchicalLinksFinder = $this->getMockBuilder( '\SBL\ByPropertyHierarchicalLinksFinder' )
23
			->disableOriginalConstructor()
24
			->getMock();
25
26
		$bySubpageLinksFinder = $this->getMockBuilder( '\SBL\BySubpageLinksFinder' )
27
			->disableOriginalConstructor()
28
			->getMock();
29
30
		$this->assertInstanceOf(
31
			'\SBL\HtmlBreadcrumbLinksBuilder',
32
			new HtmlBreadcrumbLinksBuilder( $byPropertyHierarchicalLinksFinder, $bySubpageLinksFinder )
33
		);
34
	}
35
36
	public function testHetHtmlForEmptyContent() {
37
38
		$byPropertyHierarchicalLinksFinder = $this->getMockBuilder( '\SBL\ByPropertyHierarchicalLinksFinder' )
39
			->disableOriginalConstructor()
40
			->getMock();
41
42
		$bySubpageLinksFinder = $this->getMockBuilder( '\SBL\BySubpageLinksFinder' )
43
			->disableOriginalConstructor()
44
			->getMock();
45
46
		$dummyLinker = $this->getMockBuilder( '\DummyLinker' )
47
			->disableOriginalConstructor()
48
			->getMock();
49
50
		$instance = new HtmlBreadcrumbLinksBuilder(
51
			$byPropertyHierarchicalLinksFinder,
52
			$bySubpageLinksFinder
53
		);
54
55
		$instance->setBreadcrumbTrailStyleClass( 'Foo' );
56
		$instance->setLinker( $dummyLinker );
57
		$instance->hideSubpageParent( true );
58
59
		$this->assertInternalType(
60
			'string',
61
			$instance->getHtml()
62
		);
63
	}
64
65
	public function testBuildBreadcrumbsForValidHierarchicalLinks() {
66
67
		$byPropertyHierarchicalLinksFinder = $this->getMockBuilder( '\SBL\ByPropertyHierarchicalLinksFinder' )
68
			->disableOriginalConstructor()
69
			->getMock();
70
71
		$byPropertyHierarchicalLinksFinder->expects( $this->once() )
72
			->method( 'getParents' )
73
			->will( $this->returnValue( [ new DIWikiPage( 'Foo', NS_MAIN ) ] ) );
74
75
		$byPropertyHierarchicalLinksFinder->expects( $this->once() )
76
			->method( 'getChildren' )
77
			->will( $this->returnValue( [
78
				new DIWikiPage( 'Bar', NS_MAIN ),
79
				new DIWikiPage( 'Foobar', NS_MAIN ) ] ) );
80
81
		$bySubpageLinksFinder = $this->getMockBuilder( '\SBL\BySubpageLinksFinder' )
82
			->disableOriginalConstructor()
83
			->getMock();
84
85
		$bySubpageLinksFinder->expects( $this->never() )
86
			->method( 'isDiscoveryFallback' );
87
88
		$instance = new HtmlBreadcrumbLinksBuilder(
89
			$byPropertyHierarchicalLinksFinder,
90
			$bySubpageLinksFinder
91
		);
92
93
		$instance->isRTL( false );
94
		$instance->setBreadcrumbDividerStyleClass( 'DividerStyleClass' );
95
96
		$instance->buildBreadcrumbs( Title::newFromText( __METHOD__ ) );
97
98
		$this->assertInternalType(
99
			'string',
100
			$instance->getHtml()
101
		);
102
103
		$this->assertContains(
104
			'dir="ltr"',
105
			$instance->getHtml()
106
		);
107
108
		$this->assertContains(
109
			'DividerStyleClass',
110
			$instance->getHtml()
111
		);
112
	}
113
114
	public function testBuildBreadcrumbsForNoHierarchicalLinksButSubpageFallback() {
115
116
		$byPropertyHierarchicalLinksFinder = $this->getMockBuilder( '\SBL\ByPropertyHierarchicalLinksFinder' )
117
			->disableOriginalConstructor()
118
			->getMock();
119
120
		$byPropertyHierarchicalLinksFinder->expects( $this->once() )
121
			->method( 'getParents' )
122
			->will( $this->returnValue( [] ) );
123
124
		$byPropertyHierarchicalLinksFinder->expects( $this->once() )
125
			->method( 'getChildren' )
126
			->will( $this->returnValue( [] ) );
127
128
		$bySubpageLinksFinder = $this->getMockBuilder( '\SBL\BySubpageLinksFinder' )
129
			->disableOriginalConstructor()
130
			->getMock();
131
132
		$bySubpageLinksFinder->expects( $this->once() )
133
			->method( 'isDiscoveryFallback' )
134
			->will( $this->returnValue( true ) );
135
136
		$bySubpageLinksFinder->expects( $this->once() )
137
			->method( 'getParents' )
138
			->will( $this->returnValue( [ new DIWikiPage( 'Foo', NS_MAIN ) ] ) );
139
140
		$instance = new HtmlBreadcrumbLinksBuilder(
141
			$byPropertyHierarchicalLinksFinder,
142
			$bySubpageLinksFinder
143
		);
144
145
		$instance->buildBreadcrumbs( Title::newFromText( __METHOD__ ) );
146
147
		$this->assertInternalType(
148
			'string',
149
			$instance->getHtml()
150
		);
151
	}
152
153
	/**
154
	 * Test to ensure that no subobject is assigned from a Title that contains
155
	 * a fragment
156
	 */
157
	public function testBuildBreadcrumbsToNeverUseFragmentedPartOfTitle() {
158
159
		$subject = new DIWikiPage( __METHOD__, NS_MAIN, '', '' );
160
161
		$byPropertyHierarchicalLinksFinder = $this->getMockBuilder( '\SBL\ByPropertyHierarchicalLinksFinder' )
162
			->disableOriginalConstructor()
163
			->getMock();
164
165
		$byPropertyHierarchicalLinksFinder->expects( $this->once() )
166
			->method( 'findLinksBySubject' )
167
			->with( $this->equalTo( $subject ) );
168
169
		$byPropertyHierarchicalLinksFinder->expects( $this->once() )
170
			->method( 'getParents' )
171
			->will( $this->returnValue( [] ) );
172
173
		$byPropertyHierarchicalLinksFinder->expects( $this->once() )
174
			->method( 'getChildren' )
175
			->will( $this->returnValue( [] ) );
176
177
		$bySubpageLinksFinder = $this->getMockBuilder( '\SBL\BySubpageLinksFinder' )
178
			->disableOriginalConstructor()
179
			->getMock();
180
181
		$instance = new HtmlBreadcrumbLinksBuilder(
182
			$byPropertyHierarchicalLinksFinder,
183
			$bySubpageLinksFinder
184
		);
185
186
		$title = Title::newFromText( __METHOD__ );
187
		$title->setFragment( 'Foo' );
188
189
		$instance->buildBreadcrumbs( $title );
190
	}
191
192
	public function testBuildBreadcrumbsToUseDisplayTitle() {
193
194
		$subject = new DIWikiPage( __METHOD__, NS_MAIN, '', '' );
195
196
		$byPropertyHierarchicalLinksFinder = $this->getMockBuilder( '\SBL\ByPropertyHierarchicalLinksFinder' )
197
			->disableOriginalConstructor()
198
			->getMock();
199
200
		$byPropertyHierarchicalLinksFinder->expects( $this->once() )
201
			->method( 'findLinksBySubject' )
202
			->with( $this->equalTo( $subject ) );
203
204
		$byPropertyHierarchicalLinksFinder->expects( $this->once() )
205
			->method( 'getParents' )
206
			->will( $this->returnValue( [ $subject ] ) );
207
208
		$byPropertyHierarchicalLinksFinder->expects( $this->once() )
209
			->method( 'getChildren' )
210
			->will( $this->returnValue( [] ) );
211
212
		$bySubpageLinksFinder = $this->getMockBuilder( '\SBL\BySubpageLinksFinder' )
213
			->disableOriginalConstructor()
214
			->getMock();
215
216
		$dataValue = $this->getMockBuilder( '\SMWWikiPageValue' )
217
			->disableOriginalConstructor()
218
			->getMock();
219
220
		$dataValue->expects( $this->atLeastOnce() )
221
			->method( 'getDisplayTitle' );
222
223
		$dataValueFactory = $this->getMockBuilder( '\SMW\DataValueFactory' )
224
			->disableOriginalConstructor()
225
			->getMock();
226
227
		$dataValueFactory->expects( $this->atLeastOnce() )
228
			->method( 'newDataValueByItem' )
229
			->will( $this->returnValue( $dataValue ) );
230
231
		$instance = new HtmlBreadcrumbLinksBuilder(
232
			$byPropertyHierarchicalLinksFinder,
233
			$bySubpageLinksFinder
234
		);
235
236
		$title = Title::newFromText( __METHOD__ );
237
238
		$instance->setDataValueFactory( $dataValueFactory );
239
		$instance->buildBreadcrumbs( $title );
240
	}
241
242
	public function testRedirectDoesNotTryToFindBreadcrumbs() {
243
244
		$byPropertyHierarchicalLinksFinder = $this->getMockBuilder( '\SBL\ByPropertyHierarchicalLinksFinder' )
245
			->disableOriginalConstructor()
246
			->getMock();
247
248
		$byPropertyHierarchicalLinksFinder->expects( $this->never() )
249
			->method( 'findLinksBySubject' );
250
251
		$bySubpageLinksFinder = $this->getMockBuilder( '\SBL\BySubpageLinksFinder' )
252
			->disableOriginalConstructor()
253
			->getMock();
254
255
		$title = $this->getMockBuilder( '\Title' )
256
			->disableOriginalConstructor()
257
			->getMock();
258
259
		$title->expects( $this->once() )
260
			->method( 'isRedirect' )
261
			->will( $this->returnValue( true ) );
262
263
		$instance = new HtmlBreadcrumbLinksBuilder(
264
			$byPropertyHierarchicalLinksFinder,
265
			$bySubpageLinksFinder
266
		);
267
268
		$instance->buildBreadcrumbs( $title );
269
	}
270
271
}
272