-
Notifications
You must be signed in to change notification settings - Fork 59
/
LoadExtensionSchemaUpdatesHookHandlerTest.php
94 lines (75 loc) 路 3.13 KB
/
LoadExtensionSchemaUpdatesHookHandlerTest.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
<?php
declare( strict_types=1 );
namespace Wikibase\Client\Tests\Integration\Hooks;
use DatabaseUpdater;
use Maintenance;
use MediaWiki\Title\Title;
use MediaWikiIntegrationTestCase;
use Wikibase\Client\Hooks\LoadExtensionSchemaUpdatesHookHandler;
use Wikibase\Client\NamespaceChecker;
use Wikimedia\Rdbms\IDatabase;
use Wikimedia\TestingAccessWrapper;
/**
* @covers \Wikibase\Client\Hooks\LoadExtensionSchemaUpdatesHookHandler
*
* @group WikibaseClient
* @group Wikibase
* @group Database
*
* @license GPL-2.0-or-later
* @author Marius Hoch <mail@mariushoch.de>
*/
class LoadExtensionSchemaUpdatesHookHandlerTest extends MediaWikiIntegrationTestCase {
public function addDBDataOnce() {
$this->db->newDeleteQueryBuilder()
->deleteFrom( 'page' )
->where( IDatabase::ALL_ROWS )
->caller( __METHOD__ )
->execute();
$titles = [];
$titles[10] = Title::makeTitle( $this->getDefaultWikitextNS(), 'LoadExtensionSchemaUpdatesHookHandlerTest-0' );
$titles[20] = Title::makeTitle( NS_TALK, 'LoadExtensionSchemaUpdatesHookHandlerTest-Non-Wikibase-NS' );
$titles[30] = Title::makeTitle( $this->getDefaultWikitextNS(), 'LoadExtensionSchemaUpdatesHookHandlerTest-1' );
foreach ( $titles as $pageId => $title ) {
$page = $this->getServiceContainer()->getWikiPageFactory()->newFromTitle( $title );
$page->insertOn( $this->db, $pageId );
}
}
public function testOnLoadExtensionSchemaUpdates_skipAlreadyUpdated() {
$dbUpdater = TestingAccessWrapper::newFromObject( DatabaseUpdater::newForDB( $this->db ) );
$dbUpdater->insertUpdateRow( LoadExtensionSchemaUpdatesHookHandler::UPDATE_KEY_UNEXPECTED_UNCONNECTED_PAGE );
$handler = new LoadExtensionSchemaUpdatesHookHandler();
$handler->onLoadExtensionSchemaUpdates( $dbUpdater );
$this->assertSame( [], $dbUpdater->getExtensionUpdates() );
}
public function testOnLoadExtensionSchemaUpdates() {
$namespaceInt = -$this->getDefaultWikitextNS();
$namespaceString = strval( $namespaceInt );
$namespaceFloat = $namespaceInt + 0.0;
$maintenance = $this->createMock( Maintenance::class );
$maintenance->expects( $this->any() )
->method( 'isQuiet' )
->willReturn( true );
$dbUpdater = TestingAccessWrapper::newFromObject( DatabaseUpdater::newForDB( $this->db, false, $maintenance ) );
$this->overrideMwServices( null, [
'WikibaseClient.NamespaceChecker' => function() {
return new NamespaceChecker( [], [ $this->getDefaultWikitextNS() ] );
},
] );
$handler = new LoadExtensionSchemaUpdatesHookHandler();
$handler->onLoadExtensionSchemaUpdates( $dbUpdater );
$this->assertCount( 1, $dbUpdater->getExtensionUpdates() );
$dbUpdater->runUpdates( $dbUpdater->getExtensionUpdates(), true );
$this->newSelectQueryBuilder()
->select( [ 'pp_page', 'pp_propname', 'pp_value', 'pp_sortkey' ] )
->from( 'page_props' )
->assertResultSet( [
[ 10, 'unexpectedUnconnectedPage', $namespaceString, $namespaceFloat ],
// 20 is not in a Wikibase NS
[ 30, 'unexpectedUnconnectedPage', $namespaceString, $namespaceFloat ],
] );
$this->assertTrue(
$dbUpdater->updateRowExists( LoadExtensionSchemaUpdatesHookHandler::UPDATE_KEY_UNEXPECTED_UNCONNECTED_PAGE )
);
}
}