linkRenderer = MediaWikiServices::getInstance()->getLinkRenderer(); } /** * @covers ::formatValue * @dataProvider formatValueEmptyProvider * @dataProvider formatValueDefaultProvider * @param string $name * @param string $expected */ public function testFormatValue( $name, $expected = null, $row = null ) { // Set the time to now so it does not get off during the test. MWTimestamp::setFakeTime( MWTimestamp::time() ); $value = $name === 'ipb_timestamp' ? MWTimestamp::time() : ''; $expected = $expected ?? MWTimestamp::getInstance()->format( 'H:i, j F Y' ); $row = $row ?: (object)[]; $pager = new BlockListPager( new SpecialPage(), [], $this->linkRenderer ); $wrappedPager = TestingAccessWrapper::newFromObject( $pager ); $wrappedPager->mCurrentRow = $row; $formatted = $pager->formatValue( $name, $value ); $this->assertEquals( $expected, $formatted ); // Reset the time. MWTimestamp::setFakeTime( false ); } /** * Test empty values. */ public function formatValueEmptyProvider() { return [ [ 'test', 'Unable to format test', ], [ 'ipb_timestamp', ], [ 'ipb_expiry', 'infinite
0 minutes left', ], ]; } /** * Test the default row values. */ public function formatValueDefaultProvider() { $row = (object)[ 'ipb_user' => 0, 'ipb_address' => '127.0.0.1', 'ipb_by_text' => 'Admin', 'ipb_create_account' => 1, 'ipb_auto' => 0, 'ipb_anon_only' => 0, 'ipb_create_account' => 1, 'ipb_enable_autoblock' => 1, 'ipb_deleted' => 0, 'ipb_block_email' => 0, 'ipb_allow_usertalk' => 0, 'ipb_sitewide' => 1, ]; return [ [ 'test', 'Unable to format test', $row, ], [ 'ipb_timestamp', null, $row, ], [ 'ipb_expiry', 'infinite
0 minutes left', $row, ], [ 'ipb_by', $row->ipb_by_text, $row, ], [ 'ipb_params', '', $row, ] ]; } /** * @covers ::formatValue * @covers ::getRestrictionListHTML */ public function testFormatValueRestrictions() { $this->setMwGlobals( [ 'wgArticlePath' => '/wiki/$1', 'wgScript' => '/w/index.php', ] ); $pager = new BlockListPager( new SpecialPage(), [], $this->linkRenderer ); $row = (object)[ 'ipb_id' => 0, 'ipb_user' => 0, 'ipb_anon_only' => 0, 'ipb_enable_autoblock' => 0, 'ipb_create_account' => 0, 'ipb_block_email' => 0, 'ipb_allow_usertalk' => 1, 'ipb_sitewide' => 0, ]; $wrappedPager = TestingAccessWrapper::newFromObject( $pager ); $wrappedPager->mCurrentRow = $row; $pageName = 'Victor Frankenstein'; $page = $this->insertPage( $pageName ); $title = $page['title']; $pageId = $page['id']; $restrictions = [ ( new PageRestriction( 0, $pageId ) )->setTitle( $title ), new NamespaceRestriction( 0, NS_MAIN ), // Deleted page. new PageRestriction( 0, 999999 ), ]; $wrappedPager = TestingAccessWrapper::newFromObject( $pager ); $wrappedPager->restrictions = $restrictions; $formatted = $pager->formatValue( 'ipb_params', '' ); $this->assertEquals( '', $formatted ); } /** * @covers ::preprocessResults */ public function testPreprocessResults() { // Test the Link Cache. $linkCache = MediaWikiServices::getInstance()->getLinkCache(); $wrappedlinkCache = TestingAccessWrapper::newFromObject( $linkCache ); $links = [ 'User:127.0.0.1', 'User_talk:127.0.0.1', 'User:Admin', 'User_talk:Admin', ]; foreach ( $links as $link ) { $this->assertNull( $wrappedlinkCache->badLinks->get( $link ) ); } $row = (object)[ 'ipb_address' => '127.0.0.1', 'by_user_name' => 'Admin', 'ipb_sitewide' => 1, 'ipb_timestamp' => $this->db->timestamp( wfTimestamp( TS_MW ) ), ]; $pager = new BlockListPager( new SpecialPage(), [], $this->linkRenderer ); $pager->preprocessResults( [ $row ] ); foreach ( $links as $link ) { $this->assertSame( 1, $wrappedlinkCache->badLinks->get( $link ) ); } // Test Sitewide Blocks. $row = (object)[ 'ipb_address' => '127.0.0.1', 'by_user_name' => 'Admin', 'ipb_sitewide' => 1, ]; $pager = new BlockListPager( new SpecialPage(), [], $this->linkRenderer ); $pager->preprocessResults( [ $row ] ); $this->assertObjectNotHasAttribute( 'ipb_restrictions', $row ); $pageName = 'Victor Frankenstein'; $page = $this->getExistingTestPage( 'Victor Frankenstein' ); $title = $page->getTitle(); $target = '127.0.0.1'; // Test Partial Blocks Blocks. $block = new DatabaseBlock( [ 'address' => $target, 'by' => $this->getTestSysop()->getUser()->getId(), 'reason' => 'Parce que', 'expiry' => $this->db->getInfinity(), 'sitewide' => false, ] ); $block->setRestrictions( [ new PageRestriction( 0, $page->getId() ), ] ); $block->insert(); $result = $this->db->select( 'ipblocks', [ '*' ], [ 'ipb_id' => $block->getId() ] ); $pager = new BlockListPager( new SpecialPage(), [], $this->linkRenderer ); $pager->preprocessResults( $result ); $wrappedPager = TestingAccessWrapper::newFromObject( $pager ); $restrictions = $wrappedPager->restrictions; $this->assertIsArray( $restrictions ); $restriction = $restrictions[0]; $this->assertEquals( $page->getId(), $restriction->getValue() ); $this->assertEquals( $page->getId(), $restriction->getTitle()->getArticleID() ); $this->assertEquals( $title->getDBkey(), $restriction->getTitle()->getDBkey() ); $this->assertEquals( $title->getNamespace(), $restriction->getTitle()->getNamespace() ); // Delete the block and the restrictions. $block->delete(); } }