Skip to content

Commit b1bdb7c

Browse files
jenkins-botGerrit Code Review
authored andcommitted
Merge "REST: Avoid relying on error message params"
2 parents 3f82b36 + 93a2d47 commit b1bdb7c

File tree

4 files changed

+19
-10
lines changed

4 files changed

+19
-10
lines changed

repo/rest-api/src/Infrastructure/DataAccess/EntityUpdater.php

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
use Wikibase\DataModel\Entity\EntityDocument;
1515
use Wikibase\DataModel\Entity\StatementListProvidingEntity;
1616
use Wikibase\DataModel\Services\Statement\GuidGenerator;
17+
use Wikibase\Lib\SettingsArray;
1718
use Wikibase\Lib\Store\EntityRevision;
1819
use Wikibase\Lib\Store\EntityStore;
1920
use Wikibase\Repo\EditEntity\MediaWikiEditEntityFactory;
@@ -36,6 +37,7 @@ class EntityUpdater {
3637
private PermissionManager $permissionManager;
3738
private EntityStore $entityStore;
3839
private GuidGenerator $statementIdGenerator;
40+
private SettingsArray $repoSettings;
3941

4042
public function __construct(
4143
IContextSource $context,
@@ -44,7 +46,8 @@ public function __construct(
4446
EditSummaryFormatter $summaryFormatter,
4547
PermissionManager $permissionManager,
4648
EntityStore $entityStore,
47-
GuidGenerator $statementIdGenerator
49+
GuidGenerator $statementIdGenerator,
50+
SettingsArray $repoSettings
4851
) {
4952
$this->context = $context;
5053
$this->editEntityFactory = $editEntityFactory;
@@ -53,6 +56,7 @@ public function __construct(
5356
$this->permissionManager = $permissionManager;
5457
$this->entityStore = $entityStore;
5558
$this->statementIdGenerator = $statementIdGenerator;
59+
$this->repoSettings = $repoSettings;
5660
}
5761

5862
/**
@@ -104,8 +108,7 @@ private function createOrUpdate(
104108
if ( !$status->isOK() ) {
105109
$entityTooBigError = $this->findErrorInStatus( $status, 'wikibase-error-entity-too-big' );
106110
if ( $entityTooBigError ) {
107-
$maxSizeInKiloBytes = $entityTooBigError->getParams()[0]['size'] / 1024;
108-
throw new ResourceTooLargeException( $maxSizeInKiloBytes );
111+
throw new ResourceTooLargeException( $this->repoSettings->getSetting( 'maxSerializedEntitySize' ) );
109112
}
110113

111114
$abuseFilterError = $this->findAbuseFilterError( $status->getMessages() );

repo/rest-api/src/WbRestApi.ServiceWiring.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -504,7 +504,8 @@ function( MediaWikiServices $services ): ItemSerializationRequestValidatingDeser
504504
),
505505
$services->getPermissionManager(),
506506
WikibaseRepo::getEntityStore( $services ),
507-
new GuidGenerator()
507+
new GuidGenerator(),
508+
WikibaseRepo::getSettings( $services )
508509
);
509510
},
510511

repo/rest-api/tests/phpunit/Infrastructure/DataAccess/EntityUpdaterIntegrationTest.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
use Wikibase\DataModel\Statement\StatementList;
1919
use Wikibase\DataModel\Tests\NewItem;
2020
use Wikibase\DataModel\Tests\NewStatement;
21+
use Wikibase\Lib\SettingsArray;
2122
use Wikibase\Repo\RestApi\Domain\Model\EditMetadata;
2223
use Wikibase\Repo\RestApi\Infrastructure\DataAccess\EntityUpdater;
2324
use Wikibase\Repo\RestApi\Infrastructure\EditSummaryFormatter;
@@ -166,7 +167,8 @@ private function newEntityUpdater(): EntityUpdater {
166167
$this->createStub( EditSummaryFormatter::class ),
167168
$permissionManager,
168169
WikibaseRepo::getEntityStore(),
169-
new GuidGenerator()
170+
new GuidGenerator(),
171+
new SettingsArray()
170172
);
171173
}
172174

repo/rest-api/tests/phpunit/Infrastructure/DataAccess/EntityUpdaterTest.php

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
use Wikibase\DataModel\Statement\StatementList;
2323
use Wikibase\DataModel\Tests\NewItem;
2424
use Wikibase\DataModel\Tests\NewStatement;
25+
use Wikibase\Lib\SettingsArray;
2526
use Wikibase\Lib\Store\EntityRevision;
2627
use Wikibase\Lib\Store\EntityStore;
2728
use Wikibase\Repo\EditEntity\EditEntity;
@@ -45,6 +46,8 @@
4546
*/
4647
class EntityUpdaterTest extends TestCase {
4748

49+
private const MAX_ENTITY_SIZE = 1;
50+
4851
private IContextSource $context;
4952
private MediaWikiEditEntityFactory $editEntityFactory;
5053
private LoggerInterface $logger;
@@ -211,18 +214,17 @@ public function testGivenSavingFails_throwsGenericException( EntityDocument $ent
211214
* @dataProvider provideEntity
212215
*/
213216
public function testGivenResourceTooLarge_throwsCorrespondingException( EntityDocument $entity ): void {
214-
$maxSizeAsBytes = 1024;
215-
$maxSizeAsKiloBytes = 1;
217+
$maxSizeAsBytes = self::MAX_ENTITY_SIZE * 1024;
216218

217-
$errorStatus = EditEntityStatus::newFatal( 'wikibase-error-entity-too-big', [ 'size' => $maxSizeAsBytes ] );
219+
$errorStatus = EditEntityStatus::newFatal( wfMessage( 'wikibase-error-entity-too-big' )->sizeParams( $maxSizeAsBytes ) );
218220

219221
$editEntity = $this->createStub( EditEntity::class );
220222
$editEntity->method( 'attemptSave' )->willReturn( $errorStatus );
221223

222224
$this->editEntityFactory = $this->createStub( MediaWikiEditEntityFactory::class );
223225
$this->editEntityFactory->method( 'newEditEntity' )->willReturn( $editEntity );
224226

225-
$this->expectExceptionObject( new ResourceTooLargeException( $maxSizeAsKiloBytes ) );
227+
$this->expectExceptionObject( new ResourceTooLargeException( $maxSizeAsBytes ) );
226228
$this->newEntityUpdater()->update( $entity, $this->createStub( EditMetadata::class ) );
227229
}
228230

@@ -364,7 +366,8 @@ private function newEntityUpdater(): EntityUpdater {
364366
$this->summaryFormatter,
365367
$this->permissionManager,
366368
$this->entityStore,
367-
new GuidGenerator()
369+
new GuidGenerator(),
370+
new SettingsArray( [ 'maxSerializedEntitySize' => self::MAX_ENTITY_SIZE ] )
368371
);
369372
}
370373

0 commit comments

Comments
 (0)