Fix 'Tags' padding to keep it farther from the edge and document the source of the...
[lhc/web/wiklou.git] / tests / phpunit / maintenance / deleteAutoPatrolLogsTest.php
1 <?php
2
3 namespace MediaWiki\Tests\Maintenance;
4
5 use DeleteAutoPatrolLogs;
6
7 /**
8 * @group Database
9 * @covers DeleteAutoPatrolLogs
10 */
11 class DeleteAutoPatrolLogsTest extends MaintenanceBaseTestCase {
12
13 public function getMaintenanceClass() {
14 return DeleteAutoPatrolLogs::class;
15 }
16
17 public function setUp() {
18 parent::setUp();
19 $this->tablesUsed = [ 'logging' ];
20
21 $this->cleanLoggingTable();
22 $this->insertLoggingData();
23 }
24
25 private function cleanLoggingTable() {
26 wfGetDB( DB_MASTER )->delete( 'logging', '*' );
27 }
28
29 private function insertLoggingData() {
30 $logs = [];
31
32 // Manual patrolling
33 $logs[] = [
34 'log_type' => 'patrol',
35 'log_action' => 'patrol',
36 'log_user' => 7251,
37 'log_params' => '',
38 'log_timestamp' => 20041223210426
39 ];
40
41 // Autopatrol #1
42 $logs[] = [
43 'log_type' => 'patrol',
44 'log_action' => 'autopatrol',
45 'log_user' => 7252,
46 'log_params' => '',
47 'log_timestamp' => 20051223210426
48 ];
49
50 // Block
51 $logs[] = [
52 'log_type' => 'block',
53 'log_action' => 'block',
54 'log_user' => 7253,
55 'log_params' => '',
56 'log_timestamp' => 20061223210426
57 ];
58
59 // Very old/ invalid patrol
60 $logs[] = [
61 'log_type' => 'patrol',
62 'log_action' => 'patrol',
63 'log_user' => 7253,
64 'log_params' => 'nanana',
65 'log_timestamp' => 20061223210426
66 ];
67
68 // Autopatrol #2
69 $logs[] = [
70 'log_type' => 'patrol',
71 'log_action' => 'autopatrol',
72 'log_user' => 7254,
73 'log_params' => '',
74 'log_timestamp' => 20071223210426
75 ];
76
77 // Autopatrol #3 old way
78 $logs[] = [
79 'log_type' => 'patrol',
80 'log_action' => 'patrol',
81 'log_user' => 7255,
82 'log_params' => serialize( [ '6::auto' => true ] ),
83 'log_timestamp' => 20081223210426
84 ];
85
86 // Manual patrol #2 old way
87 $logs[] = [
88 'log_type' => 'patrol',
89 'log_action' => 'patrol',
90 'log_user' => 7256,
91 'log_params' => serialize( [ '6::auto' => false ] ),
92 'log_timestamp' => 20091223210426
93 ];
94
95 // Autopatrol #4 very old way
96 $logs[] = [
97 'log_type' => 'patrol',
98 'log_action' => 'patrol',
99 'log_user' => 7257,
100 'log_params' => "9227851\n0\n1",
101 'log_timestamp' => 20081223210426
102 ];
103
104 // Manual patrol #3 very old way
105 $logs[] = [
106 'log_type' => 'patrol',
107 'log_action' => 'patrol',
108 'log_user' => 7258,
109 'log_params' => "9227851\n0\n0",
110 'log_timestamp' => 20091223210426
111 ];
112
113 wfGetDB( DB_MASTER )->insert( 'logging', $logs );
114 }
115
116 public function runProvider() {
117 $allRows = [
118 (object)[
119 'log_type' => 'patrol',
120 'log_action' => 'patrol',
121 'log_user' => '7251',
122 ],
123 (object)[
124 'log_type' => 'patrol',
125 'log_action' => 'autopatrol',
126 'log_user' => '7252',
127 ],
128 (object)[
129 'log_type' => 'block',
130 'log_action' => 'block',
131 'log_user' => '7253',
132 ],
133 (object)[
134 'log_type' => 'patrol',
135 'log_action' => 'patrol',
136 'log_user' => '7253',
137 ],
138 (object)[
139 'log_type' => 'patrol',
140 'log_action' => 'autopatrol',
141 'log_user' => '7254',
142 ],
143 (object)[
144 'log_type' => 'patrol',
145 'log_action' => 'patrol',
146 'log_user' => '7255',
147 ],
148 (object)[
149 'log_type' => 'patrol',
150 'log_action' => 'patrol',
151 'log_user' => '7256',
152 ],
153 (object)[
154 'log_type' => 'patrol',
155 'log_action' => 'patrol',
156 'log_user' => '7257',
157 ],
158 (object)[
159 'log_type' => 'patrol',
160 'log_action' => 'patrol',
161 'log_user' => '7258',
162 ],
163 ];
164
165 $cases = [
166 'dry run' => [
167 $allRows,
168 [ '--sleep', '0', '--dry-run', '-q' ]
169 ],
170 'basic run' => [
171 [
172 $allRows[0],
173 $allRows[2],
174 $allRows[3],
175 $allRows[5],
176 $allRows[6],
177 $allRows[7],
178 $allRows[8],
179 ],
180 [ '--sleep', '0', '-q' ]
181 ],
182 'run with before' => [
183 [
184 $allRows[0],
185 $allRows[2],
186 $allRows[3],
187 $allRows[4],
188 $allRows[5],
189 $allRows[6],
190 $allRows[7],
191 $allRows[8],
192 ],
193 [ '--sleep', '0', '--before', '20060123210426', '-q' ]
194 ],
195 'run with check-old' => [
196 [
197 $allRows[0],
198 $allRows[1],
199 $allRows[2],
200 $allRows[3],
201 $allRows[4],
202 $allRows[6],
203 $allRows[8],
204 ],
205 [ '--sleep', '0', '--check-old', '-q' ]
206 ],
207 ];
208
209 foreach ( $cases as $key => $case ) {
210 yield $key . '-batch-size-1' => [
211 $case[0],
212 array_merge( $case[1], [ '--batch-size', '1' ] )
213 ];
214 yield $key . '-batch-size-5' => [
215 $case[0],
216 array_merge( $case[1], [ '--batch-size', '5' ] )
217 ];
218 yield $key . '-batch-size-1000' => [
219 $case[0],
220 array_merge( $case[1], [ '--batch-size', '1000' ] )
221 ];
222 }
223 }
224
225 /**
226 * @dataProvider runProvider
227 */
228 public function testRun( $expected, $args ) {
229 $this->maintenance->loadWithArgv( $args );
230
231 $this->maintenance->execute();
232
233 $remainingLogs = wfGetDB( DB_REPLICA )->select(
234 [ 'logging' ],
235 [ 'log_type', 'log_action', 'log_user' ],
236 [],
237 __METHOD__,
238 [ 'ORDER BY' => 'log_id' ]
239 );
240
241 $this->assertEquals( $expected, iterator_to_array( $remainingLogs, false ) );
242 }
243
244 public function testFromId() {
245 $fromId = wfGetDB( DB_REPLICA )->selectField(
246 'logging',
247 'log_id',
248 [ 'log_params' => 'nanana' ]
249 );
250
251 $this->maintenance->loadWithArgv( [ '--sleep', '0', '--from-id', strval( $fromId ), '-q' ] );
252
253 $this->maintenance->execute();
254
255 $remainingLogs = wfGetDB( DB_REPLICA )->select(
256 [ 'logging' ],
257 [ 'log_type', 'log_action', 'log_user' ],
258 [],
259 __METHOD__,
260 [ 'ORDER BY' => 'log_id' ]
261 );
262
263 $deleted = [
264 'log_type' => 'patrol',
265 'log_action' => 'autopatrol',
266 'log_user' => '7254',
267 ];
268 $notDeleted = [
269 'log_type' => 'patrol',
270 'log_action' => 'autopatrol',
271 'log_user' => '7252',
272 ];
273
274 $remainingLogs = array_map(
275 function ( $val ) {
276 return (array)$val;
277 },
278 iterator_to_array( $remainingLogs, false )
279 );
280
281 $this->assertNotContains( $deleted, $remainingLogs );
282 $this->assertContains( $notDeleted, $remainingLogs );
283 }
284
285 }