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
);
35 'log_type' => 'patrol',
36 'log_action' => 'patrol',
39 'log_timestamp' => $dbw->timestamp( '20041223210426' ),
40 'log_namespace' => NS_MAIN
,
41 'log_title' => 'DeleteAutoPatrolLogs',
46 'log_type' => 'patrol',
47 'log_action' => 'autopatrol',
50 'log_timestamp' => $dbw->timestamp( '20051223210426' ),
51 'log_namespace' => NS_MAIN
,
52 'log_title' => 'DeleteAutoPatrolLogs',
57 'log_type' => 'block',
58 'log_action' => 'block',
61 'log_timestamp' => $dbw->timestamp( '20061223210426' ),
62 'log_namespace' => NS_MAIN
,
63 'log_title' => 'DeleteAutoPatrolLogs',
66 // Very old/ invalid patrol
68 'log_type' => 'patrol',
69 'log_action' => 'patrol',
71 'log_params' => 'nanana',
72 'log_timestamp' => $dbw->timestamp( '20061223210426' ),
73 'log_namespace' => NS_MAIN
,
74 'log_title' => 'DeleteAutoPatrolLogs',
79 'log_type' => 'patrol',
80 'log_action' => 'autopatrol',
83 'log_timestamp' => $dbw->timestamp( '20071223210426' ),
84 'log_namespace' => NS_MAIN
,
85 'log_title' => 'DeleteAutoPatrolLogs',
88 // Autopatrol #3 old way
90 'log_type' => 'patrol',
91 'log_action' => 'patrol',
93 'log_params' => serialize( [ '6::auto' => true ] ),
94 'log_timestamp' => $dbw->timestamp( '20081223210426' ),
95 'log_namespace' => NS_MAIN
,
96 'log_title' => 'DeleteAutoPatrolLogs',
99 // Manual patrol #2 old way
101 'log_type' => 'patrol',
102 'log_action' => 'patrol',
104 'log_params' => serialize( [ '6::auto' => false ] ),
105 'log_timestamp' => $dbw->timestamp( '20091223210426' ),
106 'log_namespace' => NS_MAIN
,
107 'log_title' => 'DeleteAutoPatrolLogs',
110 // Autopatrol #4 very old way
112 'log_type' => 'patrol',
113 'log_action' => 'patrol',
115 'log_params' => "9227851\n0\n1",
116 'log_timestamp' => $dbw->timestamp( '20081223210426' ),
117 'log_namespace' => NS_MAIN
,
118 'log_title' => 'DeleteAutoPatrolLogs',
121 // Manual patrol #3 very old way
123 'log_type' => 'patrol',
124 'log_action' => 'patrol',
126 'log_params' => "9227851\n0\n0",
127 'log_timestamp' => $dbw->timestamp( '20091223210426' ),
128 'log_namespace' => NS_MAIN
,
129 'log_title' => 'DeleteAutoPatrolLogs',
132 $dbw->insert( 'logging', $logs );
135 public function runProvider() {
138 'log_type' => 'patrol',
139 'log_action' => 'patrol',
140 'log_user' => '7251',
143 'log_type' => 'patrol',
144 'log_action' => 'autopatrol',
145 'log_user' => '7252',
148 'log_type' => 'block',
149 'log_action' => 'block',
150 'log_user' => '7253',
153 'log_type' => 'patrol',
154 'log_action' => 'patrol',
155 'log_user' => '7253',
158 'log_type' => 'patrol',
159 'log_action' => 'autopatrol',
160 'log_user' => '7254',
163 'log_type' => 'patrol',
164 'log_action' => 'patrol',
165 'log_user' => '7255',
168 'log_type' => 'patrol',
169 'log_action' => 'patrol',
170 'log_user' => '7256',
173 'log_type' => 'patrol',
174 'log_action' => 'patrol',
175 'log_user' => '7257',
178 'log_type' => 'patrol',
179 'log_action' => 'patrol',
180 'log_user' => '7258',
187 [ '--sleep', '0', '--dry-run', '-q' ]
199 [ '--sleep', '0', '-q' ]
201 'run with before' => [
212 [ '--sleep', '0', '--before', '20060123210426', '-q' ]
214 'run with check-old' => [
224 [ '--sleep', '0', '--check-old', '-q' ]
228 foreach ( $cases as $key => $case ) {
229 yield
$key . '-batch-size-1' => [
231 array_merge( $case[1], [ '--batch-size', '1' ] )
233 yield
$key . '-batch-size-5' => [
235 array_merge( $case[1], [ '--batch-size', '5' ] )
237 yield
$key . '-batch-size-1000' => [
239 array_merge( $case[1], [ '--batch-size', '1000' ] )
245 * @dataProvider runProvider
247 public function testRun( $expected, $args ) {
248 // FIXME: fails under postgres
249 $this->markTestSkippedIfDbType( 'postgres' );
251 $this->maintenance
->loadWithArgv( $args );
253 $this->maintenance
->execute();
255 $remainingLogs = wfGetDB( DB_REPLICA
)->select(
257 [ 'log_type', 'log_action', 'log_user' ],
260 [ 'ORDER BY' => 'log_id' ]
263 $this->assertEquals( $expected, iterator_to_array( $remainingLogs, false ) );
266 public function testFromId() {
267 $fromId = wfGetDB( DB_REPLICA
)->selectField(
270 [ 'log_params' => 'nanana' ]
273 $this->maintenance
->loadWithArgv( [ '--sleep', '0', '--from-id', strval( $fromId ), '-q' ] );
275 $this->maintenance
->execute();
277 $remainingLogs = wfGetDB( DB_REPLICA
)->select(
279 [ 'log_type', 'log_action', 'log_user' ],
282 [ 'ORDER BY' => 'log_id' ]
286 'log_type' => 'patrol',
287 'log_action' => 'autopatrol',
288 'log_user' => '7254',
291 'log_type' => 'patrol',
292 'log_action' => 'autopatrol',
293 'log_user' => '7252',
296 $remainingLogs = array_map(
300 iterator_to_array( $remainingLogs, false )
303 $this->assertNotContains( $deleted, $remainingLogs );
304 $this->assertContains( $notDeleted, $remainingLogs );