3 namespace MediaWiki\Tests\Maintenance
;
5 use DeleteAutoPatrolLogs
;
9 * @covers DeleteAutoPatrolLogs
11 class DeleteAutoPatrolLogsTest
extends MaintenanceBaseTestCase
{
13 public function getMaintenanceClass() {
14 return DeleteAutoPatrolLogs
::class;
17 public function setUp() {
19 $this->tablesUsed
= [ 'logging' ];
21 $this->cleanLoggingTable();
22 $this->insertLoggingData();
25 private function cleanLoggingTable() {
26 wfGetDB( DB_MASTER
)->delete( 'logging', '*' );
29 private function insertLoggingData() {
30 $dbw = wfGetDB( DB_MASTER
);
33 $comment = \MediaWiki\MediaWikiServices
::getInstance()->getCommentStore()
34 ->createComment( $dbw, '' );
38 'log_type' => 'patrol',
39 'log_action' => 'patrol',
42 'log_timestamp' => $dbw->timestamp( '20041223210426' ),
43 'log_namespace' => NS_MAIN
,
44 'log_title' => 'DeleteAutoPatrolLogs',
45 'log_comment_id' => $comment->id
,
50 'log_type' => 'patrol',
51 'log_action' => 'autopatrol',
54 'log_timestamp' => $dbw->timestamp( '20051223210426' ),
55 'log_namespace' => NS_MAIN
,
56 'log_title' => 'DeleteAutoPatrolLogs',
57 'log_comment_id' => $comment->id
,
62 'log_type' => 'block',
63 'log_action' => 'block',
66 'log_timestamp' => $dbw->timestamp( '20061223210426' ),
67 'log_namespace' => NS_MAIN
,
68 'log_title' => 'DeleteAutoPatrolLogs',
69 'log_comment_id' => $comment->id
,
72 // Very old/ invalid patrol
74 'log_type' => 'patrol',
75 'log_action' => 'patrol',
77 'log_params' => 'nanana',
78 'log_timestamp' => $dbw->timestamp( '20061223210426' ),
79 'log_namespace' => NS_MAIN
,
80 'log_title' => 'DeleteAutoPatrolLogs',
81 'log_comment_id' => $comment->id
,
86 'log_type' => 'patrol',
87 'log_action' => 'autopatrol',
90 'log_timestamp' => $dbw->timestamp( '20071223210426' ),
91 'log_namespace' => NS_MAIN
,
92 'log_title' => 'DeleteAutoPatrolLogs',
93 'log_comment_id' => $comment->id
,
96 // Autopatrol #3 old way
98 'log_type' => 'patrol',
99 'log_action' => 'patrol',
101 'log_params' => serialize( [ '6::auto' => true ] ),
102 'log_timestamp' => $dbw->timestamp( '20081223210426' ),
103 'log_namespace' => NS_MAIN
,
104 'log_title' => 'DeleteAutoPatrolLogs',
105 'log_comment_id' => $comment->id
,
108 // Manual patrol #2 old way
110 'log_type' => 'patrol',
111 'log_action' => 'patrol',
113 'log_params' => serialize( [ '6::auto' => false ] ),
114 'log_timestamp' => $dbw->timestamp( '20091223210426' ),
115 'log_namespace' => NS_MAIN
,
116 'log_title' => 'DeleteAutoPatrolLogs',
117 'log_comment_id' => $comment->id
,
120 // Autopatrol #4 very old way
122 'log_type' => 'patrol',
123 'log_action' => 'patrol',
125 'log_params' => "9227851\n0\n1",
126 'log_timestamp' => $dbw->timestamp( '20081223210426' ),
127 'log_namespace' => NS_MAIN
,
128 'log_title' => 'DeleteAutoPatrolLogs',
129 'log_comment_id' => $comment->id
,
132 // Manual patrol #3 very old way
134 'log_type' => 'patrol',
135 'log_action' => 'patrol',
137 'log_params' => "9227851\n0\n0",
138 'log_timestamp' => $dbw->timestamp( '20091223210426' ),
139 'log_namespace' => NS_MAIN
,
140 'log_title' => 'DeleteAutoPatrolLogs',
141 'log_comment_id' => $comment->id
,
144 $dbw->insert( 'logging', $logs );
147 public function runProvider() {
150 'log_type' => 'patrol',
151 'log_action' => 'patrol',
152 'log_user' => '7251',
155 'log_type' => 'patrol',
156 'log_action' => 'autopatrol',
157 'log_user' => '7252',
160 'log_type' => 'block',
161 'log_action' => 'block',
162 'log_user' => '7253',
165 'log_type' => 'patrol',
166 'log_action' => 'patrol',
167 'log_user' => '7253',
170 'log_type' => 'patrol',
171 'log_action' => 'autopatrol',
172 'log_user' => '7254',
175 'log_type' => 'patrol',
176 'log_action' => 'patrol',
177 'log_user' => '7255',
180 'log_type' => 'patrol',
181 'log_action' => 'patrol',
182 'log_user' => '7256',
185 'log_type' => 'patrol',
186 'log_action' => 'patrol',
187 'log_user' => '7257',
190 'log_type' => 'patrol',
191 'log_action' => 'patrol',
192 'log_user' => '7258',
199 [ '--sleep', '0', '--dry-run', '-q' ]
211 [ '--sleep', '0', '-q' ]
213 'run with before' => [
224 [ '--sleep', '0', '--before', '20060123210426', '-q' ]
226 'run with check-old' => [
236 [ '--sleep', '0', '--check-old', '-q' ]
240 foreach ( $cases as $key => $case ) {
241 yield
$key . '-batch-size-1' => [
243 array_merge( $case[1], [ '--batch-size', '1' ] )
245 yield
$key . '-batch-size-5' => [
247 array_merge( $case[1], [ '--batch-size', '5' ] )
249 yield
$key . '-batch-size-1000' => [
251 array_merge( $case[1], [ '--batch-size', '1000' ] )
257 * @dataProvider runProvider
259 public function testRun( $expected, $args ) {
260 // FIXME: fails under postgres
261 $this->markTestSkippedIfDbType( 'postgres' );
263 $this->maintenance
->loadWithArgv( $args );
265 $this->maintenance
->execute();
267 $remainingLogs = wfGetDB( DB_REPLICA
)->select(
269 [ 'log_type', 'log_action', 'log_user' ],
272 [ 'ORDER BY' => 'log_id' ]
275 $this->assertEquals( $expected, iterator_to_array( $remainingLogs, false ) );
278 public function testFromId() {
279 $fromId = wfGetDB( DB_REPLICA
)->selectField(
282 [ 'log_params' => 'nanana' ]
285 $this->maintenance
->loadWithArgv( [ '--sleep', '0', '--from-id', strval( $fromId ), '-q' ] );
287 $this->maintenance
->execute();
289 $remainingLogs = wfGetDB( DB_REPLICA
)->select(
291 [ 'log_type', 'log_action', 'log_user' ],
294 [ 'ORDER BY' => 'log_id' ]
298 'log_type' => 'patrol',
299 'log_action' => 'autopatrol',
300 'log_user' => '7254',
303 'log_type' => 'patrol',
304 'log_action' => 'autopatrol',
305 'log_user' => '7252',
308 $remainingLogs = array_map(
312 iterator_to_array( $remainingLogs, false )
315 $this->assertNotContains( $deleted, $remainingLogs );
316 $this->assertContains( $notDeleted, $remainingLogs );