Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
94.74% covered (success)
94.74%
36 / 38
50.00% covered (danger)
50.00%
1 / 2
CRAP
0.00% covered (danger)
0.00%
0 / 1
MakeTestEdits
94.74% covered (success)
94.74%
36 / 38
50.00% covered (danger)
50.00%
1 / 2
9.01
0.00% covered (danger)
0.00%
0 / 1
 __construct
100.00% covered (success)
100.00%
7 / 7
100.00% covered (success)
100.00%
1 / 1
1
 execute
93.55% covered (success)
93.55%
29 / 31
0.00% covered (danger)
0.00%
0 / 1
8.02
1<?php
2/**
3 * Make test edits for a user to populate a test wiki
4 *
5 * @license GPL-2.0-or-later
6 * @file
7 * @ingroup Maintenance
8 */
9// @codeCoverageIgnoreStart
10require_once __DIR__ . '/Maintenance.php';
11// @codeCoverageIgnoreEnd
12
13use MediaWiki\Content\ContentHandler;
14use MediaWiki\Maintenance\Maintenance;
15use MediaWiki\Title\Title;
16use MediaWiki\User\User;
17
18/**
19 * Make test edits for a user to populate a test wiki
20 *
21 * @ingroup Maintenance
22 */
23class MakeTestEdits extends Maintenance {
24    public function __construct() {
25        parent::__construct();
26        $this->addDescription( 'Make test edits for a user' );
27        $this->addOption( 'user', 'User name', true, true );
28        $this->addOption( 'count', 'Number of edits', true, true );
29        $this->addOption( 'namespace', 'Namespace number', false, true );
30        $this->addOption( 'watchlist', 'Add edited pages to user watchlist', false, false );
31        $this->setBatchSize( 100 );
32    }
33
34    public function execute() {
35        $user = User::newFromName( $this->getOption( 'user' ) );
36        if ( !$user->isRegistered() ) {
37            $this->fatalError( "No such user exists." );
38        }
39
40        $count = (int)$this->getOption( 'count' );
41        $namespace = (int)$this->getOption( 'namespace', 0 );
42        $batchSize = $this->getBatchSize();
43        $services = $this->getServiceContainer();
44        $wikiPageFactory = $services->getWikiPageFactory();
45        $watchedItemStore = $services->getWatchedItemStore();
46
47        /** @var iterable<Title[]> $titleBatches */
48        $titleBatches = $this->newBatchIterator(
49            static function () use ( $namespace, $count ) {
50                for ( $i = 0; $i < $count; ++$i ) {
51                    yield Title::makeTitleSafe( $namespace, "Page " . wfRandomString( 2 ) );
52                }
53            }
54        );
55
56        $watchlist = $this->getOption( 'watchlist' );
57        foreach ( $titleBatches as $titleBatch ) {
58            $editedTitles = $watchlist ? [] : null;
59            $this->beginTransactionRound( __METHOD__ );
60            foreach ( $titleBatch as $title ) {
61                $page = $wikiPageFactory->newFromTitle( $title );
62                $content = ContentHandler::makeContent( wfRandomString(), $title );
63                $summary = "Change " . wfRandomString( 6 );
64
65                $page->doUserEditContent( $content, $user, $summary );
66
67                // Collect titles for watchlist if requested
68                if ( $watchlist ) {
69                    $editedTitles[] = $title;
70                }
71
72                $this->output( "Edited $title\n" );
73            }
74            if ( $editedTitles ) {
75                $watchedItemStore->addWatchBatchForUser( $user, $editedTitles );
76            }
77            $this->commitTransactionRound( __METHOD__ );
78        }
79
80        $this->output( "Done\n" );
81    }
82}
83
84// @codeCoverageIgnoreStart
85$maintClass = MakeTestEdits::class;
86require_once RUN_MAINTENANCE_IF_MAIN;
87// @codeCoverageIgnoreEnd