Merge "Fix type to callable on FileRepo::getErrorCleanupFunction"
[lhc/web/wiklou.git] / tests / phpunit / includes / Revision / RevisionStoreCacheRecordTest.php
1 <?php
2
3 namespace MediaWiki\Tests\Revision;
4
5 use Title;
6 use MediaWiki\User\UserIdentityValue;
7 use TextContent;
8 use CommentStoreComment;
9 use MediaWiki\Revision\RevisionStoreCacheRecord;
10 use MediaWiki\Revision\RevisionSlots;
11 use MediaWiki\Revision\SlotRecord;
12 use MediaWiki\Revision\RevisionRecord;
13 use MediaWiki\Revision\RevisionStoreRecord;
14
15 /**
16 * @covers \MediaWiki\Revision\RevisionStoreCacheRecord
17 * @covers \MediaWiki\Revision\RevisionStoreRecord
18 * @covers \MediaWiki\Revision\RevisionRecord
19 */
20 class RevisionStoreCacheRecordTest extends RevisionStoreRecordTest {
21
22 /**
23 * @param array $rowOverrides
24 * @param bool|callable callback function to use, or false for a default no-op callback
25 *
26 * @return RevisionStoreRecord
27 */
28 protected function newRevision( array $rowOverrides = [], $callback = false ) {
29 $title = Title::newFromText( 'Dummy' );
30 $title->resetArticleID( 17 );
31
32 $user = new UserIdentityValue( 11, 'Tester', 0 );
33 $comment = CommentStoreComment::newUnsavedComment( 'Hello World' );
34
35 $main = SlotRecord::newUnsaved( SlotRecord::MAIN, new TextContent( 'Lorem Ipsum' ) );
36 $aux = SlotRecord::newUnsaved( 'aux', new TextContent( 'Frumious Bandersnatch' ) );
37 $slots = new RevisionSlots( [ $main, $aux ] );
38
39 $row = [
40 'rev_id' => '7',
41 'rev_page' => strval( $title->getArticleID() ),
42 'rev_timestamp' => '20200101000000',
43 'rev_deleted' => 0,
44 'rev_minor_edit' => 0,
45 'rev_parent_id' => '5',
46 'rev_len' => $slots->computeSize(),
47 'rev_sha1' => $slots->computeSha1(),
48 'rev_user' => '11',
49 'page_latest' => '18',
50 ];
51
52 $row = array_merge( $row, $rowOverrides );
53
54 if ( !$callback ) {
55 $callback = function ( $revId ) use ( $row ) {
56 return (object)$row;
57 };
58 }
59
60 return new RevisionStoreCacheRecord(
61 $callback,
62 $title,
63 $user,
64 $comment,
65 (object)$row,
66 $slots
67 );
68 }
69
70 public function testCallback() {
71 // Provide a callback that returns non-default values. Asserting the revision returns
72 // these values confirms callback execution and behavior. Also confirm the callback
73 // is only invoked once, even for multiple getter calls.
74 $rowOverrides = [
75 'rev_deleted' => RevisionRecord::DELETED_TEXT,
76 'rev_user' => 12,
77 ];
78 $callbackInvoked = 0;
79 $callback = function ( $revId ) use ( &$callbackInvoked, $rowOverrides ) {
80 $callbackInvoked++;
81 return (object)$rowOverrides;
82 };
83 $rev = $this->newRevision( [], $callback );
84
85 $this->assertSame( RevisionRecord::DELETED_TEXT, $rev->getVisibility() );
86 $this->assertSame( 12, $rev->getUser()->getId() );
87 $this->assertSame( 1, $callbackInvoked );
88 }
89
90 }