mirror of
https://gerrit.wikimedia.org/r/mediawiki/extensions/AbuseFilter.git
synced 2024-09-23 10:18:22 +00:00
Merge "Clean up test files"
This commit is contained in:
commit
bd309bb220
|
@ -0,0 +1,41 @@
|
|||
<?php
|
||||
|
||||
namespace MediaWiki\Extension\AbuseFilter\Tests\Integration\ChangeTags;
|
||||
|
||||
use MediaWiki\Extension\AbuseFilter\AbuseFilterServices;
|
||||
use MediaWikiIntegrationTestCase;
|
||||
|
||||
/**
|
||||
* @group Test
|
||||
* @group AbuseFilter
|
||||
* @covers \MediaWiki\Extension\AbuseFilter\ChangeTags\ChangeTagValidator
|
||||
*/
|
||||
class ChangeTagValidatorTest extends MediaWikiIntegrationTestCase {
|
||||
/**
|
||||
* @todo Make this a unit test once static methods in ChangeTags are moved to a service
|
||||
* @todo When the above is possible, use mocks to test canAddTagsAccompanyingChange and canCreateTag
|
||||
* @param string $tag The tag to validate
|
||||
* @param string|null $expectedError
|
||||
* @covers \MediaWiki\Extension\AbuseFilter\ChangeTags\ChangeTagValidator::validateTag
|
||||
* @dataProvider provideTags
|
||||
*/
|
||||
public function testValidateTag( string $tag, ?string $expectedError ) {
|
||||
$validator = AbuseFilterServices::getChangeTagValidator();
|
||||
$status = $validator->validateTag( $tag );
|
||||
$actualError = $status->isGood() ? null : $status->getErrors()[0]['message'];
|
||||
$this->assertSame( $expectedError, $actualError );
|
||||
}
|
||||
|
||||
/**
|
||||
* Data provider for testValidateTag
|
||||
* @return array
|
||||
*/
|
||||
public function provideTags() {
|
||||
return [
|
||||
'invalid chars' => [ 'a|b', 'tags-create-invalid-chars' ],
|
||||
'core-reserved tag' => [ 'mw-undo', 'abusefilter-edit-bad-tags' ],
|
||||
'AF-reserved tag' => [ 'abusefilter-condition-limit', 'abusefilter-tag-reserved' ],
|
||||
'valid' => [ 'my_tag', null ],
|
||||
];
|
||||
}
|
||||
}
|
|
@ -1,47 +1,23 @@
|
|||
<?php
|
||||
/**
|
||||
* Tests for validating and saving a filter
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
* http://www.gnu.org/copyleft/gpl.html
|
||||
*
|
||||
* @file
|
||||
*
|
||||
* @license GPL-2.0-or-later
|
||||
*/
|
||||
|
||||
use MediaWiki\Config\ServiceOptions;
|
||||
use MediaWiki\Extension\AbuseFilter\AbuseFilterPermissionManager;
|
||||
namespace MediaWiki\Extension\AbuseFilter\Tests\Integration;
|
||||
|
||||
use MediaWiki\Extension\AbuseFilter\AbuseFilterServices;
|
||||
use MediaWiki\Extension\AbuseFilter\Filter\Filter;
|
||||
use MediaWiki\Extension\AbuseFilter\Filter\Flags;
|
||||
use MediaWiki\Extension\AbuseFilter\Filter\LastEditInfo;
|
||||
use MediaWiki\Extension\AbuseFilter\Filter\MutableFilter;
|
||||
use MediaWiki\Extension\AbuseFilter\Filter\Specs;
|
||||
use MediaWiki\Extension\AbuseFilter\FilterValidator;
|
||||
use MediaWiki\Extension\AbuseFilter\Parser\RuleCheckerFactory;
|
||||
use MediaWikiIntegrationTestCase;
|
||||
use Wikimedia\TestingAccessWrapper;
|
||||
|
||||
/**
|
||||
* @group Test
|
||||
* @group AbuseFilter
|
||||
* @group AbuseFilterSave
|
||||
* @group Database
|
||||
* @todo This can probably be removed in favour of unit-testing a class that handles saving filters.
|
||||
* @covers \MediaWiki\Extension\AbuseFilter\FilterStore
|
||||
*/
|
||||
class AbuseFilterSaveTest extends MediaWikiIntegrationTestCase {
|
||||
class FilterStoreTest extends MediaWikiIntegrationTestCase {
|
||||
|
||||
private const DEFAULT_VALUES = [
|
||||
'rules' => '/**/',
|
||||
|
@ -110,10 +86,6 @@ class AbuseFilterSaveTest extends MediaWikiIntegrationTestCase {
|
|||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers \MediaWiki\Extension\AbuseFilter\FilterStore
|
||||
* @covers \MediaWiki\Extension\AbuseFilter\FilterValidator
|
||||
*/
|
||||
public function testSaveFilter_valid() {
|
||||
$row = [
|
||||
'id' => null,
|
||||
|
@ -137,10 +109,6 @@ class AbuseFilterSaveTest extends MediaWikiIntegrationTestCase {
|
|||
$this->assertContainsOnly( 'int', $value );
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers \MediaWiki\Extension\AbuseFilter\FilterStore
|
||||
* @covers \MediaWiki\Extension\AbuseFilter\FilterValidator
|
||||
*/
|
||||
public function testSaveFilter_invalid() {
|
||||
$row = [
|
||||
'id' => null,
|
||||
|
@ -167,10 +135,6 @@ class AbuseFilterSaveTest extends MediaWikiIntegrationTestCase {
|
|||
$this->assertSame( $expectedError, $actual );
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers \MediaWiki\Extension\AbuseFilter\FilterStore
|
||||
* @covers \MediaWiki\Extension\AbuseFilter\FilterValidator
|
||||
*/
|
||||
public function testSaveFilter_noChange() {
|
||||
$row = [
|
||||
'id' => '1',
|
||||
|
@ -190,69 +154,4 @@ class AbuseFilterSaveTest extends MediaWikiIntegrationTestCase {
|
|||
$this->assertTrue( $status->isGood(), "Got a non-good status: $status" );
|
||||
$this->assertFalse( $status->getValue(), 'Status value should be false' );
|
||||
}
|
||||
|
||||
/**
|
||||
* @todo Make this a unit test in AbuseFilterChangeTagValidatorTest once static methods
|
||||
* in ChangeTags are moved to a service
|
||||
* @todo When the above is possible, use mocks to test canAddTagsAccompanyingChange and canCreateTag
|
||||
* @param string $tag The tag to validate
|
||||
* @param string|null $expectedError
|
||||
* @covers \MediaWiki\Extension\AbuseFilter\ChangeTags\ChangeTagValidator::validateTag
|
||||
* @dataProvider provideTags
|
||||
*/
|
||||
public function testValidateTag( string $tag, ?string $expectedError ) {
|
||||
$validator = AbuseFilterServices::getChangeTagValidator();
|
||||
$status = $validator->validateTag( $tag );
|
||||
$actualError = $status->isGood() ? null : $status->getErrors()[0]['message'];
|
||||
$this->assertSame( $expectedError, $actualError );
|
||||
}
|
||||
|
||||
/**
|
||||
* Data provider for testValidateTag
|
||||
* @return array
|
||||
*/
|
||||
public function provideTags() {
|
||||
return [
|
||||
'invalid chars' => [ 'a|b', 'tags-create-invalid-chars' ],
|
||||
'core-reserved tag' => [ 'mw-undo', 'abusefilter-edit-bad-tags' ],
|
||||
'AF-reserved tag' => [ 'abusefilter-condition-limit', 'abusefilter-tag-reserved' ],
|
||||
'valid' => [ 'my_tag', null ],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @todo Like above, make this a unit test once possible
|
||||
* @param string[] $tags
|
||||
* @param string|null $expected
|
||||
* @covers \MediaWiki\Extension\AbuseFilter\FilterValidator::checkAllTags
|
||||
* @dataProvider provideAllTags
|
||||
*/
|
||||
public function testCheckAllTags( array $tags, ?string $expected ) {
|
||||
$validator = new FilterValidator(
|
||||
AbuseFilterServices::getChangeTagValidator(),
|
||||
$this->createMock( RuleCheckerFactory::class ),
|
||||
$this->createMock( AbuseFilterPermissionManager::class ),
|
||||
new ServiceOptions(
|
||||
FilterValidator::CONSTRUCTOR_OPTIONS,
|
||||
[
|
||||
'AbuseFilterActionRestrictions' => [],
|
||||
'AbuseFilterValidGroups' => [ 'default' ]
|
||||
]
|
||||
)
|
||||
);
|
||||
|
||||
$status = $validator->checkAllTags( $tags );
|
||||
$actualError = $status->isGood() ? null : $status->getErrors()[0]['message'];
|
||||
$this->assertSame( $expected, $actualError );
|
||||
}
|
||||
|
||||
public function provideAllTags() {
|
||||
$providedTagsInvalid = $this->provideTags();
|
||||
$invalidtags = array_column( $providedTagsInvalid, 0 );
|
||||
$allTagErrors = array_filter( array_column( $providedTagsInvalid, 1 ) );
|
||||
$expectedError = reset( $allTagErrors );
|
||||
yield 'invalid' => [ $invalidtags, $expectedError ];
|
||||
|
||||
yield 'valid' => [ [ 'fooooobar', 'foooobaz' ], null ];
|
||||
}
|
||||
}
|
56
tests/phpunit/integration/FilterValidatorTest.php
Normal file
56
tests/phpunit/integration/FilterValidatorTest.php
Normal file
|
@ -0,0 +1,56 @@
|
|||
<?php
|
||||
|
||||
namespace MediaWiki\Extension\AbuseFilter\Tests\Integration;
|
||||
|
||||
use MediaWiki\Config\ServiceOptions;
|
||||
use MediaWiki\Extension\AbuseFilter\AbuseFilterPermissionManager;
|
||||
use MediaWiki\Extension\AbuseFilter\AbuseFilterServices;
|
||||
use MediaWiki\Extension\AbuseFilter\FilterValidator;
|
||||
use MediaWiki\Extension\AbuseFilter\Parser\RuleCheckerFactory;
|
||||
use MediaWikiIntegrationTestCase;
|
||||
|
||||
/**
|
||||
* @group Test
|
||||
* @group AbuseFilter
|
||||
* @coversDefaultClass \MediaWiki\Extension\AbuseFilter\FilterValidator
|
||||
*/
|
||||
class FilterValidatorTest extends MediaWikiIntegrationTestCase {
|
||||
/**
|
||||
* @todo Make this a unit test once static methods in ChangeTags are moved to a service
|
||||
* @param string[] $tags
|
||||
* @param string|null $expected
|
||||
* @covers ::checkAllTags
|
||||
* @dataProvider provideAllTags
|
||||
*/
|
||||
public function testCheckAllTags( array $tags, ?string $expected ) {
|
||||
$validator = new FilterValidator(
|
||||
AbuseFilterServices::getChangeTagValidator(),
|
||||
$this->createMock( RuleCheckerFactory::class ),
|
||||
$this->createMock( AbuseFilterPermissionManager::class ),
|
||||
new ServiceOptions(
|
||||
FilterValidator::CONSTRUCTOR_OPTIONS,
|
||||
[
|
||||
'AbuseFilterActionRestrictions' => [],
|
||||
'AbuseFilterValidGroups' => [ 'default' ]
|
||||
]
|
||||
)
|
||||
);
|
||||
|
||||
$status = $validator->checkAllTags( $tags );
|
||||
$actualError = $status->isGood() ? null : $status->getErrors()[0]['message'];
|
||||
$this->assertSame( $expected, $actualError );
|
||||
}
|
||||
|
||||
public function provideAllTags() {
|
||||
$invalidTags = [
|
||||
'a|b',
|
||||
'mw-undo',
|
||||
'abusefilter-condition-limit',
|
||||
'valid_tag',
|
||||
];
|
||||
$firstTagError = 'tags-create-invalid-chars';
|
||||
yield 'invalid' => [ $invalidTags, $firstTagError ];
|
||||
|
||||
yield 'valid' => [ [ 'fooooobar', 'foooobaz' ], null ];
|
||||
}
|
||||
}
|
|
@ -1,5 +1,8 @@
|
|||
<?php
|
||||
|
||||
namespace MediaWiki\Extension\AbuseFilter\Tests\Unit\Consequences\Consequence;
|
||||
|
||||
use ConsequenceGetMessageTestTrait;
|
||||
use MediaWiki\Block\BlockUser;
|
||||
use MediaWiki\Block\BlockUserFactory;
|
||||
use MediaWiki\Block\DatabaseBlock;
|
||||
|
@ -9,14 +12,16 @@ use MediaWiki\Extension\AbuseFilter\Consequences\Parameters;
|
|||
use MediaWiki\Extension\AbuseFilter\FilterUser;
|
||||
use MediaWiki\User\UserIdentity;
|
||||
use MediaWiki\User\UserIdentityValue;
|
||||
use MediaWikiUnitTestCase;
|
||||
use MessageLocalizer;
|
||||
use Psr\Log\NullLogger;
|
||||
use Status;
|
||||
|
||||
/**
|
||||
* @coversDefaultClass \MediaWiki\Extension\AbuseFilter\Consequences\Consequence\Block
|
||||
* @covers \MediaWiki\Extension\AbuseFilter\Consequences\Consequence\BlockingConsequence
|
||||
* @todo Make this a unit test once T266409 is resolved
|
||||
*/
|
||||
class AbuseFilterBlockTest extends MediaWikiIntegrationTestCase {
|
||||
class BlockTest extends MediaWikiUnitTestCase {
|
||||
use ConsequenceGetMessageTestTrait;
|
||||
|
||||
private function getMsgLocalizer(): MessageLocalizer {
|
||||
|
@ -116,10 +121,14 @@ class AbuseFilterBlockTest extends MediaWikiIntegrationTestCase {
|
|||
public function provideRevert() {
|
||||
yield 'no block to revert' => [ null, null, false ];
|
||||
|
||||
$randomUser = new UserIdentityValue( 1234, 'Some other user' );
|
||||
yield 'not blocked by AF user' => [ new DatabaseBlock( [ 'by' => $randomUser ] ), null, false ];
|
||||
$filterUserIdentity = $this->getFilterUser()->getUserIdentity();
|
||||
|
||||
$blockByFilter = new DatabaseBlock( [ 'by' => $this->getFilterUser()->getUserIdentity() ] );
|
||||
$notAFBlock = $this->createMock( DatabaseBlock::class );
|
||||
$notAFBlock->method( 'getBy' )->willReturn( $filterUserIdentity->getId() + 1 );
|
||||
yield 'not blocked by AF user' => [ $notAFBlock, null, false ];
|
||||
|
||||
$blockByFilter = $this->createMock( DatabaseBlock::class );
|
||||
$blockByFilter->method( 'getBy' )->willReturn( $filterUserIdentity->getId() );
|
||||
$failBlockStore = $this->createMock( DatabaseBlockStore::class );
|
||||
$failBlockStore->expects( $this->once() )->method( 'deleteBlock' )->willReturn( false );
|
||||
yield 'cannot delete block' => [ $blockByFilter, $failBlockStore, false ];
|
|
@ -1,18 +1,23 @@
|
|||
<?php
|
||||
|
||||
namespace MediaWiki\Extension\AbuseFilter\Tests\Unit\Consequences\Consequence;
|
||||
|
||||
use ConsequenceGetMessageTestTrait;
|
||||
use MediaWiki\Block\BlockUser;
|
||||
use MediaWiki\Block\BlockUserFactory;
|
||||
use MediaWiki\Extension\AbuseFilter\Consequences\Consequence\RangeBlock;
|
||||
use MediaWiki\Extension\AbuseFilter\Consequences\Parameters;
|
||||
use MediaWiki\Extension\AbuseFilter\FilterUser;
|
||||
use MediaWikiUnitTestCase;
|
||||
use MessageLocalizer;
|
||||
use Psr\Log\NullLogger;
|
||||
use Status;
|
||||
|
||||
/**
|
||||
* @coversDefaultClass \MediaWiki\Extension\AbuseFilter\Consequences\Consequence\RangeBlock
|
||||
* @covers \MediaWiki\Extension\AbuseFilter\Consequences\Consequence\BlockingConsequence
|
||||
* @todo Make this a unit test once T266409 is resolved
|
||||
*/
|
||||
class RangeBlockTest extends MediaWikiIntegrationTestCase {
|
||||
class RangeBlockTest extends MediaWikiUnitTestCase {
|
||||
use ConsequenceGetMessageTestTrait;
|
||||
|
||||
private const CIDR_LIMIT = [
|
Loading…
Reference in a new issue