diff --git a/src/Setup.php b/src/Setup.php index c5ea59d..7a58f66 100644 --- a/src/Setup.php +++ b/src/Setup.php @@ -115,7 +115,7 @@ private function registerCacheInvalidator() { */ $this->hookContainer->register( 'PageDeleteComplete', function( $page ) use ( $extension ) { if ( $extension->getSettings()->get( Settings::AUTO_REFRESH ) ) { - $extension->getCacheInvalidator()->invalidateCaches( $page->getTitle() ); + $extension->getCacheInvalidator()->invalidateCaches( Title::newFromPageIdentity( $page ) ); } } ); diff --git a/tests/Unit/SubPageList/SetupTest.php b/tests/Unit/SubPageList/SetupTest.php index c984d04..198da57 100644 --- a/tests/Unit/SubPageList/SetupTest.php +++ b/tests/Unit/SubPageList/SetupTest.php @@ -2,8 +2,14 @@ namespace Tests\Unit\SubPageList; +use MediaWiki\HookContainer\HookContainer; use MediaWiki\MediaWikiServices; +use MediaWiki\Page\ProperPageIdentity; +use MediaWiki\Title\Title; use PHPUnit\Framework\TestCase; +use SubPageList\CacheInvalidator; +use SubPageList\Extension; +use SubPageList\Settings; use SubPageList\Setup; /** @@ -32,6 +38,43 @@ public function testRun() { $this->assertTrue( $hookContainer->isRegistered( 'ParserFirstCallInit' ) ); } + public function testDeletedPageInvalidatesCache() { + $registeredCallbacks = []; + + $hookContainer = $this->createMock( HookContainer::class ); + $hookContainer->method( 'register' ) + ->willReturnCallback( function ( $name, $callback ) use ( &$registeredCallbacks ) { + $registeredCallbacks[$name] = $callback; + } ); + + $cacheInvalidator = new class implements CacheInvalidator { + public ?Title $invalidatedTitle = null; + + public function invalidateCaches( Title $title ): void { + $this->invalidatedTitle = $title; + } + }; + + $extension = $this->createMock( Extension::class ); + $extension->method( 'getSettings' ) + ->willReturn( new Settings( [ Settings::AUTO_REFRESH => true ] ) ); + $extension->method( 'getCacheInvalidator' ) + ->willReturn( $cacheInvalidator ); + + $setup = new Setup( $extension, $hookContainer, __DIR__ . '/..' ); + $setup->run(); + + $page = $this->createMock( ProperPageIdentity::class ); + $page->method( 'getNamespace' )->willReturn( NS_MAIN ); + $page->method( 'getDBkey' )->willReturn( 'TestPage' ); + + $this->assertArrayHasKey( 'PageDeleteComplete', $registeredCallbacks ); + $registeredCallbacks['PageDeleteComplete']( $page ); + + $this->assertSame( 'TestPage', $cacheInvalidator->invalidatedTitle->getDBkey() ); + $this->assertSame( NS_MAIN, $cacheInvalidator->invalidatedTitle->getNamespace() ); + } + private function newExtension() { return new \SubPageList\Extension( \SubPageList\Settings::newFromGlobals( $GLOBALS ) ); }