2021-02-06 21:48:38 +00:00
|
|
|
<?php
|
|
|
|
|
|
2024-02-16 19:35:21 +00:00
|
|
|
namespace MediaWiki\Tests\Api\Query;
|
|
|
|
|
|
|
|
|
|
use MediaWiki\Tests\Api\ApiTestCase;
|
2024-02-28 17:21:30 +00:00
|
|
|
use MediaWiki\Tests\Unit\Permissions\MockAuthorityTrait;
|
|
|
|
|
use MediaWiki\Tests\User\TempUser\TempUserTestTrait;
|
2023-08-19 03:35:06 +00:00
|
|
|
use MediaWiki\Utils\MWTimestamp;
|
|
|
|
|
|
2021-02-06 21:48:38 +00:00
|
|
|
/**
|
|
|
|
|
* @group API
|
|
|
|
|
* @group Database
|
|
|
|
|
* @group medium
|
2024-02-16 18:04:47 +00:00
|
|
|
* @covers \ApiQueryUserInfo
|
2021-02-06 21:48:38 +00:00
|
|
|
*/
|
|
|
|
|
class ApiQueryUserInfoTest extends ApiTestCase {
|
|
|
|
|
|
2024-02-28 17:21:30 +00:00
|
|
|
use TempUserTestTrait;
|
|
|
|
|
use MockAuthorityTrait;
|
|
|
|
|
|
2021-02-06 21:48:38 +00:00
|
|
|
/**
|
2024-02-16 18:04:47 +00:00
|
|
|
* @covers \ApiQueryUserInfo::getLatestContributionTime
|
2021-02-06 21:48:38 +00:00
|
|
|
*/
|
|
|
|
|
public function testTimestamp() {
|
|
|
|
|
$clock = MWTimestamp::convert( TS_UNIX, '20100101000000' );
|
2021-02-10 22:31:02 +00:00
|
|
|
MWTimestamp::setFakeTime( static function () use ( &$clock ) {
|
2021-02-06 21:48:38 +00:00
|
|
|
return $clock += 1000;
|
|
|
|
|
} );
|
|
|
|
|
|
2021-02-06 23:15:28 +00:00
|
|
|
$params = [
|
|
|
|
|
'action' => 'query',
|
|
|
|
|
'meta' => 'userinfo',
|
|
|
|
|
'uiprop' => 'latestcontrib',
|
|
|
|
|
];
|
|
|
|
|
|
2021-02-06 21:48:38 +00:00
|
|
|
$page = $this->getNonexistingTestPage();
|
2022-08-05 19:39:42 +00:00
|
|
|
$performer = $this->getTestUser()->getAuthority();
|
2021-02-06 23:15:28 +00:00
|
|
|
|
2022-08-05 19:39:42 +00:00
|
|
|
$apiResult = $this->doApiRequest( $params, null, false, $performer );
|
2021-02-06 23:15:28 +00:00
|
|
|
$this->assertArrayNotHasKey( 'continue', $apiResult[0] );
|
|
|
|
|
$this->assertArrayHasKey( 'query', $apiResult[0] );
|
|
|
|
|
$this->assertArrayHasKey( 'userinfo', $apiResult[0]['query'] );
|
|
|
|
|
$this->assertArrayNotHasKey( 'latestcontrib', $apiResult[0]['query']['userinfo'] );
|
|
|
|
|
|
2021-02-06 21:48:38 +00:00
|
|
|
$status = $this->editPage( $page, 'one' );
|
2022-03-04 22:00:02 +00:00
|
|
|
$this->assertStatusOK( $status );
|
2021-02-06 21:48:38 +00:00
|
|
|
$status = $this->editPage( $page, 'two' );
|
2022-03-04 22:00:02 +00:00
|
|
|
$this->assertStatusOK( $status );
|
2021-02-06 21:48:38 +00:00
|
|
|
|
2021-02-06 23:15:28 +00:00
|
|
|
$revisionTimestamp = MWTimestamp::convert( TS_ISO_8601, $page->getTimestamp() );
|
2021-02-06 21:48:38 +00:00
|
|
|
|
2022-08-05 19:39:42 +00:00
|
|
|
$apiResult = $this->doApiRequest( $params, null, false, $performer );
|
2021-02-06 21:48:38 +00:00
|
|
|
$this->assertArrayNotHasKey( 'continue', $apiResult[0] );
|
|
|
|
|
$this->assertArrayHasKey( 'query', $apiResult[0] );
|
|
|
|
|
$this->assertArrayHasKey( 'userinfo', $apiResult[0]['query'] );
|
|
|
|
|
$this->assertArrayHasKey( 'latestcontrib', $apiResult[0]['query']['userinfo'] );
|
|
|
|
|
$queryTimestamp = $apiResult[0]['query']['userinfo']['latestcontrib'];
|
|
|
|
|
$this->assertSame( $revisionTimestamp, $queryTimestamp );
|
|
|
|
|
}
|
2022-08-18 00:35:37 +00:00
|
|
|
|
|
|
|
|
public function testCanCreateAccount() {
|
|
|
|
|
$params = [
|
|
|
|
|
'action' => 'query',
|
|
|
|
|
'meta' => 'userinfo',
|
|
|
|
|
'uiprop' => 'cancreateaccount',
|
|
|
|
|
];
|
|
|
|
|
$user = $this->getTestUser()->getUser();
|
|
|
|
|
$apiResult = $this->doApiRequest( $params, null, false, $user );
|
|
|
|
|
$this->assertArrayHasKey( 'query', $apiResult[0] );
|
|
|
|
|
$this->assertArrayHasKey( 'userinfo', $apiResult[0]['query'] );
|
|
|
|
|
$this->assertArrayHasKey( 'cancreateaccount', $apiResult[0]['query']['userinfo'] );
|
|
|
|
|
$this->assertTrue( $apiResult[0]['query']['userinfo']['cancreateaccount'] );
|
|
|
|
|
$this->assertArrayNotHasKey( 'cancreateaccounterror', $apiResult[0]['query']['userinfo'] );
|
|
|
|
|
|
|
|
|
|
$user = $this->getMutableTestUser()->getUser();
|
|
|
|
|
$status = $this->getServiceContainer()->getBlockUserFactory()->newBlockUser(
|
|
|
|
|
$user,
|
|
|
|
|
$this->getTestSysop()->getUser(),
|
|
|
|
|
'infinity',
|
|
|
|
|
'',
|
|
|
|
|
[ 'isCreateAccountBlocked' => true ]
|
|
|
|
|
)->placeBlock();
|
|
|
|
|
if ( !$status->isGood() ) {
|
|
|
|
|
$this->fail( $status->getWikiText( false, false, 'en' ) );
|
|
|
|
|
}
|
|
|
|
|
$apiResult = $this->doApiRequest( $params, null, false, $user );
|
|
|
|
|
$this->assertArrayHasKey( 'query', $apiResult[0] );
|
|
|
|
|
$this->assertArrayHasKey( 'userinfo', $apiResult[0]['query'] );
|
|
|
|
|
$this->assertArrayHasKey( 'cancreateaccount', $apiResult[0]['query']['userinfo'] );
|
|
|
|
|
$this->assertFalse( $apiResult[0]['query']['userinfo']['cancreateaccount'] );
|
|
|
|
|
$this->assertArrayHasKey( 'cancreateaccounterror', $apiResult[0]['query']['userinfo'] );
|
|
|
|
|
}
|
2024-02-28 17:21:30 +00:00
|
|
|
|
|
|
|
|
public function testTempFlag() {
|
|
|
|
|
$this->enableAutoCreateTempUser();
|
|
|
|
|
$params = [
|
|
|
|
|
'action' => 'query',
|
|
|
|
|
'meta' => 'userinfo',
|
|
|
|
|
];
|
|
|
|
|
$user = $this->getServiceContainer()->getTempUserCreator()->create()->getUser();
|
|
|
|
|
$apiResult = $this->doApiRequest( $params, null, false, $user );
|
|
|
|
|
|
|
|
|
|
// Verify that the temp flag is set.
|
|
|
|
|
$this->assertArrayHasKey( 'query', $apiResult[0] );
|
|
|
|
|
$this->assertArrayHasKey( 'userinfo', $apiResult[0]['query'] );
|
|
|
|
|
$this->assertArrayHasKey( 'temp', $apiResult[0]['query']['userinfo'] );
|
|
|
|
|
$this->assertTrue( $apiResult[0]['query']['userinfo']['temp'] );
|
|
|
|
|
|
|
|
|
|
// Verify that the name is correct
|
|
|
|
|
$this->assertArrayHasKey( 'name', $apiResult[0]['query']['userinfo'] );
|
|
|
|
|
$this->assertSame( $user->getName(), $apiResult[0]['query']['userinfo']['name'] );
|
|
|
|
|
|
|
|
|
|
// Verify that the user ID is correct
|
|
|
|
|
$this->assertArrayHasKey( 'id', $apiResult[0]['query']['userinfo'] );
|
|
|
|
|
$this->assertSame( $user->getId(), $apiResult[0]['query']['userinfo']['id'] );
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function testAnonFlag() {
|
|
|
|
|
$this->disableAutoCreateTempUser();
|
|
|
|
|
$params = [
|
|
|
|
|
'action' => 'query',
|
|
|
|
|
'meta' => 'userinfo',
|
|
|
|
|
];
|
|
|
|
|
$user = $this->mockAnonUltimateAuthority();
|
|
|
|
|
$apiResult = $this->doApiRequest( $params, null, false, $user );
|
|
|
|
|
|
|
|
|
|
// Verify that the temp flag is not set.
|
|
|
|
|
$this->assertArrayHasKey( 'query', $apiResult[0] );
|
|
|
|
|
$this->assertArrayHasKey( 'userinfo', $apiResult[0]['query'] );
|
|
|
|
|
$this->assertArrayNotHasKey( 'temp', $apiResult[0]['query']['userinfo'] );
|
|
|
|
|
|
|
|
|
|
// Verify that the anon flag is set.
|
|
|
|
|
$this->assertArrayHasKey( 'anon', $apiResult[0]['query']['userinfo'] );
|
|
|
|
|
$this->assertTrue( $apiResult[0]['query']['userinfo']['anon'] );
|
|
|
|
|
}
|
2021-02-06 21:48:38 +00:00
|
|
|
}
|