Completed
Push — master ( 3124b3...4c1270 )
by Jeroen De
34:26
created

tests/phpunit/includes/StoreUpdaterTest.php (2 issues)

Upgrade to new PHP Analysis Engine

These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more

1
<?php
2
3
namespace SMW\Tests;
4
5
use SMW\Tests\Utils\UtilityFactory;
6
7
use SMW\StoreUpdater;
8
use SMW\ApplicationFactory;
9
use SMW\SemanticData;
10
use SMW\DIWikiPage;
11
use SMW\DIProperty;
12
13
/**
14
 * @covers \SMW\StoreUpdater
15
 *
16
 * @group semantic-mediawiki
17
 *
18
 * @license GNU GPL v2+
19
 * @since 1.9
20
 *
21
 * @author mwjames
22
 */
23
class StoreUpdaterTest  extends \PHPUnit_Framework_TestCase {
0 ignored issues
show
Expected 1 space after class name; 2 found
Loading history...
Expected 1 space before extends keyword; 2 found
Loading history...
24
25
	private $applicationFactory;
26
	private $semanticDataFactory;
27
28
	protected function setUp() {
29
		parent::setUp();
30
31
		$this->applicationFactory = ApplicationFactory::getInstance();
32
		$this->semanticDataFactory = UtilityFactory::getInstance()->newSemanticDataFactory();
33
34
		$settings = array(
35
			'smwgPageSpecialProperties'       => array(),
36
			'smwgEnableUpdateJobs'            => false,
37
			'smwgNamespacesWithSemanticLinks' => array( NS_MAIN => true )
38
		);
39
40
		foreach ( $settings as $key => $value) {
41
			$this->applicationFactory->getSettings()->set( $key, $value );
42
		}
43
44
		$store = $this->getMockBuilder( '\SMW\Store' )
45
			->disableOriginalConstructor()
46
			->getMockForAbstractClass();
47
48
		$this->applicationFactory->registerObject( 'Store', $store );
49
	}
50
51
	protected function tearDown() {
52
		$this->applicationFactory->clear();
53
54
		parent::tearDown();
55
	}
56
57
	public function testCanConstruct() {
58
59
		$store = $this->getMockBuilder( '\SMW\Store' )
60
			->disableOriginalConstructor()
61
			->getMockForAbstractClass();
62
63
		$semanticData = $this->getMockBuilder( '\SMW\SemanticData' )
64
			->disableOriginalConstructor()
65
			->getMock();
66
67
		$this->assertInstanceOf(
68
			'\SMW\StoreUpdater',
69
			new StoreUpdater( $store, $semanticData )
70
		);
71
	}
72
73
	public function testDoUpdateForDefaultSettings() {
74
75
		$semanticData = $this->semanticDataFactory->newEmptySemanticData( __METHOD__ );
76
77
		$store = $this->getMockBuilder( '\SMW\Store' )
78
			->disableOriginalConstructor()
79
			->getMockForAbstractClass();
80
81
		$instance = new StoreUpdater( $store, $semanticData );
82
		$this->assertTrue( $instance->doUpdate() );
83
	}
84
85
	/**
86
	 * @dataProvider updateJobStatusProvider
87
	 */
88
	public function testDoUpdateForValidRevision( $updateJobStatus ) {
89
90
		$semanticData = $this->semanticDataFactory->newEmptySemanticData( __METHOD__ );
91
92
		$store = $this->getMockBuilder( '\SMW\Store' )
93
			->disableOriginalConstructor()
94
			->setMethods( array( 'updateData' ) )
95
			->getMockForAbstractClass();
96
97
		$store->expects( $this->once() )
98
			->method( 'updateData' );
99
100
		$revision = $this->getMockBuilder( '\Revision' )
101
			->disableOriginalConstructor()
102
			->getMock();
103
104
		$wikiPage = $this->getMockBuilder( '\WikiPage' )
105
			->disableOriginalConstructor()
106
			->getMock();
107
108
		$wikiPage->expects( $this->atLeastOnce() )
109
			->method( 'getRevision' )
110
			->will( $this->returnValue( $revision ) );
111
112
		$pageCreator = $this->getMockBuilder( '\SMW\MediaWiki\PageCreator' )
113
			->disableOriginalConstructor()
114
			->getMock();
115
116
		$pageCreator->expects( $this->atLeastOnce() )
117
			->method( 'createPage' )
118
			->will( $this->returnValue( $wikiPage ) );
119
120
		$this->applicationFactory->registerObject( 'PageCreator', $pageCreator );
121
122
		$instance = new StoreUpdater( $store, $semanticData );
123
		$instance->setUpdateJobsEnabledState( $updateJobStatus );
124
125
		$this->assertTrue( $instance->doUpdate() );
126
	}
127
128
	/**
129
	 * @dataProvider updateJobStatusProvider
130
	 */
131
	public function testDoUpdateForNullRevision( $updateJobStatus ) {
132
133
		$semanticData = $this->semanticDataFactory->newEmptySemanticData( __METHOD__ );
134
135
		$store = $this->getMockBuilder( '\SMW\Store' )
136
			->disableOriginalConstructor()
137
			->setMethods( array( 'clearData' ) )
138
			->getMockForAbstractClass();
139
140
		$store->expects( $this->once() )
141
			->method( 'clearData' )
142
			->with( $this->equalTo( $semanticData->getSubject() ) );
143
144
		$wikiPage = $this->getMockBuilder( '\WikiPage' )
145
			->disableOriginalConstructor()
146
			->getMock();
147
148
		$pageCreator = $this->getMockBuilder( '\SMW\MediaWiki\PageCreator' )
149
			->disableOriginalConstructor()
150
			->getMock();
151
152
		$pageCreator->expects( $this->atLeastOnce() )
153
			->method( 'createPage' )
154
			->will( $this->returnValue( $wikiPage ) );
155
156
		$this->applicationFactory->registerObject( 'PageCreator', $pageCreator );
157
158
		$instance = new StoreUpdater( $store, $semanticData );
159
		$instance->setUpdateJobsEnabledState( $updateJobStatus );
160
161
		$this->assertTrue( $instance->doUpdate() );
162
	}
163
164
	public function testDoUpdateForTitleInUnknownNs() {
165
166
		$store = $this->getMockBuilder( '\SMW\Store' )
167
			->disableOriginalConstructor()
168
			->getMockForAbstractClass();
169
170
		$wikiPage = new DIWikiPage(
171
			'Foo',
172
			-32768, // This namespace does not exist
173
			''
174
		);
175
176
		$semanticData = $this->semanticDataFactory->setSubject( $wikiPage )->newEmptySemanticData();
177
		$instance = new StoreUpdater( $store, $semanticData );
178
179
		$this->assertInternalType( 'boolean', $instance->doUpdate() );
180
	}
181
182
	public function testDoUpdateForSpecialPage() {
183
184
		$store = $this->getMockBuilder( '\SMW\Store' )
185
			->disableOriginalConstructor()
186
			->getMockForAbstractClass();
187
188
		$wikiPage = new DIWikiPage(
189
			'Foo',
190
			NS_SPECIAL,
191
			''
192
		);
193
194
		$semanticData = $this->semanticDataFactory->setSubject( $wikiPage )->newEmptySemanticData();
195
		$instance = new StoreUpdater( $store, $semanticData );
196
197
		$this->assertFalse( $instance->doUpdate() );
198
	}
199
200
	public function testForYetUnknownRedirectTarget() {
201
202
		$revision = $this->getMockBuilder( '\Revision' )
203
			->disableOriginalConstructor()
204
			->getMock();
205
206
		$wikiPage = $this->getMockBuilder( '\WikiPage' )
207
			->disableOriginalConstructor()
208
			->getMock();
209
210
		$wikiPage->expects( $this->atLeastOnce() )
211
			->method( 'getRevision' )
212
			->will( $this->returnValue( $revision ) );
213
214
		$pageCreator = $this->getMockBuilder( '\SMW\MediaWiki\PageCreator' )
215
			->disableOriginalConstructor()
216
			->getMock();
217
218
		$pageCreator->expects( $this->atLeastOnce() )
219
			->method( 'createPage' )
220
			->will( $this->returnValue( $wikiPage ) );
221
222
		$this->applicationFactory->registerObject( 'PageCreator', $pageCreator );
223
224
		$subject = new DIWikiPage(
225
			'Foo',
226
			NS_MAIN
227
		);
228
229
		$target = new DIWikiPage(
230
			'Bar',
231
			NS_MAIN
232
		);
233
234
		$store = $this->getMockBuilder( '\SMW\Store' )
235
			->disableOriginalConstructor()
236
			->getMockForAbstractClass();
237
238
		$store->expects( $this->once() )
239
			->method( 'changeTitle' )
240
			->with(
241
				$this->equalTo( $subject->getTitle() ),
242
				$this->equalTo( $target->getTitle() ),
243
				$this->anything(),
244
				$this->anything() );
245
246
		$semanticData = new SemanticData( $subject );
247
248
		$semanticData->addPropertyObjectValue(
249
			new DIProperty( '_REDI' ),
250
			$target
251
		);
252
253
		$instance = new StoreUpdater( $store, $semanticData );
254
		$instance->setUpdateJobsEnabledState( true );
255
		$instance->doUpdate();
256
	}
257
258
	public function updateJobStatusProvider() {
259
260
		$provider = array(
261
			array( true ),
262
			array( false )
263
		);
264
265
		return $provider;
266
	}
267
268
}
269