. * * @file * @ingroup extensions */ require_once 'PopupsContextTestWrapper.php'; use Popups\PopupsContext; use Popups\UserPreferencesChangeHandler; /** * Integration tests for Page Preview hooks * * @group Popups * @coversDefaultClass UserPreferencesChangeHandlerTest */ class UserPreferencesChangeHandlerTest extends MediaWikiTestCase { protected function tearDown() { PopupsContextTestWrapper::resetTestInstance(); parent::tearDown(); } /** * @covers ::handle * @covers ::__construct * @dataProvider provideDataForEventHandling */ public function testEventHandling( $oldOption, $newOption, $expectedMethodCallsCount ) { $contextMock = $this->getMockBuilder( PopupsContextTestWrapper::class ) ->disableOriginalConstructor() ->setMethods( [ 'logUserDisabledPagePreviewsEvent' ] ) ->getMock(); $contextMock->expects( $expectedMethodCallsCount ) ->method( 'logUserDisabledPagePreviewsEvent' ); $user = $this->getMutableTestUser()->getUser(); $user->setOption( PopupsContext::PREVIEWS_OPTIN_PREFERENCE_NAME, $newOption ); $oldOptions = [ PopupsContext::PREVIEWS_OPTIN_PREFERENCE_NAME => $oldOption ]; $listener = new UserPreferencesChangeHandler( $contextMock ); $listener->doPreferencesFormPreSave( $user, $oldOptions ); } public function provideDataForEventHandling() { return [ [ PopupsContext::PREVIEWS_DISABLED, PopupsContext::PREVIEWS_DISABLED, $this->never() ], [ PopupsContext::PREVIEWS_ENABLED, PopupsContext::PREVIEWS_ENABLED, $this->never() ], [ PopupsContext::PREVIEWS_DISABLED, PopupsContext::PREVIEWS_ENABLED, $this->never() ], [ PopupsContext::PREVIEWS_ENABLED, PopupsContext::PREVIEWS_DISABLED, $this->once() ] ]; } }