Merge "Force usage of MCR aware database schema"

This commit is contained in:
jenkins-bot 2019-09-27 17:52:33 +00:00 committed by Gerrit Code Review
commit 3dbc58222c
13 changed files with 5 additions and 959 deletions

View file

@ -182,9 +182,9 @@ class RevisionStore
'Reading needs to be enabled for the old or the new schema.'
);
Assert::parameter(
( $mcrMigrationStage & SCHEMA_COMPAT_WRITE_BOTH ) !== 0,
( $mcrMigrationStage & SCHEMA_COMPAT_WRITE_NEW ) !== 0,
'$mcrMigrationStage',
'Writing needs to be enabled for the old or the new schema.'
'Writing needs to be enabled for the new schema.'
);
Assert::parameter(
( $mcrMigrationStage & SCHEMA_COMPAT_READ_OLD ) === 0
@ -192,12 +192,6 @@ class RevisionStore
'$mcrMigrationStage',
'Cannot read the old schema when not also writing it.'
);
Assert::parameter(
( $mcrMigrationStage & SCHEMA_COMPAT_READ_NEW ) === 0
|| ( $mcrMigrationStage & SCHEMA_COMPAT_WRITE_NEW ) !== 0,
'$mcrMigrationStage',
'Cannot read the new schema when not also writing it.'
);
$this->loadBalancer = $loadBalancer;
$this->blobStore = $blobStore;

View file

@ -178,7 +178,6 @@ $wgAutoloadClasses += [
'MediaWiki\Tests\Revision\RevisionSlotsTest' => "$testDir/phpunit/includes/Revision/RevisionSlotsTest.php",
'MediaWiki\Tests\Revision\RevisionRecordTests' => "$testDir/phpunit/includes/Revision/RevisionRecordTests.php",
'MediaWiki\Tests\Revision\RevisionStoreDbTestBase' => "$testDir/phpunit/includes/Revision/RevisionStoreDbTestBase.php",
'MediaWiki\Tests\Revision\PreMcrSchemaOverride' => "$testDir/phpunit/includes/Revision/PreMcrSchemaOverride.php",
'MediaWiki\Tests\Revision\RevisionStoreRecordTest' => "$testDir/phpunit/includes/Revision/RevisionStoreRecordTest.php",
# tests/phpunit/languages

View file

@ -1,202 +0,0 @@
<?php
namespace MediaWiki\Tests\Revision;
use Revision;
/**
* Tests RevisionStore against the pre-MCR, pre-ContentHandler DB schema.
*
* @covers \MediaWiki\Revision\RevisionStore
*
* @group RevisionStore
* @group Storage
* @group Database
* @group medium
*/
class NoContentModelRevisionStoreDbTest extends RevisionStoreDbTestBase {
use PreMcrSchemaOverride;
protected function getContentHandlerUseDB() {
return false;
}
protected function revisionToRow( Revision $rev, $options = [ 'page', 'user', 'comment' ] ) {
$row = parent::revisionToRow( $rev, $options );
$row->rev_text_id = (string)$rev->getTextId();
return $row;
}
public function provideGetArchiveQueryInfo() {
yield [
[
'tables' => [ 'archive' ],
'fields' => array_merge(
$this->getDefaultArchiveFields(),
[
'ar_comment_text' => 'ar_comment',
'ar_comment_data' => 'NULL',
'ar_comment_cid' => 'NULL',
'ar_user_text' => 'ar_user_text',
'ar_user' => 'ar_user',
'ar_actor' => 'NULL',
]
),
'joins' => [],
]
];
}
public function provideGetQueryInfo() {
yield [
[],
[
'tables' => [ 'revision' ],
'fields' => array_merge(
$this->getDefaultQueryFields(),
$this->getCommentQueryFields(),
$this->getActorQueryFields()
),
'joins' => [],
]
];
yield [
[ 'page' ],
[
'tables' => [ 'revision', 'page' ],
'fields' => array_merge(
$this->getDefaultQueryFields(),
$this->getCommentQueryFields(),
$this->getActorQueryFields(),
[
'page_namespace',
'page_title',
'page_id',
'page_latest',
'page_is_redirect',
'page_len',
]
),
'joins' => [
'page' => [ 'JOIN', [ 'page_id = rev_page' ] ],
],
]
];
yield [
[ 'user' ],
[
'tables' => [ 'revision', 'user' ],
'fields' => array_merge(
$this->getDefaultQueryFields(),
$this->getCommentQueryFields(),
$this->getActorQueryFields(),
[
'user_name',
]
),
'joins' => [
'user' => [ 'LEFT JOIN', [ 'rev_user != 0', 'user_id = rev_user' ] ],
],
]
];
yield [
[ 'text' ],
[
'tables' => [ 'revision', 'text' ],
'fields' => array_merge(
$this->getDefaultQueryFields(),
$this->getCommentQueryFields(),
$this->getActorQueryFields(),
[
'old_text',
'old_flags',
]
),
'joins' => [
'text' => [ 'JOIN', [ 'rev_text_id=old_id' ] ],
],
]
];
}
public function provideGetSlotsQueryInfo() {
$db = wfGetDB( DB_REPLICA );
yield [
[],
[
'tables' => [
'slots' => 'revision',
],
'fields' => array_merge(
[
'slot_revision_id' => 'slots.rev_id',
'slot_content_id' => 'NULL',
'slot_origin' => 'slots.rev_id',
'role_name' => $db->addQuotes( SlotRecord::MAIN ),
]
),
'joins' => [],
]
];
yield [
[ 'content' ],
[
'tables' => [
'slots' => 'revision',
],
'fields' => array_merge(
[
'slot_revision_id' => 'slots.rev_id',
'slot_content_id' => 'NULL',
'slot_origin' => 'slots.rev_id',
'role_name' => $db->addQuotes( SlotRecord::MAIN ),
'content_size' => 'slots.rev_len',
'content_sha1' => 'slots.rev_sha1',
'content_address' =>
$db->buildConcat( [ $db->addQuotes( 'tt:' ), 'slots.rev_text_id' ] ),
'model_name' => 'NULL',
]
),
'joins' => [],
]
];
}
public function provideNewMutableRevisionFromArray() {
foreach ( parent::provideNewMutableRevisionFromArray() as $case ) {
yield $case;
}
yield 'Basic array, with page & id' => [
[
'id' => 2,
'page' => 1,
'text_id' => 2,
'timestamp' => '20171017114835',
'user_text' => '111.0.1.2',
'user' => 0,
'minor_edit' => false,
'deleted' => 0,
'len' => 46,
'parent_id' => 1,
'sha1' => 'rdqbbzs3pkhihgbs8qf2q9jsvheag5z',
'comment' => 'Goat Comment!',
]
];
}
/**
* Conditions to use together with getSlotsQueryInfo() when selecting slot rows for a given
* revision.
*
* @return array
*/
protected function getSlotRevisionConditions( $revId ) {
return [ 'rev_id' => $revId ];
}
}

View file

@ -1,102 +0,0 @@
<?php
namespace MediaWiki\Tests\Revision;
use InvalidArgumentException;
use MediaWiki\Revision\RevisionRecord;
use Revision;
use WikitextContent;
/**
* Tests RevisionStore against the pre-MCR DB schema.
*
* @covers \MediaWiki\Revision\RevisionStore
*
* @group RevisionStore
* @group Storage
* @group Database
* @group medium
*/
class PreMcrRevisionStoreDbTest extends RevisionStoreDbTestBase {
use PreMcrSchemaOverride;
protected function revisionToRow( Revision $rev, $options = [ 'page', 'user', 'comment' ] ) {
$row = parent::revisionToRow( $rev, $options );
$row->rev_text_id = (string)$rev->getTextId();
$row->rev_content_format = (string)$rev->getContentFormat();
$row->rev_content_model = (string)$rev->getContentModel();
return $row;
}
protected function assertRevisionExistsInDatabase( RevisionRecord $rev ) {
// Legacy schema is still being written
$this->assertSelect(
[ 'revision', 'text' ],
[ 'count(*)' ],
[ 'rev_id' => $rev->getId(), 'rev_text_id > 0' ],
[ [ 1 ] ],
[],
[ 'text' => [ 'JOIN', [ 'rev_text_id = old_id' ] ] ]
);
parent::assertRevisionExistsInDatabase( $rev );
}
public function provideInsertRevisionOn_failures() {
foreach ( parent::provideInsertRevisionOn_failures() as $case ) {
yield $case;
}
yield 'slot that is not main slot' => [
[
'content' => [
'main' => new WikitextContent( 'Chicken' ),
'lalala' => new WikitextContent( 'Duck' ),
],
'comment' => $this->getRandomCommentStoreComment(),
'timestamp' => '20171117010101',
'user' => true,
],
new InvalidArgumentException( 'Only the main slot is supported' )
];
}
public function provideNewMutableRevisionFromArray() {
foreach ( parent::provideNewMutableRevisionFromArray() as $case ) {
yield $case;
}
yield 'Basic array, with page & id' => [
[
'id' => 2,
'page' => 1,
'text_id' => 2,
'timestamp' => '20171017114835',
'user_text' => '111.0.1.2',
'user' => 0,
'minor_edit' => false,
'deleted' => 0,
'len' => 46,
'parent_id' => 1,
'sha1' => 'rdqbbzs3pkhihgbs8qf2q9jsvheag5z',
'comment' => 'Goat Comment!',
'content_format' => 'text/x-wiki',
'content_model' => 'wikitext',
]
];
}
/**
* Conditions to use together with getSlotsQueryInfo() when selecting slot rows for a given
* revision.
*
* @return array
*/
protected function getSlotRevisionConditions( $revId ) {
return [ 'rev_id' => $revId ];
}
}

View file

@ -1,54 +0,0 @@
<?php
namespace MediaWiki\Tests\Revision;
use Wikimedia\Rdbms\IMaintainableDatabase;
use MediaWiki\DB\PatchFileLocation;
/**
* Trait providing schema overrides that allow tests to run against the pre-MCR database schema.
*/
trait PreMcrSchemaOverride {
use PatchFileLocation;
use McrSchemaDetection;
/**
* @return int
*/
protected function getMcrMigrationStage() {
return MIGRATION_OLD;
}
/**
* @return string[]
*/
protected function getMcrTablesToReset() {
return [];
}
/**
* @return array[]
*/
protected function getSchemaOverrides( IMaintainableDatabase $db ) {
$overrides = [
'scripts' => [],
'drop' => [],
'create' => [],
'alter' => [],
];
if ( $this->hasMcrTables( $db ) ) {
$overrides['drop'] = [ 'slots', 'content', 'slot_roles', 'content_models', ];
$overrides['scripts'][] = $this->getSqlPatchPath( $db, '/drop-mcr-tables', __DIR__ );
}
if ( !$this->hasPreMcrFields( $db ) ) {
$overrides['alter'][] = 'revision';
$overrides['scripts'][] = $this->getSqlPatchPath( $db, '/create-pre-mcr-fields', __DIR__ );
}
return $overrides;
}
}

View file

@ -172,29 +172,6 @@ class RevisionQueryInfoTest extends MediaWikiTestCase {
],
]
];
yield 'pre-MCR, no model' => [
[
'wgContentHandlerUseDB' => false,
'wgMultiContentRevisionSchemaMigrationStage' => SCHEMA_COMPAT_OLD,
],
[
'tables' => [
'archive',
'actor_ar_user' => 'actor',
'comment_ar_comment' => 'comment',
],
'fields' => array_merge(
$this->getArchiveQueryFields( true ),
$this->getNewActorQueryFields( 'ar' ),
$this->getNewCommentQueryFields( 'ar' )
),
'joins' => [
'comment_ar_comment'
=> [ 'JOIN', 'comment_ar_comment.comment_id = ar_comment_id' ],
'actor_ar_user' => [ 'JOIN', 'actor_ar_user.actor_id = ar_actor' ],
],
]
];
}
public function provideQueryInfo() {
@ -397,238 +374,6 @@ class RevisionQueryInfoTest extends MediaWikiTestCase {
],
]
];
yield 'pre-MCR' => [
[
'wgContentHandlerUseDB' => true,
'wgMultiContentRevisionSchemaMigrationStage' => SCHEMA_COMPAT_OLD,
],
[],
[
'tables' => [
'revision',
'temp_rev_comment' => 'revision_comment_temp',
'comment_rev_comment' => 'comment',
'temp_rev_user' => 'revision_actor_temp',
'actor_rev_user' => 'actor',
],
'fields' => array_merge(
$this->getRevisionQueryFields( true ),
$this->getContentHandlerQueryFields( 'rev' ),
$this->getNewActorQueryFields( 'rev', true ),
$this->getNewCommentQueryFields( 'rev' )
),
'joins' => [
'temp_rev_comment' => [ 'JOIN', 'temp_rev_comment.revcomment_rev = rev_id' ],
'comment_rev_comment'
=> [ 'JOIN', 'comment_rev_comment.comment_id = temp_rev_comment.revcomment_comment_id' ],
'temp_rev_user' => [ 'JOIN', 'temp_rev_user.revactor_rev = rev_id' ],
'actor_rev_user' => [ 'JOIN', 'actor_rev_user.actor_id = temp_rev_user.revactor_actor' ],
],
]
];
yield 'pre-MCR, page, user' => [
[
'wgContentHandlerUseDB' => true,
'wgMultiContentRevisionSchemaMigrationStage' => SCHEMA_COMPAT_OLD,
],
[ 'page', 'user' ],
[
'tables' => [
'revision', 'page', 'user',
'temp_rev_comment' => 'revision_comment_temp',
'comment_rev_comment' => 'comment',
'temp_rev_user' => 'revision_actor_temp',
'actor_rev_user' => 'actor',
],
'fields' => array_merge(
$this->getRevisionQueryFields( true ),
$this->getContentHandlerQueryFields( 'rev' ),
$this->getPageQueryFields(),
$this->getUserQueryFields(),
$this->getNewActorQueryFields( 'rev', true ),
$this->getNewCommentQueryFields( 'rev' )
),
'joins' => [
'page' => [ 'JOIN', [ 'page_id = rev_page' ] ],
'user' => [ 'LEFT JOIN', [
'actor_rev_user.actor_user != 0',
'user_id = actor_rev_user.actor_user',
] ],
'temp_rev_comment' => [ 'JOIN', 'temp_rev_comment.revcomment_rev = rev_id' ],
'comment_rev_comment'
=> [ 'JOIN', 'comment_rev_comment.comment_id = temp_rev_comment.revcomment_comment_id' ],
'temp_rev_user' => [ 'JOIN', 'temp_rev_user.revactor_rev = rev_id' ],
'actor_rev_user' => [ 'JOIN', 'actor_rev_user.actor_id = temp_rev_user.revactor_actor' ],
],
]
];
yield 'pre-MCR, no model' => [
[
'wgContentHandlerUseDB' => false,
'wgMultiContentRevisionSchemaMigrationStage' => SCHEMA_COMPAT_OLD,
],
[],
[
'tables' => [
'revision',
'temp_rev_comment' => 'revision_comment_temp',
'comment_rev_comment' => 'comment',
'temp_rev_user' => 'revision_actor_temp',
'actor_rev_user' => 'actor',
],
'fields' => array_merge(
$this->getRevisionQueryFields( true ),
$this->getNewActorQueryFields( 'rev', true ),
$this->getNewCommentQueryFields( 'rev' )
),
'joins' => [
'temp_rev_comment' => [ 'JOIN', 'temp_rev_comment.revcomment_rev = rev_id' ],
'comment_rev_comment'
=> [ 'JOIN', 'comment_rev_comment.comment_id = temp_rev_comment.revcomment_comment_id' ],
'temp_rev_user' => [ 'JOIN', 'temp_rev_user.revactor_rev = rev_id' ],
'actor_rev_user' => [ 'JOIN', 'actor_rev_user.actor_id = temp_rev_user.revactor_actor' ],
],
],
];
yield 'pre-MCR, no model, page' => [
[
'wgContentHandlerUseDB' => false,
'wgMultiContentRevisionSchemaMigrationStage' => SCHEMA_COMPAT_OLD,
],
[ 'page' ],
[
'tables' => [
'revision', 'page',
'temp_rev_comment' => 'revision_comment_temp',
'comment_rev_comment' => 'comment',
'temp_rev_user' => 'revision_actor_temp',
'actor_rev_user' => 'actor',
],
'fields' => array_merge(
$this->getRevisionQueryFields( true ),
$this->getPageQueryFields(),
$this->getNewActorQueryFields( 'rev', true ),
$this->getNewCommentQueryFields( 'rev' )
),
'joins' => [
'page' => [ 'JOIN', [ 'page_id = rev_page' ], ],
'temp_rev_comment' => [ 'JOIN', 'temp_rev_comment.revcomment_rev = rev_id' ],
'comment_rev_comment'
=> [ 'JOIN', 'comment_rev_comment.comment_id = temp_rev_comment.revcomment_comment_id' ],
'temp_rev_user' => [ 'JOIN', 'temp_rev_user.revactor_rev = rev_id' ],
'actor_rev_user' => [ 'JOIN', 'actor_rev_user.actor_id = temp_rev_user.revactor_actor' ],
],
],
];
yield 'pre-MCR, no model, user' => [
[
'wgContentHandlerUseDB' => false,
'wgMultiContentRevisionSchemaMigrationStage' => SCHEMA_COMPAT_OLD,
],
[ 'user' ],
[
'tables' => [
'revision', 'user',
'temp_rev_comment' => 'revision_comment_temp',
'comment_rev_comment' => 'comment',
'temp_rev_user' => 'revision_actor_temp',
'actor_rev_user' => 'actor',
],
'fields' => array_merge(
$this->getRevisionQueryFields( true ),
$this->getUserQueryFields(),
$this->getNewActorQueryFields( 'rev', true ),
$this->getNewCommentQueryFields( 'rev' )
),
'joins' => [
'user' => [ 'LEFT JOIN', [
'actor_rev_user.actor_user != 0',
'user_id = actor_rev_user.actor_user',
] ],
'temp_rev_comment' => [ 'JOIN', 'temp_rev_comment.revcomment_rev = rev_id' ],
'comment_rev_comment'
=> [ 'JOIN', 'comment_rev_comment.comment_id = temp_rev_comment.revcomment_comment_id' ],
'temp_rev_user' => [ 'JOIN', 'temp_rev_user.revactor_rev = rev_id' ],
'actor_rev_user' => [ 'JOIN', 'actor_rev_user.actor_id = temp_rev_user.revactor_actor' ],
],
],
];
yield 'pre-MCR, no model, text' => [
[
'wgContentHandlerUseDB' => false,
'wgMultiContentRevisionSchemaMigrationStage' => SCHEMA_COMPAT_OLD,
],
[ 'text' ],
[
'tables' => [
'revision', 'text',
'temp_rev_comment' => 'revision_comment_temp',
'comment_rev_comment' => 'comment',
'temp_rev_user' => 'revision_actor_temp',
'actor_rev_user' => 'actor',
],
'fields' => array_merge(
$this->getRevisionQueryFields( true ),
$this->getTextQueryFields(),
$this->getNewActorQueryFields( 'rev', true ),
$this->getNewCommentQueryFields( 'rev' )
),
'joins' => [
'text' => [ 'JOIN', [ 'rev_text_id=old_id' ] ],
'temp_rev_comment' => [ 'JOIN', 'temp_rev_comment.revcomment_rev = rev_id' ],
'comment_rev_comment'
=> [ 'JOIN', 'comment_rev_comment.comment_id = temp_rev_comment.revcomment_comment_id' ],
'temp_rev_user' => [ 'JOIN', 'temp_rev_user.revactor_rev = rev_id' ],
'actor_rev_user' => [ 'JOIN', 'actor_rev_user.actor_id = temp_rev_user.revactor_actor' ],
],
],
];
yield 'pre-MCR, no model, text, page, user' => [
[
'wgContentHandlerUseDB' => false,
'wgMultiContentRevisionSchemaMigrationStage' => SCHEMA_COMPAT_OLD,
],
[ 'text', 'page', 'user' ],
[
'tables' => [
'revision', 'page', 'user', 'text',
'temp_rev_comment' => 'revision_comment_temp',
'comment_rev_comment' => 'comment',
'temp_rev_user' => 'revision_actor_temp',
'actor_rev_user' => 'actor',
],
'fields' => array_merge(
$this->getRevisionQueryFields( true ),
$this->getPageQueryFields(),
$this->getUserQueryFields(),
$this->getTextQueryFields(),
$this->getNewActorQueryFields( 'rev', true ),
$this->getNewCommentQueryFields( 'rev' )
),
'joins' => [
'page' => [
'JOIN',
[ 'page_id = rev_page' ],
],
'user' => [
'LEFT JOIN',
[
'actor_rev_user.actor_user != 0',
'user_id = actor_rev_user.actor_user',
],
],
'text' => [
'JOIN',
[ 'rev_text_id=old_id' ],
],
'temp_rev_comment' => [ 'JOIN', 'temp_rev_comment.revcomment_rev = rev_id' ],
'comment_rev_comment'
=> [ 'JOIN', 'comment_rev_comment.comment_id = temp_rev_comment.revcomment_comment_id' ],
'temp_rev_user' => [ 'JOIN', 'temp_rev_user.revactor_rev = rev_id' ],
'actor_rev_user' => [ 'JOIN', 'actor_rev_user.actor_id = temp_rev_user.revactor_actor' ],
],
],
];
}
public function provideSlotsQueryInfo() {
@ -805,54 +550,6 @@ class RevisionQueryInfoTest extends MediaWikiTestCase {
'joins' => [],
]
];
yield 'pre-MCR' => [
[
'wgMultiContentRevisionSchemaMigrationStage'
=> SCHEMA_COMPAT_OLD,
],
[],
[
'tables' => [
'revision',
],
'fields' => array_merge(
[
'slot_revision_id' => 'rev_id',
'slot_content_id' => 'NULL',
'slot_origin' => 'rev_id',
'role_name' => $db->addQuotes( SlotRecord::MAIN ),
]
),
'joins' => [],
]
];
yield 'pre-MCR, content' => [
[
'wgMultiContentRevisionSchemaMigrationStage'
=> SCHEMA_COMPAT_OLD,
],
[ 'content' ],
[
'tables' => [
'revision',
],
'fields' => array_merge(
[
'slot_revision_id' => 'rev_id',
'slot_content_id' => 'NULL',
'slot_origin' => 'rev_id',
'role_name' => $db->addQuotes( SlotRecord::MAIN ),
'content_size' => 'rev_len',
'content_sha1' => 'rev_sha1',
'content_address' =>
$db->buildConcat( [ $db->addQuotes( 'tt:' ), 'rev_text_id' ] ),
'rev_text_id' => 'rev_text_id',
'model_name' => 'rev_content_model',
]
),
'joins' => [],
]
];
}
/**

View file

@ -33,7 +33,7 @@ class RevisionStoreFactoryTest extends \MediaWikiIntegrationTestCase {
$this->getHashWANObjectCache(),
$this->getMockCommentStore(),
ActorMigration::newMigration(),
MIGRATION_OLD,
MIGRATION_NEW,
new NullLogger(),
true
);
@ -44,8 +44,6 @@ class RevisionStoreFactoryTest extends \MediaWikiIntegrationTestCase {
yield [ true ];
yield [ false ];
yield [ 'somewiki' ];
yield [ 'somewiki', MIGRATION_OLD , false ];
yield [ 'somewiki', MIGRATION_NEW , true ];
}
/**
@ -54,7 +52,7 @@ class RevisionStoreFactoryTest extends \MediaWikiIntegrationTestCase {
*/
public function testGetRevisionStore(
$dbDomain,
$mcrMigrationStage = MIGRATION_OLD,
$mcrMigrationStage = MIGRATION_NEW,
$contentHandlerUseDb = true
) {
$lbFactory = $this->getMockLoadBalancerFactory();

View file

@ -120,9 +120,7 @@ class RevisionStoreTest extends MediaWikiTestCase {
public function provideSetContentHandlerUseDB() {
return [
// ContentHandlerUseDB can be true of false pre migration.
[ false, SCHEMA_COMPAT_OLD, false ],
[ true, SCHEMA_COMPAT_OLD, false ],
// ContentHandlerUseDB can be true or false pre migration.
// During and after migration it can not be false...
[ false, SCHEMA_COMPAT_WRITE_BOTH | SCHEMA_COMPAT_READ_OLD, true ],
[ false, SCHEMA_COMPAT_WRITE_BOTH | SCHEMA_COMPAT_READ_NEW, true ],
@ -563,7 +561,6 @@ class RevisionStoreTest extends MediaWikiTestCase {
public function provideMigrationConstruction() {
return [
[ SCHEMA_COMPAT_OLD, false ],
[ SCHEMA_COMPAT_WRITE_BOTH | SCHEMA_COMPAT_READ_OLD, false ],
[ SCHEMA_COMPAT_WRITE_BOTH | SCHEMA_COMPAT_READ_NEW, false ],
[ SCHEMA_COMPAT_NEW, false ],

View file

@ -1,53 +0,0 @@
<?php
use MediaWiki\Tests\Revision\PreMcrSchemaOverride;
/**
* Tests Revision against the pre-MCR, pre ContentHandler DB schema.
*
* @covers Revision
*
* @group Revision
* @group Storage
* @group ContentHandler
* @group Database
* @group medium
*/
class RevisionNoContentModelDbTest extends RevisionDbTestBase {
use PreMcrSchemaOverride;
protected function getContentHandlerUseDB() {
return false;
}
public function provideGetTextId() {
yield [ [], null ];
$row = (object)[
'rev_id' => 7,
'rev_page' => 1, // should match actual page id
'rev_text_id' => 789,
'rev_timestamp' => '20180101000000',
'rev_len' => 7,
'rev_minor_edit' => 0,
'rev_deleted' => 0,
'rev_parent_id' => 0,
'rev_sha1' => 'deadbeef',
'rev_comment' => 'some comment',
'rev_comment_text' => 'some comment',
'rev_comment_data' => '{}',
'rev_user' => 17,
'rev_user_text' => 'some user',
];
yield [ $row, 789 ];
}
public function provideGetRevisionText() {
yield [
[ 'text' ]
];
}
}

View file

@ -1,52 +0,0 @@
<?php
use MediaWiki\Tests\Revision\PreMcrSchemaOverride;
/**
* Tests Revision against the pre-MCR DB schema.
*
* @covers Revision
*
* @group Revision
* @group Storage
* @group ContentHandler
* @group Database
* @group medium
*/
class RevisionPreMcrDbTest extends RevisionDbTestBase {
use PreMcrSchemaOverride;
protected function getContentHandlerUseDB() {
return true;
}
public function provideGetTextId() {
yield [ [], null ];
$row = (object)[
'rev_id' => 7,
'rev_page' => 1, // should match actual page id
'rev_text_id' => 789,
'rev_timestamp' => '20180101000000',
'rev_len' => 7,
'rev_minor_edit' => 0,
'rev_deleted' => 0,
'rev_parent_id' => 0,
'rev_sha1' => 'deadbeef',
'rev_comment' => 'some comment',
'rev_comment_text' => 'some comment',
'rev_comment_data' => '{}',
'rev_user' => 17,
'rev_user_text' => 'some user',
];
yield [ $row, 789 ];
}
public function provideGetRevisionText() {
yield [
[ 'text' ]
];
}
}

View file

@ -1,80 +0,0 @@
<?php
use MediaWiki\MediaWikiServices;
use MediaWiki\Revision\SlotRecord;
use MediaWiki\Storage\SqlBlobStore;
use MediaWiki\Tests\Revision\PreMcrSchemaOverride;
/**
* Test class for page archiving, using the pre-MCR schema.
*
* @group ContentHandler
* @group Database
* ^--- important, causes temporary tables to be used instead of the real database
*
* @group medium
* ^--- important, causes tests not to fail with timeout
*/
class PageArchivePreMcrTest extends PageArchiveTestBase {
use PreMcrSchemaOverride;
protected function getExpectedArchiveRows() {
/** @var SqlBlobStore $blobStore */
$blobStore = MediaWikiServices::getInstance()->getBlobStore();
return [
[
'ar_minor_edit' => '0',
'ar_user' => null,
'ar_user_text' => $this->ipEditor,
'ar_actor' => (string)User::newFromName( $this->ipEditor, false )->getActorId( $this->db ),
'ar_len' => '11',
'ar_deleted' => '0',
'ar_rev_id' => strval( $this->ipRev->getId() ),
'ar_timestamp' => $this->db->timestamp( $this->ipRev->getTimestamp() ),
'ar_sha1' => '0qdrpxl537ivfnx4gcpnzz0285yxryy',
'ar_page_id' => strval( $this->ipRev->getPageId() ),
'ar_comment_text' => 'just a test',
'ar_comment_data' => null,
'ar_comment_cid' => '2',
'ar_content_format' => null,
'ar_content_model' => null,
'ts_tags' => null,
'ar_id' => '2',
'ar_namespace' => '0',
'ar_title' => 'PageArchiveTest_thePage',
'ar_text_id' => (string)$blobStore->getTextIdFromAddress(
$this->ipRev->getSlot( SlotRecord::MAIN )->getAddress()
),
'ar_parent_id' => strval( $this->ipRev->getParentId() ),
],
[
'ar_minor_edit' => '0',
'ar_user' => (string)$this->getTestUser()->getUser()->getId(),
'ar_user_text' => $this->getTestUser()->getUser()->getName(),
'ar_actor' => (string)$this->getTestUser()->getUser()->getActorId(),
'ar_len' => '7',
'ar_deleted' => '0',
'ar_rev_id' => strval( $this->firstRev->getId() ),
'ar_timestamp' => $this->db->timestamp( $this->firstRev->getTimestamp() ),
'ar_sha1' => 'pr0s8e18148pxhgjfa0gjrvpy8fiyxc',
'ar_page_id' => strval( $this->firstRev->getPageId() ),
'ar_comment_text' => 'testing',
'ar_comment_data' => null,
'ar_comment_cid' => '1',
'ar_content_format' => null,
'ar_content_model' => null,
'ts_tags' => null,
'ar_id' => '1',
'ar_namespace' => '0',
'ar_title' => 'PageArchiveTest_thePage',
'ar_text_id' => (string)$blobStore->getTextIdFromAddress(
$this->firstRev->getSlot( SlotRecord::MAIN )->getAddress()
),
'ar_parent_id' => '0',
],
];
}
}

View file

@ -1,44 +0,0 @@
<?php
use MediaWiki\Tests\Revision\PreMcrSchemaOverride;
/**
* Tests WikiPage against the pre-MCR, pre ContentHandler DB schema.
*
* @covers WikiPage
*
* @group WikiPage
* @group Storage
* @group ContentHandler
* @group Database
* @group medium
*/
class WikiPageNoContentModelDbTest extends WikiPageDbTestBase {
use PreMcrSchemaOverride;
protected function getContentHandlerUseDB() {
return false;
}
public function testGetDeletionUpdates() {
$mainContent1 = new WikitextContent( '' );
$title = Title::makeTitle( $this->getDefaultWikitextNS(), __METHOD__ );
$page = new WikiPage( $title );
$page = $this->createPage(
$page,
[ 'main' => $mainContent1 ]
);
$dataUpdates = $page->getDeletionUpdates( $page->getRevisionRecord() );
$this->assertNotEmpty( $dataUpdates );
$updateNames = array_map( function ( $du ) {
return isset( $du->_name ) ? $du->_name : get_class( $du );
}, $dataUpdates );
$this->assertContains( LinksDeletionUpdate::class, $updateNames );
}
}

View file

@ -1,52 +0,0 @@
<?php
use MediaWiki\Tests\Revision\PreMcrSchemaOverride;
/**
* Tests WikiPage against the pre-MCR DB schema.
*
* @covers WikiPage
*
* @group WikiPage
* @group Storage
* @group ContentHandler
* @group Database
* @group medium
*/
class WikiPagePreMcrDbTest extends WikiPageDbTestBase {
use PreMcrSchemaOverride;
protected function getContentHandlerUseDB() {
return true;
}
/**
* @covers WikiPage::getContentModel
*/
public function testGetContentModel() {
$page = $this->createPage(
__METHOD__,
"some text",
CONTENT_MODEL_JAVASCRIPT
);
$page = new WikiPage( $page->getTitle() );
$this->assertEquals( CONTENT_MODEL_JAVASCRIPT, $page->getContentModel() );
}
/**
* @covers WikiPage::getContentHandler
*/
public function testGetContentHandler() {
$page = $this->createPage(
__METHOD__,
"some text",
CONTENT_MODEL_JAVASCRIPT
);
$page = new WikiPage( $page->getTitle() );
$this->assertEquals( JavaScriptContentHandler::class, get_class( $page->getContentHandler() ) );
}
}