2 namespace MediaWiki\Tests\Revision
;
5 use MediaWiki\User\UserIdentityValue
;
7 use CommentStoreComment
;
8 use MediaWiki\Revision\RevisionStoreCacheRecord
;
9 use MediaWiki\Revision\RevisionSlots
;
10 use MediaWiki\Revision\SlotRecord
;
11 use MediaWiki\Revision\RevisionRecord
;
12 use MediaWiki\Revision\RevisionStoreRecord
;
15 * @covers \MediaWiki\Revision\RevisionStoreCacheRecord
16 * @covers \MediaWiki\Revision\RevisionStoreRecord
17 * @covers \MediaWiki\Revision\RevisionRecord
19 class RevisionStoreCacheRecordTest
extends RevisionStoreRecordTest
{
22 * @param array $rowOverrides
23 * @param bool|callable callback function to use, or false for a default no-op callback
25 * @return RevisionStoreRecord
27 protected function newRevision( array $rowOverrides = [], $callback = false ) {
28 $title = Title
::newFromText( 'Dummy' );
29 $title->resetArticleID( 17 );
31 $user = new UserIdentityValue( 11, 'Tester', 0 );
32 $comment = CommentStoreComment
::newUnsavedComment( 'Hello World' );
34 $main = SlotRecord
::newUnsaved( SlotRecord
::MAIN
, new TextContent( 'Lorem Ipsum' ) );
35 $aux = SlotRecord
::newUnsaved( 'aux', new TextContent( 'Frumious Bandersnatch' ) );
36 $slots = new RevisionSlots( [ $main, $aux ] );
40 'rev_page' => strval( $title->getArticleID() ),
41 'rev_timestamp' => '20200101000000',
43 'rev_minor_edit' => 0,
44 'rev_parent_id' => '5',
45 'rev_len' => $slots->computeSize(),
46 'rev_sha1' => $slots->computeSha1(),
48 'page_latest' => '18',
51 $row = array_merge( $row, $rowOverrides );
54 $callback = function ( $revId ) use ( $row ) {
59 return new RevisionStoreCacheRecord(
69 public function testCallback() {
70 // Provide a callback that returns non-default values. Asserting the revision returns
71 // these values confirms callback execution and behavior. Also confirm the callback
72 // is only invoked once, even for multiple getter calls.
74 'rev_deleted' => RevisionRecord
::DELETED_TEXT
,
78 $callback = function ( $revId ) use ( &$callbackInvoked, $rowOverrides ) {
80 return (object)$rowOverrides;
82 $rev = $this->newRevision( [], $callback );
84 $this->assertSame( RevisionRecord
::DELETED_TEXT
, $rev->getVisibility() );
85 $this->assertSame( 12, $rev->getUser()->getId() );
86 $this->assertSame( 1, $callbackInvoked );