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