Page Menu
Home
WickedGov Phorge
Search
Configure Global Search
Log In
Files
F4036409
ManualLogEntryTest.php
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Size
3 KB
Referenced Files
None
Subscribers
None
ManualLogEntryTest.php
View Options
<?php
namespace
MediaWiki\Tests\Integration\Logging
;
use
MediaWiki\Deferred\DeferredUpdates
;
use
MediaWiki\Logging\LogEntryBase
;
use
MediaWiki\Logging\LogPage
;
use
MediaWiki\Logging\ManualLogEntry
;
use
MediaWiki\RecentChanges\RecentChange
;
use
MediaWikiIntegrationTestCase
;
use
Wikimedia\ScopedCallback
;
/**
* @group Database
* @covers \MediaWiki\Logging\ManualLogEntry
*/
class
ManualLogEntryTest
extends
MediaWikiIntegrationTestCase
{
/** @dataProvider provideCreationAndPublishingToRecentChanges */
public
function
testCreationAndPublishingToRecentChanges
(
bool
$userHasBotRight
)
{
$performer
=
$this
->
getTestUser
()->
getUser
();
$target
=
$this
->
getExistingTestPage
()->
getTitle
();
$logParams
=
[
'4::test'
=>
'testabc1234'
,
'testing'
=>
'testingabc'
];
// Give the performer the bot right temporarily to allow testing that ::publish
// (if specified by this test case), so that we can test that ::publish sets the RecentChanges bot flag
// outside any DeferredUpdates to prevent issues such as described in T387659.
if
(
$userHasBotRight
)
{
$userRightScope
=
$this
->
getServiceContainer
()->
getPermissionManager
()
->
addTemporaryUserRights
(
$performer
,
'bot'
);
}
// Create a log entry and publish it to just RecentChanges
$logEntry
=
new
ManualLogEntry
(
'phpunit'
,
'test'
);
$logEntry
->
setPerformer
(
$performer
);
$logEntry
->
setTarget
(
$target
);
$logEntry
->
setComment
(
'A very good reason'
);
$logEntry
->
setTimestamp
(
'20300405060708'
);
$logEntry
->
setParameters
(
$logParams
);
$logEntry
->
setDeleted
(
LogPage
::
DELETED_ACTION
);
$logId
=
$logEntry
->
insert
();
$logEntry
->
publish
(
$logId
,
'rc'
);
ScopedCallback
::
consume
(
$userRightScope
);
// Actually cause the writes to RecentChanges, as they are queued using DeferredUpdates.
DeferredUpdates
::
doUpdates
();
// Assert that the log entry exists and that it matches what we provided above.
$this
->
newSelectQueryBuilder
()
->
select
(
[
'log_type'
,
'log_action'
,
'log_timestamp'
,
'log_namespace'
,
'log_title'
,
'log_deleted'
,
'log_actor'
,
'comment_text'
]
)
->
from
(
'logging'
)
->
join
(
'comment'
,
null
,
'log_comment_id=comment_id'
)
->
where
(
[
'log_id'
=>
$logId
]
)
->
caller
(
__METHOD__
)
->
assertRowValue
(
[
'phpunit'
,
'test'
,
$this
->
getDb
()->
timestamp
(
'20300405060708'
),
$target
->
getNamespace
(),
$target
->
getDBkey
(),
LogPage
::
DELETED_ACTION
,
$performer
->
getActorId
(),
'A very good reason'
,
]
);
$this
->
assertArrayEquals
(
$logParams
,
LogEntryBase
::
extractParams
(
$this
->
newSelectQueryBuilder
()
->
select
(
'log_params'
)
->
from
(
'logging'
)
->
caller
(
__METHOD__
)
->
where
(
[
'log_id'
=>
$logId
]
)
->
fetchField
()
),
false
,
true
);
// Assert that the entry was sent to RecentChanges
$actualRecentChangeObject
=
RecentChange
::
newFromConds
(
[
'rc_logid'
=>
$logId
]
);
$actualRecentChangeTitle
=
$actualRecentChangeObject
->
getPage
();
$this
->
assertNotNull
(
$actualRecentChangeTitle
);
$this
->
assertTrue
(
$target
->
isSamePageAs
(
$actualRecentChangeTitle
)
);
$this
->
assertTrue
(
$performer
->
equals
(
$actualRecentChangeObject
->
getPerformerIdentity
()
)
);
$this
->
assertArrayContains
(
[
// DB stores booleans as integers and we get back that integer as a string.
'rc_bot'
=>
(
string
)
intval
(
$userHasBotRight
),
'rc_log_type'
=>
'phpunit'
,
'rc_log_action'
=>
'test'
,
// The RecentChanges object stores the timestamp as TS_MW, even if DB stores it in a different
// format.
'rc_timestamp'
=>
'20300405060708'
,
'rc_deleted'
=>
(
string
)
LogPage
::
DELETED_ACTION
,
],
$actualRecentChangeObject
->
getAttributes
()
);
}
public
static
function
provideCreationAndPublishingToRecentChanges
()
{
return
[
'User does not have bot right'
=>
[
false
],
'User temporarily has the bot right'
=>
[
true
],
];
}
}
File Metadata
Details
Attached
Mime Type
text/x-php
Expires
Aug 15 2026, 02:56 (13 w, 20 h ago)
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
62/5f/6d2ddbb7734da1da06e0a481f0e8
Default Alt Text
ManualLogEntryTest.php (3 KB)
Attached To
Mode
rMWPROD MediaWiki Production
Attached
Detach File
Event Timeline
Log In to Comment