jenkins-bot has submitted this change and it was merged.

Change subject: Add NewsletterTablePagerTest
......................................................................


Add NewsletterTablePagerTest

Looks like TablePager classes are
just about testable.....

Change-Id: Ie5c585105da6d37a64c116cdfdee32ce2bbf3017
---
M includes/specials/pagers/NewsletterManageTablePager.php
M includes/specials/pagers/NewsletterTablePager.php
A tests/specials/pagers/NewsletterTablePagerTest.php
3 files changed, 126 insertions(+), 0 deletions(-)

Approvals:
  01tonythomas: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/includes/specials/pagers/NewsletterManageTablePager.php 
b/includes/specials/pagers/NewsletterManageTablePager.php
index 7a8c4b1..8e99a24 100644
--- a/includes/specials/pagers/NewsletterManageTablePager.php
+++ b/includes/specials/pagers/NewsletterManageTablePager.php
@@ -11,6 +11,13 @@
         */
        private $fieldNames = null;
 
+       public function __construct( IContextSource $context = null, IDatabase 
$readDb = null ) {
+               if ( $readDb !== null ) {
+                       $this->mDb = $readDb;
+               }
+               parent::__construct( $context );
+       }
+
        public function getFieldNames() {
                if ( $this->fieldNames === null ) {
                        $this->fieldNames = array(
diff --git a/includes/specials/pagers/NewsletterTablePager.php 
b/includes/specials/pagers/NewsletterTablePager.php
index fab47ff..fecc757 100644
--- a/includes/specials/pagers/NewsletterTablePager.php
+++ b/includes/specials/pagers/NewsletterTablePager.php
@@ -11,6 +11,13 @@
         */
        private $fieldNames = null;
 
+       public function __construct( IContextSource $context = null, IDatabase 
$readDb = null ) {
+               if ( $readDb !== null ) {
+                       $this->mDb = $readDb;
+               }
+               parent::__construct( $context );
+       }
+
        public function getFieldNames() {
                if ( $this->fieldNames === null ) {
                        $this->fieldNames = array(
diff --git a/tests/specials/pagers/NewsletterTablePagerTest.php 
b/tests/specials/pagers/NewsletterTablePagerTest.php
new file mode 100644
index 0000000..0a9203e
--- /dev/null
+++ b/tests/specials/pagers/NewsletterTablePagerTest.php
@@ -0,0 +1,112 @@
+<?php
+
+class NewsletterTablePagerTest extends PHPUnit_Framework_TestCase {
+
+       private $mockSeekCounter;
+
+       /**
+        * @param stdClass[] $resultObjects
+        *
+        * @return PHPUnit_Framework_MockObject_MockObject|IDatabase
+        */
+       private function getMockDatabase( array $resultObjects ) {
+               $testCase = $this;
+               $mockResult = $this->getMockBuilder( 'ResultWrapper' )
+                       ->disableOriginalConstructor()
+                       ->getMock();
+               $mockResult->expects( $this->atLeastOnce() )
+                       ->method( 'numRows' )
+                       ->will( $this->returnValue( count( $resultObjects ) ) );
+               $mockResult->expects( $this->any() )
+                       ->method( 'seek' )
+                       ->will( $this->returnCallback( function ( $seekTo ) use 
( $testCase ) {
+                               $testCase->mockSeekCounter = $seekTo;
+                       } ) );
+               $mockResult->expects( $this->any() )
+                       ->method( 'fetchObject' )
+                       ->will( $this->returnCallback( function () use ( 
$testCase, $resultObjects ) {
+                               if ( array_key_exists( 
$testCase->mockSeekCounter, $resultObjects ) ) {
+                                       $obj = 
$resultObjects[$testCase->mockSeekCounter];
+                                       $testCase->mockSeekCounter =+ 1;
+                                       return $obj;
+                               }
+                               return false;
+                       } ) );
+               $mockDb = $this->getMock( 'IDatabase' );
+               $mockDb->expects( $this->atLeastOnce() )
+                       ->method( 'select' )
+                       ->will( $this->returnValue( $mockResult ) );
+               return $mockDb;
+       }
+
+       private function arrayToObject( array $array ) {
+               $obj = new stdClass();
+               foreach ( $array as $key => $value ) {
+                       $obj->$key = $value;
+               }
+               return $obj;
+       }
+
+       private function getRowObject( $id, $name, $desc, $subscribers, 
$currentUserSubscribed ) {
+               return $this->arrayToObject(
+                       array(
+                               'nl_id' => $id,
+                               'nl_name' => $name,
+                               'nl_desc' => $desc,
+                               'subscribers' => $subscribers,
+                               'current_user_subscribed' => 
$currentUserSubscribed,
+                       )
+               );
+       }
+
+       public function provideTestTablePager() {
+               $entryOneStrings = array(
+                       '<td class="TablePager_col_nl_name"><a 
href="#">Foo</a></td>',
+                       '<td class="TablePager_col_nl_desc">Bar</td>',
+                       '<td class="TablePager_col_subscriber_count"><input 
readonly="" id="newsletter-1" value="12" /></td>',
+                       '<input type="radio" name="nl_id-1" value="subscribe" 
checked="" />Yes',
+                       '<input type="radio" name="nl_id-1" value="unsubscribe" 
/>No',
+               );
+               $entryTwoStrings = array(
+                       '<td class="TablePager_col_nl_name"><a 
href="#">SecondName</a></td>',
+                       '<td class="TablePager_col_nl_desc">SecondDesc</td>',
+                       '<td class="TablePager_col_subscriber_count"><input 
readonly="" id="newsletter-2" value="555" /></td>',
+                       '<input type="radio" name="nl_id-2" value="subscribe" 
/>Yes',
+                       '<input type="radio" name="nl_id-2" value="unsubscribe" 
checked="" />No',
+               );
+
+               return array(
+                       array(
+                               array(),
+                               array( 'No results' ),
+                       ),
+                       array(
+                               array(
+                                       $this->getRowObject( 1, 'Foo', 'Bar', 
12, true ),
+                               ),
+                               $entryOneStrings,
+                       ),
+                       array(
+                               array(
+                                       $this->getRowObject( 1, 'Foo', 'Bar', 
12, true ),
+                                       $this->getRowObject( 2, 'SecondName', 
'SecondDesc', 555, false ),
+                               ),
+                               array_merge( $entryOneStrings, $entryTwoStrings 
),
+                       ),
+               );
+       }
+
+       /**
+        * @dataProvider provideTestTablePager
+        */
+       public function testStuff( array $dbObjects, array 
$expectedRegexMatches ) {
+               $pager = new NewsletterTablePager( null, 
$this->getMockDatabase( $dbObjects ) );
+
+               $text = $pager->getFullOutput()->getText();
+
+               foreach ( $expectedRegexMatches as $expectedMatch ) {
+                       $this->assertContains( $expectedMatch, $text );
+               }
+       }
+
+}

-- 
To view, visit https://gerrit.wikimedia.org/r/234727
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: Ie5c585105da6d37a64c116cdfdee32ce2bbf3017
Gerrit-PatchSet: 3
Gerrit-Project: mediawiki/extensions/Newsletter
Gerrit-Branch: master
Gerrit-Owner: Addshore <[email protected]>
Gerrit-Reviewer: 01tonythomas <[email protected]>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to