X-Git-Url: https://git.cyclocoop.org/%20%27.%28%24debut%20%20%20%24par_page%29.%27?a=blobdiff_plain;f=tests%2Fphpunit%2Fincludes%2FCommentStoreTest.php;h=4360343981be40de48102f6166584b1e4771bd24;hb=b8efacc22706abb4af6fec4429931417a8a21e45;hp=f9b592ec01120232c63d33e5125e47adad0a89e5;hpb=be74c82f9a19f9fc5a0c771ec627b9aa9746089e;p=lhc%2Fweb%2Fwiklou.git diff --git a/tests/phpunit/includes/CommentStoreTest.php b/tests/phpunit/includes/CommentStoreTest.php index f9b592ec01..57cc073dfc 100644 --- a/tests/phpunit/includes/CommentStoreTest.php +++ b/tests/phpunit/includes/CommentStoreTest.php @@ -1,6 +1,7 @@ [ + __DIR__ . '/CommentStoreTest.sql', + ], + 'drop' => [], + 'create' => [ 'commentstore1', 'commentstore2', 'commentstore2_temp' ], + 'alter' => [], + ]; + } + /** * Create a store for a particular stage * @param int $stage @@ -25,6 +37,16 @@ class CommentStoreTest extends MediaWikiLangTestCase { */ 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; } @@ -35,11 +57,63 @@ class CommentStoreTest extends MediaWikiLangTestCase { * @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 @@ -82,6 +156,14 @@ class CommentStoreTest extends MediaWikiLangTestCase { 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', @@ -103,6 +185,18 @@ class CommentStoreTest extends MediaWikiLangTestCase { 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', @@ -114,15 +208,37 @@ class CommentStoreTest extends MediaWikiLangTestCase { ], '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' + ], ], ]; } @@ -203,6 +319,30 @@ class CommentStoreTest extends MediaWikiLangTestCase { ], ], ], + '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', [ @@ -269,6 +409,35 @@ class CommentStoreTest extends MediaWikiLangTestCase { ], ], ], + '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', [ @@ -284,7 +453,6 @@ class CommentStoreTest extends MediaWikiLangTestCase { 'Image, write-both' => [ MIGRATION_WRITE_BOTH, 'img_description', [ 'tables' => [ - 'temp_img_description' => 'image_comment_temp', 'comment_img_description' => 'comment', ], 'fields' => [ @@ -293,16 +461,15 @@ class CommentStoreTest extends MediaWikiLangTestCase { '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' => [ @@ -311,16 +478,15 @@ class CommentStoreTest extends MediaWikiLangTestCase { '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' => [ @@ -329,9 +495,37 @@ class CommentStoreTest extends MediaWikiLangTestCase { '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', + ], ], ], ], @@ -346,6 +540,8 @@ class CommentStoreTest extends MediaWikiLangTestCase { "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" ); } @@ -354,15 +550,16 @@ class CommentStoreTest extends MediaWikiLangTestCase { * @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, ]; @@ -372,15 +569,20 @@ class CommentStoreTest extends MediaWikiLangTestCase { 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( @@ -390,19 +592,18 @@ class CommentStoreTest extends MediaWikiLangTestCase { $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 ); } @@ -427,13 +628,17 @@ class CommentStoreTest extends MediaWikiLangTestCase { $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()" ); @@ -446,17 +651,18 @@ class CommentStoreTest extends MediaWikiLangTestCase { * @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, ]; @@ -466,15 +672,20 @@ class CommentStoreTest extends MediaWikiLangTestCase { 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( @@ -484,19 +695,18 @@ class CommentStoreTest extends MediaWikiLangTestCase { $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 ); } @@ -521,13 +731,17 @@ class CommentStoreTest extends MediaWikiLangTestCase { $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()" ); @@ -539,62 +753,50 @@ class CommentStoreTest extends MediaWikiLangTestCase { $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' ], @@ -602,42 +804,42 @@ class CommentStoreTest extends MediaWikiLangTestCase { ], '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' ], @@ -705,6 +907,9 @@ class CommentStoreTest extends MediaWikiLangTestCase { '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 ], ]; } @@ -735,11 +940,14 @@ class CommentStoreTest extends MediaWikiLangTestCase { * @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 ) ); } @@ -774,6 +982,7 @@ class CommentStoreTest extends MediaWikiLangTestCase { } public function testNewKey() { + $this->hideDeprecated( 'CommentStore::newKey' ); $this->assertInstanceOf( CommentStore::class, CommentStore::newKey( 'dummy' ) ); }