76 lines
2.5 KiB
PHP
76 lines
2.5 KiB
PHP
|
|
<?php
|
||
|
|
|
||
|
|
namespace MediaWiki\Tests\Rest\Handler;
|
||
|
|
|
||
|
|
use MediaWiki\Rest\Handler\ContributionsCountHandler;
|
||
|
|
use MediaWiki\Rest\LocalizedHttpException;
|
||
|
|
use MediaWiki\Rest\RequestData;
|
||
|
|
use MediaWiki\Revision\ContributionsLookup;
|
||
|
|
use PHPUnit\Framework\MockObject\MockObject;
|
||
|
|
use RequestContext;
|
||
|
|
use User;
|
||
|
|
use Wikimedia\Message\MessageValue;
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @covers \MediaWiki\Rest\Handler\ContributionsCountHandler
|
||
|
|
*/
|
||
|
|
class ContributionsCountHandlerTest extends \MediaWikiUnitTestCase {
|
||
|
|
|
||
|
|
use HandlerTestTrait;
|
||
|
|
|
||
|
|
private function newHandler( $numRevisions = 5 ) {
|
||
|
|
/** @var MockObject|ContributionsLookup $mockContributionsLookup */
|
||
|
|
$mockContributionsLookup = $this->createNoOpMock( ContributionsLookup::class,
|
||
|
|
[ 'getRevisionCountByUser' ]
|
||
|
|
);
|
||
|
|
$mockContributionsLookup->method( 'getRevisionCountByUser' )->willReturn( $numRevisions );
|
||
|
|
$handler = new ContributionsCountHandler( $mockContributionsLookup );
|
||
|
|
return $handler;
|
||
|
|
}
|
||
|
|
|
||
|
|
public function testThatAnonymousUserReturns401() {
|
||
|
|
$handler = $this->newHandler();
|
||
|
|
$request = new RequestData( [] );
|
||
|
|
RequestContext::getMain()->setUser( new User() );
|
||
|
|
|
||
|
|
$this->expectExceptionObject(
|
||
|
|
new LocalizedHttpException( new MessageValue( 'rest-permission-denied-anon' ), 401 )
|
||
|
|
);
|
||
|
|
$response = $this->executeHandler( $handler, $request );
|
||
|
|
$this->assertSame( 401, $response->getStatusCode() );
|
||
|
|
}
|
||
|
|
|
||
|
|
private function makeMockUser( $anon = false ) {
|
||
|
|
$user = $this->createNoOpMock( User::class, [ 'isAnon' ] );
|
||
|
|
$user->method( 'isAnon' )->willReturn( $anon );
|
||
|
|
return $user;
|
||
|
|
}
|
||
|
|
|
||
|
|
public function provideThatResponseConformsToSchema() {
|
||
|
|
$basePath = 'https://wiki.example.com/rest/coredev/v0/me/contributions/count';
|
||
|
|
yield [ 0, [ 'count' => 0 ] ];
|
||
|
|
yield [ 3, [ 'count' => 3 ] ];
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @dataProvider provideThatResponseConformsToSchema
|
||
|
|
*/
|
||
|
|
public function testThatResponseConformsToSchema( $numRevisions, $expectedResponse ) {
|
||
|
|
$handler = $this->newHandler( $numRevisions );
|
||
|
|
$request = new RequestData( [] );
|
||
|
|
|
||
|
|
$user = $this->makeMockUser();
|
||
|
|
RequestContext::getMain()->setUser( $user );
|
||
|
|
|
||
|
|
$response = $this->executeHandlerAndGetBodyData( $handler, $request );
|
||
|
|
$this->assertSame( $expectedResponse, $response );
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
// Returns a list of page revisions by the current logged-in user
|
||
|
|
// There is a stable chronological order allowing the client to request
|
||
|
|
// the next or previous segments such that the client will eventually receive all contributions
|
||
|
|
// Returned list must segmented based on a LIMIT
|
||
|
|
// Response object must be JSON
|
||
|
|
// Response object must contain the following fields:
|