Seen in this build and others (1, 2, …).
1) Wikibase\Repo\Tests\FederatedProperties\Api\SetClaimTest::testFederatedPropertiesFailure TypeError: Argument 1 passed to PHPUnit\Framework\Assert::fail() must be of the type string, array given, called in /workspace/src/vendor/phpunit/phpunit/src/Framework/MockObject/Stub/ReturnCallback.php on line 33 /workspace/src/extensions/EventBus/ServiceWiring.php:27 /workspace/src/vendor/wikimedia/services/src/ServiceContainer.php:447 /workspace/src/vendor/wikimedia/services/src/ServiceContainer.php:416 /workspace/src/includes/MediaWikiServices.php:255 /workspace/src/vendor/wikimedia/services/src/ServiceContainer.php:424 /workspace/src/extensions/EventBus/includes/EventBus.php:466 /workspace/src/extensions/EventBus/includes/EventBusHooks.php:329 /workspace/src/extensions/EventBus/includes/EventBusHooks.php:306 /workspace/src/includes/HookContainer/HookContainer.php:333 /workspace/src/includes/HookContainer/HookContainer.php:140 /workspace/src/includes/HookContainer/HookRunner.php:2881 /workspace/src/includes/Storage/PageUpdater.php:1384 /workspace/src/includes/libs/rdbms/database/Database.php:4499 /workspace/src/includes/libs/rdbms/database/DBConnRef.php:68 /workspace/src/includes/libs/rdbms/database/DBConnRef.php:641 /workspace/src/includes/deferred/AtomicSectionUpdate.php:39 /workspace/src/includes/deferred/DeferredUpdates.php:513 /workspace/src/includes/deferred/DeferredUpdates.php:390 /workspace/src/includes/deferred/DeferredUpdates.php:221 /workspace/src/includes/deferred/DeferredUpdatesScope.php:267 /workspace/src/includes/deferred/DeferredUpdatesScope.php:196 /workspace/src/includes/deferred/DeferredUpdates.php:242 /workspace/src/includes/deferred/DeferredUpdates.php:290 /workspace/src/includes/deferred/DeferredUpdates.php:129 /workspace/src/includes/Storage/PageUpdater.php:1319 /workspace/src/includes/Storage/PageUpdater.php:803 /workspace/src/extensions/Wikibase/repo/includes/Store/Sql/WikiPageEntityStore.php:375 /workspace/src/extensions/Wikibase/repo/includes/Store/Sql/WikiPageEntityStore.php:235 /workspace/src/extensions/Wikibase/lib/includes/Store/TypeDispatchingEntityStore.php:90 /workspace/src/extensions/Wikibase/repo/tests/phpunit/includes/FederatedProperties/Api/SetClaimTest.php:58 /workspace/src/tests/phpunit/MediaWikiIntegrationTestCase.php:446 /workspace/src/maintenance/doMaintenance.php:106
EventBus’ ServiceWiring.php, line 27:
$services->getHttpRequestFactory()->createMultiClient(),
The HttpRequestFactory::createMultiClient() method signature:
public function createMultiClient( $options = [] ) {
The test case uses MockHttpTrait, where makeMockHttpRequestFactory() contains this:
if ( $request instanceof MultiHttpClient ) { $mockHttpRequestFactory->method( 'createMultiClient' ) ->willReturn( $request ); } else { $mockHttpRequestFactory->method( 'createMultiClient' ) ->willReturnCallback( [ TestCase::class, 'fail' ] ); }
TestCase inherits that fail method from the Assert class, with the signature:
public static function fail(string $message = ''): void
EventBus’ service wiring gets a mock “no requests” HttpRequestFactory and calls createMultiClient() on it, with no arguments. The default argument from the real createMultiClient() method is used ([]) and passed into the mock callback, [ TestCase::class, 'fail' ]. TestCase::fail then complains that it’s being called with an array instead of a message.
I’m not sure why this only started failing now – which part of that chain changed recently – but I think the fix ought to be that MockHttpTrait passes a callback into the mocks which wraps TestCase::fail() but discards any arguments with which it was called.