3 use MediaWiki\MediaWikiServices
;
4 use Wikimedia\Rdbms\IDatabase
;
6 class DatabaseLogEntryTest
extends MediaWikiTestCase
{
7 public function setUp() {
10 // These services cache their joins
11 MediaWikiServices
::getInstance()->resetServiceForTesting( 'CommentStore' );
12 MediaWikiServices
::getInstance()->resetServiceForTesting( 'ActorMigration' );
15 public function tearDown() {
18 MediaWikiServices
::getInstance()->resetServiceForTesting( 'CommentStore' );
19 MediaWikiServices
::getInstance()->resetServiceForTesting( 'ActorMigration' );
23 * @covers DatabaseLogEntry::newFromId
24 * @covers DatabaseLogEntry::getSelectQueryData
26 * @dataProvider provideNewFromId
29 * @param array $selectFields
30 * @param string[]|null $row
31 * @param string[]|null $expectedFields
32 * @param int $commentMigration
33 * @param int $actorMigration
35 public function testNewFromId( $id,
38 array $expectedFields = null,
42 $this->setMwGlobals( [
43 'wgCommentTableSchemaMigrationStage' => $commentMigration,
44 'wgActorTableSchemaMigrationStage' => $actorMigration,
47 $row = $row ?
(object)$row : null;
48 $db = $this->getMock( IDatabase
::class );
49 $db->expects( self
::once() )
50 ->method( 'selectRow' )
51 ->with( $selectFields['tables'],
52 $selectFields['fields'],
53 $selectFields['conds'],
54 'DatabaseLogEntry::newFromId',
55 $selectFields['options'],
56 $selectFields['join_conds']
58 ->will( self
::returnValue( $row ) );
60 /** @var IDatabase $db */
61 $logEntry = DatabaseLogEntry
::newFromId( $id, $db );
63 if ( !$expectedFields ) {
64 self
::assertNull( $logEntry, "Expected no log entry returned for id=$id" );
66 self
::assertEquals( $id, $logEntry->getId() );
67 self
::assertEquals( $expectedFields['type'], $logEntry->getType() );
68 self
::assertEquals( $expectedFields['comment'], $logEntry->getComment() );
72 public function provideNewFromId() {
74 'tables' => [ 'logging', 'user' ],
87 'log_comment_text' => 'log_comment',
88 'log_comment_data' => 'NULL',
89 'log_comment_cid' => 'NULL',
90 'log_user' => 'log_user',
91 'log_user_text' => 'log_user_text',
92 'log_actor' => 'NULL',
95 'join_conds' => [ 'user' => [ 'LEFT JOIN', 'user_id=log_user' ] ],
101 'comment_log_comment' => 'comment',
102 'actor_log_user' => 'actor'
116 'log_comment_text' => 'comment_log_comment.comment_text',
117 'log_comment_data' => 'comment_log_comment.comment_data',
118 'log_comment_cid' => 'comment_log_comment.comment_id',
119 'log_user' => 'actor_log_user.actor_user',
120 'log_user_text' => 'actor_log_user.actor_name',
121 'log_actor' => 'log_actor',
125 'user' => [ 'LEFT JOIN', 'user_id=actor_log_user.actor_user' ],
126 'comment_log_comment' => [ 'JOIN', 'comment_log_comment.comment_id = log_comment_id' ],
127 'actor_log_user' => [ 'JOIN', 'actor_log_user.actor_id = log_actor' ],
133 $oldTables +
[ 'conds' => [ 'log_id' => 0 ] ],
141 $oldTables +
[ 'conds' => [ 'log_id' => 123 ] ],
144 'log_type' => 'foobarize',
145 'log_comment_text' => 'test!',
146 'log_comment_data' => null,
148 [ 'type' => 'foobarize', 'comment' => 'test!' ],
154 $newTables +
[ 'conds' => [ 'log_id' => 567 ] ],
157 'log_type' => 'foobarize',
158 'log_comment_text' => 'test!',
159 'log_comment_data' => null,
161 [ 'type' => 'foobarize', 'comment' => 'test!' ],