<?php
use MediaWiki\MediaWikiServices;
+use Wikimedia\Rdbms\IMaintainableDatabase;
use Wikimedia\ScopedCallback;
use Wikimedia\TestingAccessWrapper;
'comment',
];
+ protected function getSchemaOverrides( IMaintainableDatabase $db ) {
+ return [
+ 'scripts' => [
+ __DIR__ . '/CommentStoreTest.sql',
+ ],
+ 'drop' => [],
+ 'create' => [ 'commentstore1', 'commentstore2', 'commentstore2_temp' ],
+ 'alter' => [],
+ ];
+ }
+
/**
* Create a store for a particular stage
* @param int $stage
*/
protected function makeStore( $stage ) {
$store = new CommentStore( MediaWikiServices::getInstance()->getContentLanguage(), $stage );
+
+ TestingAccessWrapper::newFromObject( $store )->tempTables += [ 'cs2_comment' => [
+ 'table' => 'commentstore2_temp',
+ 'pk' => 'cs2t_id',
+ 'field' => 'cs2t_comment_id',
+ 'joinPK' => 'cs2_id',
+ 'stage' => MIGRATION_OLD,
+ 'deprecatedIn' => null,
+ ] ];
+
return $store;
}
* @return CommentStore
*/
protected function makeStoreWithKey( $stage, $key ) {
+ $this->hideDeprecated( 'CommentStore::newKey' );
$store = CommentStore::newKey( $key );
TestingAccessWrapper::newFromObject( $store )->stage = $stage;
+
+ TestingAccessWrapper::newFromObject( $store )->tempTables += [ 'cs2_comment' => [
+ 'table' => 'commentstore2_temp',
+ 'pk' => 'cs2t_id',
+ 'field' => 'cs2t_comment_id',
+ 'joinPK' => 'cs2_id',
+ 'stage' => MIGRATION_OLD,
+ 'deprecatedIn' => null,
+ ] ];
+
return $store;
}
+ /**
+ * @dataProvider provideConstructor
+ * @param int $stage
+ * @param string|null $exceptionMsg
+ */
+ public function testConstructor( $stage, $exceptionMsg ) {
+ try {
+ $m = new CommentStore( Language::factory( 'qqx' ), $stage );
+ if ( $exceptionMsg !== null ) {
+ $this->fail( 'Expected exception not thrown' );
+ }
+ $this->assertInstanceOf( CommentStore::class, $m );
+ } catch ( InvalidArgumentException $ex ) {
+ $this->assertSame( $exceptionMsg, $ex->getMessage() );
+ }
+ }
+
+ public static function provideConstructor() {
+ return [
+ [ 0, '$stage must include a write mode' ],
+ [ SCHEMA_COMPAT_READ_OLD, '$stage must include a write mode' ],
+ [ SCHEMA_COMPAT_READ_NEW, '$stage must include a write mode' ],
+ [ SCHEMA_COMPAT_READ_BOTH, '$stage must include a write mode' ],
+
+ [ SCHEMA_COMPAT_WRITE_OLD, '$stage must include a read mode' ],
+ [ SCHEMA_COMPAT_WRITE_OLD | SCHEMA_COMPAT_READ_OLD, null ],
+ [ SCHEMA_COMPAT_WRITE_OLD | SCHEMA_COMPAT_READ_NEW, null ],
+ [ SCHEMA_COMPAT_WRITE_OLD | SCHEMA_COMPAT_READ_BOTH, null ],
+
+ [ SCHEMA_COMPAT_WRITE_NEW, '$stage must include a read mode' ],
+ [ SCHEMA_COMPAT_WRITE_NEW | SCHEMA_COMPAT_READ_OLD, null ],
+ [ SCHEMA_COMPAT_WRITE_NEW | SCHEMA_COMPAT_READ_NEW, null ],
+ [ SCHEMA_COMPAT_WRITE_NEW | SCHEMA_COMPAT_READ_BOTH, null ],
+
+ [ SCHEMA_COMPAT_WRITE_BOTH, '$stage must include a read mode' ],
+ [ SCHEMA_COMPAT_WRITE_BOTH | SCHEMA_COMPAT_READ_OLD, null ],
+ [ SCHEMA_COMPAT_WRITE_BOTH | SCHEMA_COMPAT_READ_NEW, null ],
+ [ SCHEMA_COMPAT_WRITE_BOTH | SCHEMA_COMPAT_READ_BOTH, null ],
+ ];
+ }
+
/**
* @dataProvider provideGetFields
* @param int $stage
MIGRATION_NEW, 'ipb_reason',
[ 'ipb_reason_id' => 'ipb_reason_id' ],
],
+ 'Simple table, write-both/read-old' => [
+ SCHEMA_COMPAT_WRITE_BOTH | SCHEMA_COMPAT_READ_OLD, 'ipb_reason',
+ [ 'ipb_reason_text' => 'ipb_reason', 'ipb_reason_data' => 'NULL', 'ipb_reason_cid' => 'NULL' ],
+ ],
+ 'Simple table, write-both/read-new' => [
+ SCHEMA_COMPAT_WRITE_BOTH | SCHEMA_COMPAT_READ_NEW, 'ipb_reason',
+ [ 'ipb_reason_id' => 'ipb_reason_id' ],
+ ],
'Revision, old' => [
MIGRATION_OLD, 'rev_comment',
MIGRATION_NEW, 'rev_comment',
[ 'rev_comment_pk' => 'rev_id' ],
],
+ 'Revision, write-both/read-old' => [
+ SCHEMA_COMPAT_WRITE_BOTH | SCHEMA_COMPAT_READ_OLD, 'rev_comment',
+ [
+ 'rev_comment_text' => 'rev_comment',
+ 'rev_comment_data' => 'NULL',
+ 'rev_comment_cid' => 'NULL',
+ ],
+ ],
+ 'Revision, write-both/read-new' => [
+ SCHEMA_COMPAT_WRITE_BOTH | SCHEMA_COMPAT_READ_NEW, 'rev_comment',
+ [ 'rev_comment_pk' => 'rev_id' ],
+ ],
'Image, old' => [
MIGRATION_OLD, 'img_description',
],
'Image, write-both' => [
MIGRATION_WRITE_BOTH, 'img_description',
- [ 'img_description_old' => 'img_description', 'img_description_pk' => 'img_name' ],
+ [
+ 'img_description_old' => 'img_description',
+ 'img_description_id' => 'img_description_id'
+ ],
],
'Image, write-new' => [
MIGRATION_WRITE_NEW, 'img_description',
- [ 'img_description_old' => 'img_description', 'img_description_pk' => 'img_name' ],
+ [
+ 'img_description_old' => 'img_description',
+ 'img_description_id' => 'img_description_id'
+ ],
],
'Image, new' => [
MIGRATION_NEW, 'img_description',
- [ 'img_description_pk' => 'img_name' ],
+ [
+ 'img_description_id' => 'img_description_id'
+ ],
+ ],
+ 'Image, write-both/read-old' => [
+ SCHEMA_COMPAT_WRITE_BOTH | SCHEMA_COMPAT_READ_OLD, 'img_description',
+ [
+ 'img_description_text' => 'img_description',
+ 'img_description_data' => 'NULL',
+ 'img_description_cid' => 'NULL',
+ ],
+ ],
+ 'Image, write-both/read-new' => [
+ SCHEMA_COMPAT_WRITE_BOTH | SCHEMA_COMPAT_READ_NEW, 'img_description',
+ [
+ 'img_description_id' => 'img_description_id'
+ ],
],
];
}
],
],
],
+ 'Simple table, write-both/read-old' => [
+ SCHEMA_COMPAT_WRITE_BOTH | SCHEMA_COMPAT_READ_OLD, 'ipb_reason', [
+ 'tables' => [],
+ 'fields' => [
+ 'ipb_reason_text' => 'ipb_reason',
+ 'ipb_reason_data' => 'NULL',
+ 'ipb_reason_cid' => 'NULL',
+ ],
+ 'joins' => [],
+ ],
+ ],
+ 'Simple table, write-both/read-new' => [
+ SCHEMA_COMPAT_WRITE_BOTH | SCHEMA_COMPAT_READ_NEW, 'ipb_reason', [
+ 'tables' => [ 'comment_ipb_reason' => 'comment' ],
+ 'fields' => [
+ 'ipb_reason_text' => 'comment_ipb_reason.comment_text',
+ 'ipb_reason_data' => 'comment_ipb_reason.comment_data',
+ 'ipb_reason_cid' => 'comment_ipb_reason.comment_id',
+ ],
+ 'joins' => [
+ 'comment_ipb_reason' => [ 'JOIN', 'comment_ipb_reason.comment_id = ipb_reason_id' ],
+ ],
+ ],
+ ],
'Revision, old' => [
MIGRATION_OLD, 'rev_comment', [
],
],
],
+ 'Revision, write-both/read-old' => [
+ SCHEMA_COMPAT_WRITE_BOTH | SCHEMA_COMPAT_READ_OLD, 'rev_comment', [
+ 'tables' => [],
+ 'fields' => [
+ 'rev_comment_text' => 'rev_comment',
+ 'rev_comment_data' => 'NULL',
+ 'rev_comment_cid' => 'NULL',
+ ],
+ 'joins' => [],
+ ],
+ ],
+ 'Revision, write-both/read-new' => [
+ SCHEMA_COMPAT_WRITE_BOTH | SCHEMA_COMPAT_READ_NEW, 'rev_comment', [
+ 'tables' => [
+ 'temp_rev_comment' => 'revision_comment_temp',
+ 'comment_rev_comment' => 'comment',
+ ],
+ 'fields' => [
+ 'rev_comment_text' => 'comment_rev_comment.comment_text',
+ 'rev_comment_data' => 'comment_rev_comment.comment_data',
+ 'rev_comment_cid' => 'comment_rev_comment.comment_id',
+ ],
+ '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' ],
+ ],
+ ],
+ ],
'Image, old' => [
MIGRATION_OLD, 'img_description', [
'Image, write-both' => [
MIGRATION_WRITE_BOTH, 'img_description', [
'tables' => [
- 'temp_img_description' => 'image_comment_temp',
'comment_img_description' => 'comment',
],
'fields' => [
'img_description_cid' => 'comment_img_description.comment_id',
],
'joins' => [
- 'temp_img_description' => [ 'LEFT JOIN', 'temp_img_description.imgcomment_name = img_name' ],
'comment_img_description' => [ 'LEFT JOIN',
- 'comment_img_description.comment_id = temp_img_description.imgcomment_description_id' ],
+ 'comment_img_description.comment_id = img_description_id',
+ ],
],
],
],
'Image, write-new' => [
MIGRATION_WRITE_NEW, 'img_description', [
'tables' => [
- 'temp_img_description' => 'image_comment_temp',
'comment_img_description' => 'comment',
],
'fields' => [
'img_description_cid' => 'comment_img_description.comment_id',
],
'joins' => [
- 'temp_img_description' => [ 'LEFT JOIN', 'temp_img_description.imgcomment_name = img_name' ],
'comment_img_description' => [ 'LEFT JOIN',
- 'comment_img_description.comment_id = temp_img_description.imgcomment_description_id' ],
+ 'comment_img_description.comment_id = img_description_id',
+ ],
],
],
],
'Image, new' => [
MIGRATION_NEW, 'img_description', [
'tables' => [
- 'temp_img_description' => 'image_comment_temp',
'comment_img_description' => 'comment',
],
'fields' => [
'img_description_cid' => 'comment_img_description.comment_id',
],
'joins' => [
- 'temp_img_description' => [ 'JOIN', 'temp_img_description.imgcomment_name = img_name' ],
'comment_img_description' => [ 'JOIN',
- 'comment_img_description.comment_id = temp_img_description.imgcomment_description_id' ],
+ 'comment_img_description.comment_id = img_description_id',
+ ],
+ ],
+ ],
+ ],
+ 'Image, write-both/read-old' => [
+ SCHEMA_COMPAT_WRITE_BOTH | SCHEMA_COMPAT_READ_OLD, 'img_description', [
+ 'tables' => [],
+ 'fields' => [
+ 'img_description_text' => 'img_description',
+ 'img_description_data' => 'NULL',
+ 'img_description_cid' => 'NULL',
+ ],
+ 'joins' => [],
+ ],
+ ],
+ 'Image, write-both/read-new' => [
+ SCHEMA_COMPAT_WRITE_BOTH | SCHEMA_COMPAT_READ_NEW, 'img_description', [
+ 'tables' => [
+ 'comment_img_description' => 'comment',
+ ],
+ 'fields' => [
+ 'img_description_text' => 'comment_img_description.comment_text',
+ 'img_description_data' => 'comment_img_description.comment_data',
+ 'img_description_cid' => 'comment_img_description.comment_id',
+ ],
+ 'joins' => [
+ 'comment_img_description' => [ 'JOIN',
+ 'comment_img_description.comment_id = img_description_id',
+ ],
],
],
],
"message keys $from" );
$this->assertEquals( $expect['message']->text(), $actual->message->text(),
"message rendering $from" );
+ $this->assertEquals( $expect['text'], $actual->message->text(),
+ "message rendering and text $from" );
$this->assertEquals( $expect['data'], $actual->data, "data $from" );
}
* @param string $table
* @param string $key
* @param string $pk
- * @param string $extraFields
* @param string|Message $comment
* @param array|null $data
* @param array $expect
*/
- public function testInsertRoundTrip( $table, $key, $pk, $extraFields, $comment, $data, $expect ) {
+ public function testInsertRoundTrip( $table, $key, $pk, $comment, $data, $expect ) {
+ static $id = 1;
+
$expectOld = [
'text' => $expect['text'],
- 'message' => new RawMessage( '$1', [ $expect['text'] ] ),
+ 'message' => new RawMessage( '$1', [ Message::plaintextParam( $expect['text'] ) ] ),
'data' => null,
];
MIGRATION_NEW ],
MIGRATION_WRITE_NEW => [ MIGRATION_WRITE_BOTH, MIGRATION_WRITE_NEW, MIGRATION_NEW ],
MIGRATION_NEW => [ MIGRATION_WRITE_BOTH, MIGRATION_WRITE_NEW, MIGRATION_NEW ],
+
+ SCHEMA_COMPAT_WRITE_BOTH | SCHEMA_COMPAT_READ_OLD => [
+ MIGRATION_OLD, SCHEMA_COMPAT_WRITE_BOTH | SCHEMA_COMPAT_READ_OLD,
+ SCHEMA_COMPAT_WRITE_BOTH | SCHEMA_COMPAT_READ_NEW, MIGRATION_NEW
+ ],
+ SCHEMA_COMPAT_WRITE_BOTH | SCHEMA_COMPAT_READ_NEW => [
+ MIGRATION_OLD, SCHEMA_COMPAT_WRITE_BOTH | SCHEMA_COMPAT_READ_OLD,
+ SCHEMA_COMPAT_WRITE_BOTH | SCHEMA_COMPAT_READ_NEW, MIGRATION_NEW
+ ],
];
foreach ( $stages as $writeStage => $possibleReadStages ) {
- if ( $key === 'ipb_reason' ) {
- $extraFields['ipb_address'] = __CLASS__ . "#$writeStage";
- }
-
$wstore = $this->makeStore( $writeStage );
- $usesTemp = $key === 'rev_comment';
+ $usesTemp = $key === 'cs2_comment';
if ( $usesTemp ) {
list( $fields, $callback ) = $wstore->insertWithTempTable(
$fields = $wstore->insert( $this->db, $key, $comment, $data );
}
- if ( $writeStage <= MIGRATION_WRITE_BOTH ) {
+ if ( $writeStage & SCHEMA_COMPAT_WRITE_OLD ) {
$this->assertSame( $expect['text'], $fields[$key], "old field, stage=$writeStage" );
} else {
$this->assertArrayNotHasKey( $key, $fields, "old field, stage=$writeStage" );
}
- if ( $writeStage >= MIGRATION_WRITE_BOTH && !$usesTemp ) {
+ if ( ( $writeStage & SCHEMA_COMPAT_WRITE_NEW ) && !$usesTemp ) {
$this->assertArrayHasKey( "{$key}_id", $fields, "new field, stage=$writeStage" );
} else {
$this->assertArrayNotHasKey( "{$key}_id", $fields, "new field, stage=$writeStage" );
}
- $this->db->insert( $table, $extraFields + $fields, __METHOD__ );
- $id = $this->db->insertId();
+ $this->db->insert( $table, [ $pk => ++$id ] + $fields, __METHOD__ );
if ( $usesTemp ) {
$callback( $id );
}
$queryInfo['joins']
);
+ $expectForCombination = (
+ ( $writeStage & SCHEMA_COMPAT_WRITE_BOTH ) === SCHEMA_COMPAT_WRITE_OLD ||
+ ( $readStage & SCHEMA_COMPAT_READ_BOTH ) === SCHEMA_COMPAT_READ_OLD
+ ) ? $expectOld : $expect;
$this->assertComment(
- $writeStage === MIGRATION_OLD || $readStage === MIGRATION_OLD ? $expectOld : $expect,
+ $expectForCombination,
$rstore->getCommentLegacy( $this->db, $key, $fieldRow ),
"w=$writeStage, r=$readStage, from getFields()"
);
$this->assertComment(
- $writeStage === MIGRATION_OLD || $readStage === MIGRATION_OLD ? $expectOld : $expect,
+ $expectForCombination,
$rstore->getComment( $key, $joinRow ),
"w=$writeStage, r=$readStage, from getJoin()"
);
* @param string $table
* @param string $key
* @param string $pk
- * @param string $extraFields
* @param string|Message $comment
* @param array|null $data
* @param array $expect
*/
public function testInsertRoundTrip_withKeyConstruction(
- $table, $key, $pk, $extraFields, $comment, $data, $expect
+ $table, $key, $pk, $comment, $data, $expect
) {
+ static $id = 1000;
+
$expectOld = [
'text' => $expect['text'],
- 'message' => new RawMessage( '$1', [ $expect['text'] ] ),
+ 'message' => new RawMessage( '$1', [ Message::plaintextParam( $expect['text'] ) ] ),
'data' => null,
];
MIGRATION_NEW ],
MIGRATION_WRITE_NEW => [ MIGRATION_WRITE_BOTH, MIGRATION_WRITE_NEW, MIGRATION_NEW ],
MIGRATION_NEW => [ MIGRATION_WRITE_BOTH, MIGRATION_WRITE_NEW, MIGRATION_NEW ],
+
+ SCHEMA_COMPAT_WRITE_BOTH | SCHEMA_COMPAT_READ_OLD => [
+ MIGRATION_OLD, SCHEMA_COMPAT_WRITE_BOTH | SCHEMA_COMPAT_READ_OLD,
+ SCHEMA_COMPAT_WRITE_BOTH | SCHEMA_COMPAT_READ_NEW, MIGRATION_NEW
+ ],
+ SCHEMA_COMPAT_WRITE_BOTH | SCHEMA_COMPAT_READ_NEW => [
+ MIGRATION_OLD, SCHEMA_COMPAT_WRITE_BOTH | SCHEMA_COMPAT_READ_OLD,
+ SCHEMA_COMPAT_WRITE_BOTH | SCHEMA_COMPAT_READ_NEW, MIGRATION_NEW
+ ],
];
foreach ( $stages as $writeStage => $possibleReadStages ) {
- if ( $key === 'ipb_reason' ) {
- $extraFields['ipb_address'] = __CLASS__ . "#$writeStage";
- }
-
$wstore = $this->makeStoreWithKey( $writeStage, $key );
- $usesTemp = $key === 'rev_comment';
+ $usesTemp = $key === 'cs2_comment';
if ( $usesTemp ) {
list( $fields, $callback ) = $wstore->insertWithTempTable(
$fields = $wstore->insert( $this->db, $comment, $data );
}
- if ( $writeStage <= MIGRATION_WRITE_BOTH ) {
+ if ( $writeStage & SCHEMA_COMPAT_WRITE_OLD ) {
$this->assertSame( $expect['text'], $fields[$key], "old field, stage=$writeStage" );
} else {
$this->assertArrayNotHasKey( $key, $fields, "old field, stage=$writeStage" );
}
- if ( $writeStage >= MIGRATION_WRITE_BOTH && !$usesTemp ) {
+ if ( ( $writeStage & SCHEMA_COMPAT_WRITE_NEW ) && !$usesTemp ) {
$this->assertArrayHasKey( "{$key}_id", $fields, "new field, stage=$writeStage" );
} else {
$this->assertArrayNotHasKey( "{$key}_id", $fields, "new field, stage=$writeStage" );
}
- $this->db->insert( $table, $extraFields + $fields, __METHOD__ );
- $id = $this->db->insertId();
+ $this->db->insert( $table, [ $pk => ++$id ] + $fields, __METHOD__ );
if ( $usesTemp ) {
$callback( $id );
}
$queryInfo['joins']
);
+ $expectForCombination = (
+ ( $writeStage & SCHEMA_COMPAT_WRITE_BOTH ) === SCHEMA_COMPAT_WRITE_OLD ||
+ ( $readStage & SCHEMA_COMPAT_READ_BOTH ) === SCHEMA_COMPAT_READ_OLD
+ ) ? $expectOld : $expect;
$this->assertComment(
- $writeStage === MIGRATION_OLD || $readStage === MIGRATION_OLD ? $expectOld : $expect,
+ $expectForCombination,
$rstore->getCommentLegacy( $this->db, $fieldRow ),
"w=$writeStage, r=$readStage, from getFields()"
);
$this->assertComment(
- $writeStage === MIGRATION_OLD || $readStage === MIGRATION_OLD ? $expectOld : $expect,
+ $expectForCombination,
$rstore->getComment( $joinRow ),
"w=$writeStage, r=$readStage, from getJoin()"
);
$db = wfGetDB( DB_REPLICA ); // for timestamps
$msgComment = new Message( 'parentheses', [ 'message comment' ] );
- $textCommentMsg = new RawMessage( '$1', [ 'text comment' ] );
+ $textCommentMsg = new RawMessage( '$1', [ Message::plaintextParam( '{{text}} comment' ) ] );
$nestedMsgComment = new Message( [ 'parentheses', 'rawmessage' ], [ new Message( 'mainpage' ) ] );
- $ipbfields = [
- 'ipb_range_start' => '',
- 'ipb_range_end' => '',
- 'ipb_timestamp' => $db->timestamp(),
- 'ipb_expiry' => $db->getInfinity(),
- ];
- $revfields = [
- 'rev_page' => 42,
- 'rev_text_id' => 42,
- 'rev_len' => 0,
- 'rev_timestamp' => $db->timestamp(),
- ];
$comStoreComment = new CommentStoreComment(
null, 'comment store comment', null, [ 'foo' => 'bar' ]
);
return [
'Simple table, text comment' => [
- 'ipblocks', 'ipb_reason', 'ipb_id', $ipbfields, 'text comment', null, [
- 'text' => 'text comment',
+ 'commentstore1', 'cs1_comment', 'cs1_id', '{{text}} comment', null, [
+ 'text' => '{{text}} comment',
'message' => $textCommentMsg,
'data' => null,
]
],
'Simple table, text comment with data' => [
- 'ipblocks', 'ipb_reason', 'ipb_id', $ipbfields, 'text comment', [ 'message' => 42 ], [
- 'text' => 'text comment',
+ 'commentstore1', 'cs1_comment', 'cs1_id', '{{text}} comment', [ 'message' => 42 ], [
+ 'text' => '{{text}} comment',
'message' => $textCommentMsg,
'data' => [ 'message' => 42 ],
]
],
'Simple table, message comment' => [
- 'ipblocks', 'ipb_reason', 'ipb_id', $ipbfields, $msgComment, null, [
+ 'commentstore1', 'cs1_comment', 'cs1_id', $msgComment, null, [
'text' => '(message comment)',
'message' => $msgComment,
'data' => null,
]
],
'Simple table, message comment with data' => [
- 'ipblocks', 'ipb_reason', 'ipb_id', $ipbfields, $msgComment, [ 'message' => 42 ], [
+ 'commentstore1', 'cs1_comment', 'cs1_id', $msgComment, [ 'message' => 42 ], [
'text' => '(message comment)',
'message' => $msgComment,
'data' => [ 'message' => 42 ],
]
],
'Simple table, nested message comment' => [
- 'ipblocks', 'ipb_reason', 'ipb_id', $ipbfields, $nestedMsgComment, null, [
+ 'commentstore1', 'cs1_comment', 'cs1_id', $nestedMsgComment, null, [
'text' => '(Main Page)',
'message' => $nestedMsgComment,
'data' => null,
]
],
'Simple table, CommentStoreComment' => [
- 'ipblocks', 'ipb_reason', 'ipb_id', $ipbfields, clone $comStoreComment, [ 'baz' => 'baz' ], [
+ 'commentstore1', 'cs1_comment', 'cs1_id', clone $comStoreComment, [ 'baz' => 'baz' ], [
'text' => 'comment store comment',
'message' => $comStoreComment->message,
'data' => [ 'foo' => 'bar' ],
],
'Revision, text comment' => [
- 'revision', 'rev_comment', 'rev_id', $revfields, 'text comment', null, [
- 'text' => 'text comment',
+ 'commentstore2', 'cs2_comment', 'cs2_id', '{{text}} comment', null, [
+ 'text' => '{{text}} comment',
'message' => $textCommentMsg,
'data' => null,
]
],
'Revision, text comment with data' => [
- 'revision', 'rev_comment', 'rev_id', $revfields, 'text comment', [ 'message' => 42 ], [
- 'text' => 'text comment',
+ 'commentstore2', 'cs2_comment', 'cs2_id', '{{text}} comment', [ 'message' => 42 ], [
+ 'text' => '{{text}} comment',
'message' => $textCommentMsg,
'data' => [ 'message' => 42 ],
]
],
'Revision, message comment' => [
- 'revision', 'rev_comment', 'rev_id', $revfields, $msgComment, null, [
+ 'commentstore2', 'cs2_comment', 'cs2_id', $msgComment, null, [
'text' => '(message comment)',
'message' => $msgComment,
'data' => null,
]
],
'Revision, message comment with data' => [
- 'revision', 'rev_comment', 'rev_id', $revfields, $msgComment, [ 'message' => 42 ], [
+ 'commentstore2', 'cs2_comment', 'cs2_id', $msgComment, [ 'message' => 42 ], [
'text' => '(message comment)',
'message' => $msgComment,
'data' => [ 'message' => 42 ],
]
],
'Revision, nested message comment' => [
- 'revision', 'rev_comment', 'rev_id', $revfields, $nestedMsgComment, null, [
+ 'commentstore2', 'cs2_comment', 'cs2_id', $nestedMsgComment, null, [
'text' => '(Main Page)',
'message' => $nestedMsgComment,
'data' => null,
]
],
'Revision, CommentStoreComment' => [
- 'revision', 'rev_comment', 'rev_id', $revfields, clone $comStoreComment, [ 'baz' => 'baz' ], [
+ 'commentstore2', 'cs2_comment', 'cs2_id', clone $comStoreComment, [ 'baz' => 'baz' ], [
'text' => 'comment store comment',
'message' => $comStoreComment->message,
'data' => [ 'foo' => 'bar' ],
'MIGRATION_WRITE_BOTH' => [ MIGRATION_WRITE_BOTH ],
'MIGRATION_WRITE_NEW' => [ MIGRATION_WRITE_NEW ],
'MIGRATION_NEW' => [ MIGRATION_NEW ],
+
+ 'SCHEMA_COMPAT write-both/read-old' => [ SCHEMA_COMPAT_WRITE_BOTH | SCHEMA_COMPAT_READ_OLD ],
+ 'SCHEMA_COMPAT write-both/read-new' => [ SCHEMA_COMPAT_WRITE_BOTH | SCHEMA_COMPAT_READ_NEW ],
];
}
* @param int $stage
*/
public function testInsertWithTempTableDeprecated( $stage ) {
- $wrap = TestingAccessWrapper::newFromClass( CommentStore::class );
- $wrap->formerTempTables += [ 'ipb_reason' => '1.30' ];
+ $store = $this->makeStore( $stage );
+ $wrap = TestingAccessWrapper::newFromObject( $store );
+ $wrap->tempTables += [ 'ipb_reason' => [
+ 'stage' => MIGRATION_NEW,
+ 'deprecatedIn' => '1.30',
+ ] ];
$this->hideDeprecated( 'CommentStore::insertWithTempTable for ipb_reason' );
- $store = $this->makeStore( $stage );
list( $fields, $callback ) = $store->insertWithTempTable( $this->db, 'ipb_reason', 'foo' );
$this->assertTrue( is_callable( $callback ) );
}
}
public function testNewKey() {
+ $this->hideDeprecated( 'CommentStore::newKey' );
$this->assertInstanceOf( CommentStore::class, CommentStore::newKey( 'dummy' ) );
}