wiki.techinc.nl/tests/phpunit/includes/specials/SpecialRecentchanges.php
Antoine Musso 2a165ac219 Bug 2429 allow selection of associated namespace in recent changes
Done by adding yet another checkbox in Special:RecentChanges. The feature
also support namespace inversion.  For example, if you have selected
the TALK namespace with inversion and associated namespace, you will
be shown any changes which is not NS_MAIN or NS_TALK.

Tests:

SpecialRecentchanges tests only this feature. I had to filter out
the rc_timestamp condition which might cause trouble if the test
suite is run on another day. A better solution remains to be implemented.
2011-03-02 20:40:40 +00:00

134 lines
3.1 KiB
PHP
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
/**
* Test class for SpecialRecentchanges class
*
* Copyright © 2011, Ashar Voultoiz
*
* @author Ashar Voultoiz
*/
class SpecialRecentchangesTest extends MediaWikiTestCase {
/**
* @var SpecialRecentChanges
*/
protected $rc;
function setUp() {
}
/** helper to test SpecialRecentchanges::buildMainQueryConds() */
private function assertConditions( $expected, $requestOptions = null, $message = '' ) {
global $wgRequest;
$savedGlobal = $wgRequest;
# Initialize a WebRequest object ...
$wgRequest = new FauxRequest( $requestOptions );
# ... then setup the rc object (which use wgRequest internally)
$this->rc = new SpecialRecentChanges();
$formOptions = $this->rc->setup( null );
# Filter out rc_timestamp conditions which depends on the test runtime
# This condition is not needed as of march 2, 2011 -- hashar
# FIXME: find a way to generate the correct rc_timestamp
$queryConditions = array_filter(
$this->rc->buildMainQueryConds( $formOptions ),
'SpecialRecentchangesTest::filterOutRcTimestampCondition'
);
$this->assertEquals(
$expected,
$queryConditions,
$message
);
$wgRequest = $savedGlobal;
}
/** return false if condition begin with 'rc_timestamp ' */
private static function filterOutRcTimestampCondition( $var ) {
return (false === strpos( $var, 'rc_timestamp ' ));
}
public function testRcNsFilter() {
$this->assertConditions(
array( # expected
'rc_bot' => 0,
#0 => "rc_timestamp >= '20110223000000'",
1 => "rc_namespace = '0'",
),
array(
'namespace' => NS_MAIN,
),
"rc conditions with no options (aka default setting)"
);
}
public function testRcNsFilterInversion() {
$this->assertConditions(
array( # expected
#0 => "rc_timestamp >= '20110223000000'",
'rc_bot' => 0,
1 => sprintf( "rc_namespace != '%s'", NS_MAIN ),
),
array(
'namespace' => NS_MAIN,
'invert' => 1,
),
"rc conditions with namespace inverted"
);
}
/**
* @bug 2429
* @dataProvider provideNamespacesAssociations
*/
public function testRcNsFilterAssociation( $ns1, $ns2 ) {
$this->assertConditions(
array( # expected
#0 => "rc_timestamp >= '20110223000000'",
'rc_bot' => 0,
1 => sprintf( "(rc_namespace = '%s' OR rc_namespace = '%s')", $ns1, $ns2 ),
),
array(
'namespace' => $ns1,
'associated' => 1,
),
"rc conditions with namespace inverted"
);
}
/**
* @bug 2429
* @dataProvider provideNamespacesAssociations
*/
public function testRcNsFilterAssociationWithInversion( $ns1, $ns2 ) {
$this->assertConditions(
array( # expected
#0 => "rc_timestamp >= '20110223000000'",
'rc_bot' => 0,
1 => sprintf( "(rc_namespace != '%s' AND rc_namespace != '%s')", $ns1, $ns2 ),
),
array(
'namespace' => $ns1,
'associated' => 1,
'invert' => 1,
),
"rc conditions with namespace inverted"
);
}
/**
* Provides associated namespaces to test recent changes
* namespaces association filtering.
*/
public function provideNamespacesAssociations() {
return array( # (NS => Associated_NS)
array( NS_MAIN, NS_TALK),
array( NS_TALK, NS_MAIN),
);
}
}