composer: * mediawiki/mediawiki-codesniffer: 36.0.0 → 37.0.0 The following sniffs now pass and were enabled: * Generic.ControlStructures.InlineControlStructure * MediaWiki.PHPUnit.AssertCount.NotUsed npm: * svgo: 2.3.0 → 2.3.1 * https://npmjs.com/advisories/1754 (CVE-2021-33587) Change-Id: I2a9bbee2fecbf7259876d335f565ece4b3622426
169 lines
4.1 KiB
PHP
169 lines
4.1 KiB
PHP
<?php
|
|
|
|
namespace MediaWiki\Tests\Storage;
|
|
|
|
use BagOStuff;
|
|
use FormatJson;
|
|
use IDatabase;
|
|
use MediaWiki\Config\ServiceOptions;
|
|
use MediaWiki\Storage\EditResult;
|
|
use MediaWiki\Storage\EditResultCache;
|
|
use MediaWikiUnitTestCase;
|
|
use Wikimedia\Rdbms\ILoadBalancer;
|
|
|
|
/**
|
|
* @covers \MediaWiki\Storage\EditResultCache
|
|
*/
|
|
class EditResultCacheTest extends MediaWikiUnitTestCase {
|
|
|
|
private const DUMMY_KEY = 'wiki:dummy:key';
|
|
|
|
/**
|
|
* Returns an EditResult for testing.
|
|
*
|
|
* @return EditResult
|
|
*/
|
|
private function getEditResult(): EditResult {
|
|
return new EditResult(
|
|
false,
|
|
100,
|
|
EditResult::REVERT_ROLLBACK,
|
|
123,
|
|
125,
|
|
true,
|
|
false,
|
|
[ 'mw-rollback' ]
|
|
);
|
|
}
|
|
|
|
/**
|
|
* @covers \MediaWiki\Storage\EditResultCache::set
|
|
*/
|
|
public function testSet() {
|
|
$editResult = $this->getEditResult();
|
|
|
|
$mainStash = $this->createMock( BagOStuff::class );
|
|
$mainStash->expects( $this->once() )
|
|
->method( 'set' )
|
|
->with(
|
|
self::DUMMY_KEY,
|
|
FormatJson::encode( $editResult )
|
|
)
|
|
->willReturn( true );
|
|
$mainStash->expects( $this->once() )
|
|
->method( 'makeKey' )
|
|
->willReturn( self::DUMMY_KEY );
|
|
|
|
$erCache = new EditResultCache(
|
|
$mainStash,
|
|
$this->createNoOpMock( ILoadBalancer::class ),
|
|
new ServiceOptions(
|
|
EditResultCache::CONSTRUCTOR_OPTIONS,
|
|
[ 'RCMaxAge' => BagOStuff::TTL_MONTH ]
|
|
)
|
|
);
|
|
|
|
$result = $erCache->set( 123, $editResult );
|
|
$this->assertTrue( $result, 'EditResultCache::set()' );
|
|
}
|
|
|
|
/**
|
|
* @covers \MediaWiki\Storage\EditResultCache::get
|
|
*/
|
|
public function testGetFromStash() {
|
|
$editResult = $this->getEditResult();
|
|
|
|
$mainStash = $this->createMock( BagOStuff::class );
|
|
$mainStash->expects( $this->once() )
|
|
->method( 'get' )
|
|
->with( self::DUMMY_KEY )
|
|
->willReturn( FormatJson::encode( $editResult ) );
|
|
$mainStash->expects( $this->once() )
|
|
->method( 'makeKey' )
|
|
->willReturn( self::DUMMY_KEY );
|
|
|
|
$erCache = new EditResultCache(
|
|
$mainStash,
|
|
$this->createNoOpMock( ILoadBalancer::class ),
|
|
new ServiceOptions(
|
|
EditResultCache::CONSTRUCTOR_OPTIONS,
|
|
[ 'RCMaxAge' => BagOStuff::TTL_MONTH ]
|
|
)
|
|
);
|
|
$res = $erCache->get( 126 );
|
|
|
|
$this->assertEquals( $editResult, $res, 'Correct EditResult is returned' );
|
|
}
|
|
|
|
/**
|
|
* @covers \MediaWiki\Storage\EditResultCache::get
|
|
*/
|
|
public function testGetFromRevertTag() {
|
|
$editResult = $this->getEditResult();
|
|
|
|
$mainStash = $this->createMock( BagOStuff::class );
|
|
$mainStash->expects( $this->once() )
|
|
->method( 'get' )
|
|
->with( self::DUMMY_KEY )
|
|
->willReturn( false );
|
|
$mainStash->expects( $this->once() )
|
|
->method( 'makeKey' )
|
|
->willReturn( self::DUMMY_KEY );
|
|
|
|
$dbr = $this->createMock( IDatabase::class );
|
|
$dbr->expects( $this->once() )
|
|
->method( 'selectField' )
|
|
->willReturn( FormatJson::encode( $editResult ) );
|
|
$loadBalancer = $this->createMock( ILoadBalancer::class );
|
|
$loadBalancer->expects( $this->once() )
|
|
->method( 'getConnection' )
|
|
->willReturn( $dbr );
|
|
|
|
$erCache = new EditResultCache(
|
|
$mainStash,
|
|
$loadBalancer,
|
|
new ServiceOptions(
|
|
EditResultCache::CONSTRUCTOR_OPTIONS,
|
|
[ 'RCMaxAge' => BagOStuff::TTL_MONTH ]
|
|
)
|
|
);
|
|
$res = $erCache->get( 126 );
|
|
|
|
$this->assertEquals( $editResult, $res, 'Correct EditResult is returned' );
|
|
}
|
|
|
|
/**
|
|
* @covers \MediaWiki\Storage\EditResultCache::get
|
|
*/
|
|
public function testGetMissingEntry() {
|
|
$mainStash = $this->createMock( BagOStuff::class );
|
|
$mainStash->expects( $this->once() )
|
|
->method( 'get' )
|
|
->with( self::DUMMY_KEY )
|
|
->willReturn( false );
|
|
$mainStash->expects( $this->once() )
|
|
->method( 'makeKey' )
|
|
->willReturn( self::DUMMY_KEY );
|
|
|
|
$dbr = $this->createMock( IDatabase::class );
|
|
$dbr->expects( $this->once() )
|
|
->method( 'selectField' )
|
|
->willReturn( false );
|
|
$loadBalancer = $this->createMock( ILoadBalancer::class );
|
|
$loadBalancer->expects( $this->once() )
|
|
->method( 'getConnection' )
|
|
->willReturn( $dbr );
|
|
|
|
$erCache = new EditResultCache(
|
|
$mainStash,
|
|
$loadBalancer,
|
|
new ServiceOptions(
|
|
EditResultCache::CONSTRUCTOR_OPTIONS,
|
|
[ 'RCMaxAge' => BagOStuff::TTL_MONTH ]
|
|
)
|
|
);
|
|
$res = $erCache->get( 126 );
|
|
|
|
$this->assertNull( $res, 'Null is returned' );
|
|
}
|
|
}
|