From be1fc95cf09f1c4d65e72afa63d982c32594460c Mon Sep 17 00:00:00 2001 From: Muhammad Yasser Jazirahly Date: Mon, 7 Oct 2024 18:57:02 +0400 Subject: [PATCH] REST: Add `X-Temporary-User-Redirect` response header Bug: T376260 Change-Id: I7c7def3e5064db335a9069eec98cbaca96197f76 --- .../AddItemAliasesInLanguageRouteHandler.php | 3 +- .../AddItemStatementRouteHandler.php | 3 +- ...dPropertyAliasesInLanguageRouteHandler.php | 3 +- .../AddPropertyStatementRouteHandler.php | 3 +- .../RouteHandlers/CreateItemRouteHandler.php | 3 +- ...mpUserCreationResponseHeaderMiddleware.php | 38 ++++++++++-- .../PatchItemAliasesRouteHandler.php | 3 +- .../PatchItemDescriptionsRouteHandler.php | 3 +- .../PatchItemLabelsRouteHandler.php | 3 +- .../RouteHandlers/PatchItemRouteHandler.php | 3 +- .../PatchItemStatementRouteHandler.php | 3 +- .../PatchPropertyAliasesRouteHandler.php | 3 +- .../PatchPropertyDescriptionsRouteHandler.php | 3 +- .../PatchPropertyLabelsRouteHandler.php | 3 +- .../PatchPropertyRouteHandler.php | 3 +- .../PatchPropertyStatementRouteHandler.php | 3 +- .../PatchSitelinksRouteHandler.php | 3 +- .../PatchStatementRouteHandler.php | 3 +- .../RemoveItemDescriptionRouteHandler.php | 3 +- .../RemoveItemLabelRouteHandler.php | 3 +- .../RemoveItemStatementRouteHandler.php | 3 +- .../RemovePropertyDescriptionRouteHandler.php | 4 +- .../RemovePropertyLabelRouteHandler.php | 3 +- .../RemovePropertyStatementRouteHandler.php | 3 +- .../RemoveSitelinkRouteHandler.php | 3 +- .../RemoveStatementRouteHandler.php | 3 +- .../ReplaceItemStatementRouteHandler.php | 3 +- .../ReplacePropertyStatementRouteHandler.php | 3 +- .../ReplaceStatementRouteHandler.php | 3 +- .../SetItemDescriptionRouteHandler.php | 3 +- .../SetItemLabelRouteHandler.php | 3 +- .../SetPropertyDescriptionRouteHandler.php | 3 +- .../SetPropertyLabelRouteHandler.php | 3 +- .../RouteHandlers/SetSitelinkRouteHandler.php | 3 +- ...erCreationResponseHeaderMiddlewareTest.php | 59 +++++++++++++++++-- 35 files changed, 156 insertions(+), 41 deletions(-) diff --git a/repo/rest-api/src/RouteHandlers/AddItemAliasesInLanguageRouteHandler.php b/repo/rest-api/src/RouteHandlers/AddItemAliasesInLanguageRouteHandler.php index dc399508b1..936f09ff33 100644 --- a/repo/rest-api/src/RouteHandlers/AddItemAliasesInLanguageRouteHandler.php +++ b/repo/rest-api/src/RouteHandlers/AddItemAliasesInLanguageRouteHandler.php @@ -2,6 +2,7 @@ namespace Wikibase\Repo\RestApi\RouteHandlers; +use MediaWiki\HookContainer\HookRunner; use MediaWiki\MediaWikiServices; use MediaWiki\Rest\Handler; use MediaWiki\Rest\RequestInterface; @@ -65,7 +66,7 @@ public static function factory(): Handler { WbRestApi::getPreconditionMiddlewareFactory()->newPreconditionMiddleware( fn( RequestInterface $request ): string => $request->getPathParam( self::ITEM_ID_PATH_PARAM ) ), - new TempUserCreationResponseHeaderMiddleware(), + new TempUserCreationResponseHeaderMiddleware( new HookRunner( MediaWikiServices::getInstance()->getHookContainer() ) ), ] ) ); } diff --git a/repo/rest-api/src/RouteHandlers/AddItemStatementRouteHandler.php b/repo/rest-api/src/RouteHandlers/AddItemStatementRouteHandler.php index 428adbe09b..14da1d5b63 100644 --- a/repo/rest-api/src/RouteHandlers/AddItemStatementRouteHandler.php +++ b/repo/rest-api/src/RouteHandlers/AddItemStatementRouteHandler.php @@ -3,6 +3,7 @@ namespace Wikibase\Repo\RestApi\RouteHandlers; use Exception; +use MediaWiki\HookContainer\HookRunner; use MediaWiki\MediaWikiServices; use MediaWiki\Rest\Handler; use MediaWiki\Rest\RequestInterface; @@ -68,7 +69,7 @@ public static function factory(): Handler { WbRestApi::getPreconditionMiddlewareFactory()->newPreconditionMiddleware( fn( RequestInterface $request ): string => $request->getPathParam( self::ITEM_ID_PATH_PARAM ) ), - new TempUserCreationResponseHeaderMiddleware(), + new TempUserCreationResponseHeaderMiddleware( new HookRunner( MediaWikiServices::getInstance()->getHookContainer() ) ), ] ) ); } diff --git a/repo/rest-api/src/RouteHandlers/AddPropertyAliasesInLanguageRouteHandler.php b/repo/rest-api/src/RouteHandlers/AddPropertyAliasesInLanguageRouteHandler.php index f23a39a969..ebc3afb7e6 100644 --- a/repo/rest-api/src/RouteHandlers/AddPropertyAliasesInLanguageRouteHandler.php +++ b/repo/rest-api/src/RouteHandlers/AddPropertyAliasesInLanguageRouteHandler.php @@ -2,6 +2,7 @@ namespace Wikibase\Repo\RestApi\RouteHandlers; +use MediaWiki\HookContainer\HookRunner; use MediaWiki\MediaWikiServices; use MediaWiki\Rest\Handler; use MediaWiki\Rest\RequestInterface; @@ -64,7 +65,7 @@ public static function factory(): Handler { WbRestApi::getPreconditionMiddlewareFactory()->newPreconditionMiddleware( fn( RequestInterface $request ): string => $request->getPathParam( self::PROPERTY_ID_PATH_PARAM ) ), - new TempUserCreationResponseHeaderMiddleware(), + new TempUserCreationResponseHeaderMiddleware( new HookRunner( MediaWikiServices::getInstance()->getHookContainer() ) ), ] ), $responseFactory ); diff --git a/repo/rest-api/src/RouteHandlers/AddPropertyStatementRouteHandler.php b/repo/rest-api/src/RouteHandlers/AddPropertyStatementRouteHandler.php index d0d9bc0290..37cbfc8e95 100644 --- a/repo/rest-api/src/RouteHandlers/AddPropertyStatementRouteHandler.php +++ b/repo/rest-api/src/RouteHandlers/AddPropertyStatementRouteHandler.php @@ -2,6 +2,7 @@ namespace Wikibase\Repo\RestApi\RouteHandlers; +use MediaWiki\HookContainer\HookRunner; use MediaWiki\MediaWikiServices; use MediaWiki\Rest\RequestInterface; use MediaWiki\Rest\Response; @@ -66,7 +67,7 @@ public static function factory(): self { WbRestApi::getPreconditionMiddlewareFactory()->newPreconditionMiddleware( fn( RequestInterface $request ): string => $request->getPathParam( self::PROPERTY_ID_PATH_PARAM ) ), - new TempUserCreationResponseHeaderMiddleware(), + new TempUserCreationResponseHeaderMiddleware( new HookRunner( MediaWikiServices::getInstance()->getHookContainer() ) ), ] ) ); } diff --git a/repo/rest-api/src/RouteHandlers/CreateItemRouteHandler.php b/repo/rest-api/src/RouteHandlers/CreateItemRouteHandler.php index a04eb3e665..710eb3c08e 100644 --- a/repo/rest-api/src/RouteHandlers/CreateItemRouteHandler.php +++ b/repo/rest-api/src/RouteHandlers/CreateItemRouteHandler.php @@ -2,6 +2,7 @@ namespace Wikibase\Repo\RestApi\RouteHandlers; +use MediaWiki\HookContainer\HookRunner; use MediaWiki\MediaWikiServices; use MediaWiki\Rest\Handler; use MediaWiki\Rest\Response; @@ -74,7 +75,7 @@ public static function factory(): Handler { new UserAgentCheckMiddleware(), new AuthenticationMiddleware( MediaWikiServices::getInstance()->getUserIdentityUtils() ), new BotRightCheckMiddleware( MediaWikiServices::getInstance()->getPermissionManager(), $responseFactory ), - new TempUserCreationResponseHeaderMiddleware(), + new TempUserCreationResponseHeaderMiddleware( new HookRunner( MediaWikiServices::getInstance()->getHookContainer() ) ), ] ) ); } diff --git a/repo/rest-api/src/RouteHandlers/Middleware/TempUserCreationResponseHeaderMiddleware.php b/repo/rest-api/src/RouteHandlers/Middleware/TempUserCreationResponseHeaderMiddleware.php index 5f2c607ce2..6657a1e3d7 100644 --- a/repo/rest-api/src/RouteHandlers/Middleware/TempUserCreationResponseHeaderMiddleware.php +++ b/repo/rest-api/src/RouteHandlers/Middleware/TempUserCreationResponseHeaderMiddleware.php @@ -2,6 +2,7 @@ namespace Wikibase\Repo\RestApi\RouteHandlers\Middleware; +use MediaWiki\Hook\TempUserCreatedRedirectHook; use MediaWiki\Rest\Handler; use MediaWiki\Rest\Response; @@ -10,15 +11,44 @@ */ class TempUserCreationResponseHeaderMiddleware implements Middleware { + private TempUserCreatedRedirectHook $hookRunner; + + public function __construct( TempUserCreatedRedirectHook $hookRunner ) { + $this->hookRunner = $hookRunner; + } + public function run( Handler $routeHandler, callable $runNext ): Response { $response = $runNext(); - $user = $routeHandler->getSession()->getUser(); + $session = $routeHandler->getSession(); + $user = $session->getUser(); + $authorityUser = $routeHandler->getAuthority()->getUser(); // If the user is a temporary user and is not the same as the current authority user, - // it means a new temporary user has been created. In this case, add a header to the response - // to indicate that the temporary user was created, using the temporary user's name. - if ( $user->isTemp() && !$routeHandler->getAuthority()->getUser()->equals( $user ) ) { + // it means a new temporary user has been created. + if ( $user->isTemp() && !$authorityUser->equals( $user ) ) { + // Hook parameters + $returnTo = ''; + $returnToQuery = ''; + $returnToAnchor = ''; + $redirectUrl = ''; + + // Call the hook + $this->hookRunner->onTempUserCreatedRedirect( + $session, + $user, + $returnTo, + $returnToQuery, + $returnToAnchor, + $redirectUrl + ); + + // If redirectUrl is set, add it to the response header + if ( $redirectUrl !== '' ) { + $response->setHeader( 'X-Temporary-User-Redirect', $redirectUrl ); + } + + // Also add the newly created temporary user's name in the response header $response->setHeader( 'X-Temporary-User-Created', $user->getName() ); } diff --git a/repo/rest-api/src/RouteHandlers/PatchItemAliasesRouteHandler.php b/repo/rest-api/src/RouteHandlers/PatchItemAliasesRouteHandler.php index 6e86fbff1d..49a8ae0862 100644 --- a/repo/rest-api/src/RouteHandlers/PatchItemAliasesRouteHandler.php +++ b/repo/rest-api/src/RouteHandlers/PatchItemAliasesRouteHandler.php @@ -2,6 +2,7 @@ namespace Wikibase\Repo\RestApi\RouteHandlers; +use MediaWiki\HookContainer\HookRunner; use MediaWiki\MediaWikiServices; use MediaWiki\Rest\Handler; use MediaWiki\Rest\RequestInterface; @@ -66,7 +67,7 @@ public static function factory(): Handler { WbRestApi::getPreconditionMiddlewareFactory()->newPreconditionMiddleware( fn( RequestInterface $request ): string => $request->getPathParam( self::ITEM_ID_PATH_PARAM ) ), - new TempUserCreationResponseHeaderMiddleware(), + new TempUserCreationResponseHeaderMiddleware( new HookRunner( MediaWikiServices::getInstance()->getHookContainer() ) ), ] ), WbRestApi::getPatchItemAliases(), new AliasesSerializer(), diff --git a/repo/rest-api/src/RouteHandlers/PatchItemDescriptionsRouteHandler.php b/repo/rest-api/src/RouteHandlers/PatchItemDescriptionsRouteHandler.php index a11605537a..5c9410e8aa 100644 --- a/repo/rest-api/src/RouteHandlers/PatchItemDescriptionsRouteHandler.php +++ b/repo/rest-api/src/RouteHandlers/PatchItemDescriptionsRouteHandler.php @@ -2,6 +2,7 @@ namespace Wikibase\Repo\RestApi\RouteHandlers; +use MediaWiki\HookContainer\HookRunner; use MediaWiki\MediaWikiServices; use MediaWiki\Rest\Handler; use MediaWiki\Rest\RequestInterface; @@ -66,7 +67,7 @@ public static function factory(): Handler { WbRestApi::getPreconditionMiddlewareFactory()->newPreconditionMiddleware( fn( RequestInterface $request ): string => $request->getPathParam( self::ITEM_ID_PATH_PARAM ) ), - new TempUserCreationResponseHeaderMiddleware(), + new TempUserCreationResponseHeaderMiddleware( new HookRunner( MediaWikiServices::getInstance()->getHookContainer() ) ), ] ), WbRestApi::getPatchItemDescriptions(), new DescriptionsSerializer(), diff --git a/repo/rest-api/src/RouteHandlers/PatchItemLabelsRouteHandler.php b/repo/rest-api/src/RouteHandlers/PatchItemLabelsRouteHandler.php index 4e7b9a44c7..e533934aa9 100644 --- a/repo/rest-api/src/RouteHandlers/PatchItemLabelsRouteHandler.php +++ b/repo/rest-api/src/RouteHandlers/PatchItemLabelsRouteHandler.php @@ -2,6 +2,7 @@ namespace Wikibase\Repo\RestApi\RouteHandlers; +use MediaWiki\HookContainer\HookRunner; use MediaWiki\MediaWikiServices; use MediaWiki\Rest\Handler; use MediaWiki\Rest\RequestInterface; @@ -69,7 +70,7 @@ public static function factory(): Handler { WbRestApi::getPreconditionMiddlewareFactory()->newPreconditionMiddleware( fn( RequestInterface $request ): string => $request->getPathParam( self::ITEM_ID_PATH_PARAM ) ), - new TempUserCreationResponseHeaderMiddleware(), + new TempUserCreationResponseHeaderMiddleware( new HookRunner( MediaWikiServices::getInstance()->getHookContainer() ) ), ] ), $responseFactory ); diff --git a/repo/rest-api/src/RouteHandlers/PatchItemRouteHandler.php b/repo/rest-api/src/RouteHandlers/PatchItemRouteHandler.php index e672682509..29b3fd30ce 100644 --- a/repo/rest-api/src/RouteHandlers/PatchItemRouteHandler.php +++ b/repo/rest-api/src/RouteHandlers/PatchItemRouteHandler.php @@ -2,6 +2,7 @@ namespace Wikibase\Repo\RestApi\RouteHandlers; +use MediaWiki\HookContainer\HookRunner; use MediaWiki\MediaWikiServices; use MediaWiki\Rest\Handler; use MediaWiki\Rest\RequestInterface; @@ -72,7 +73,7 @@ public static function factory(): Handler { WbRestApi::getPreconditionMiddlewareFactory()->newPreconditionMiddleware( fn( RequestInterface $request ): string => $request->getPathParam( self::ITEM_ID_PATH_PARAM ) ), - new TempUserCreationResponseHeaderMiddleware(), + new TempUserCreationResponseHeaderMiddleware( new HookRunner( MediaWikiServices::getInstance()->getHookContainer() ) ), ] ), WbRestApi::getPatchItem(), new ItemSerializer( diff --git a/repo/rest-api/src/RouteHandlers/PatchItemStatementRouteHandler.php b/repo/rest-api/src/RouteHandlers/PatchItemStatementRouteHandler.php index 731a38bc7e..02fac4cf58 100644 --- a/repo/rest-api/src/RouteHandlers/PatchItemStatementRouteHandler.php +++ b/repo/rest-api/src/RouteHandlers/PatchItemStatementRouteHandler.php @@ -2,6 +2,7 @@ namespace Wikibase\Repo\RestApi\RouteHandlers; +use MediaWiki\HookContainer\HookRunner; use MediaWiki\MediaWikiServices; use MediaWiki\Rest\Handler; use MediaWiki\Rest\RequestInterface; @@ -72,7 +73,7 @@ public static function factory(): Handler { self::STATEMENT_ID_PATH_PARAM, self::ITEM_ID_PATH_PARAM ), - new TempUserCreationResponseHeaderMiddleware(), + new TempUserCreationResponseHeaderMiddleware( new HookRunner( MediaWikiServices::getInstance()->getHookContainer() ) ), ] ), WbRestApi::getStatementSerializer(), $responseFactory diff --git a/repo/rest-api/src/RouteHandlers/PatchPropertyAliasesRouteHandler.php b/repo/rest-api/src/RouteHandlers/PatchPropertyAliasesRouteHandler.php index f4b110412d..af04388bdb 100644 --- a/repo/rest-api/src/RouteHandlers/PatchPropertyAliasesRouteHandler.php +++ b/repo/rest-api/src/RouteHandlers/PatchPropertyAliasesRouteHandler.php @@ -2,6 +2,7 @@ namespace Wikibase\Repo\RestApi\RouteHandlers; +use MediaWiki\HookContainer\HookRunner; use MediaWiki\MediaWikiServices; use MediaWiki\Rest\Handler; use MediaWiki\Rest\RequestInterface; @@ -66,7 +67,7 @@ public static function factory(): Handler { WbRestApi::getPreconditionMiddlewareFactory()->newPreconditionMiddleware( fn( RequestInterface $request ): string => $request->getPathParam( self::PROPERTY_ID_PATH_PARAM ) ), - new TempUserCreationResponseHeaderMiddleware(), + new TempUserCreationResponseHeaderMiddleware( new HookRunner( MediaWikiServices::getInstance()->getHookContainer() ) ), ] ), new AliasesSerializer(), $responseFactory diff --git a/repo/rest-api/src/RouteHandlers/PatchPropertyDescriptionsRouteHandler.php b/repo/rest-api/src/RouteHandlers/PatchPropertyDescriptionsRouteHandler.php index bcf8aa6f41..6d060707fb 100644 --- a/repo/rest-api/src/RouteHandlers/PatchPropertyDescriptionsRouteHandler.php +++ b/repo/rest-api/src/RouteHandlers/PatchPropertyDescriptionsRouteHandler.php @@ -2,6 +2,7 @@ namespace Wikibase\Repo\RestApi\RouteHandlers; +use MediaWiki\HookContainer\HookRunner; use MediaWiki\MediaWikiServices; use MediaWiki\Rest\Handler; use MediaWiki\Rest\RequestInterface; @@ -64,7 +65,7 @@ public static function factory(): Handler { WbRestApi::getPreconditionMiddlewareFactory()->newPreconditionMiddleware( fn( RequestInterface $request ): string => $request->getPathParam( self::PROPERTY_ID_PATH_PARAM ) ), - new TempUserCreationResponseHeaderMiddleware(), + new TempUserCreationResponseHeaderMiddleware( new HookRunner( MediaWikiServices::getInstance()->getHookContainer() ) ), ] ), WbRestApi::getPatchPropertyDescriptions(), new DescriptionsSerializer(), diff --git a/repo/rest-api/src/RouteHandlers/PatchPropertyLabelsRouteHandler.php b/repo/rest-api/src/RouteHandlers/PatchPropertyLabelsRouteHandler.php index c23e55d9b8..616d30d5a4 100644 --- a/repo/rest-api/src/RouteHandlers/PatchPropertyLabelsRouteHandler.php +++ b/repo/rest-api/src/RouteHandlers/PatchPropertyLabelsRouteHandler.php @@ -2,6 +2,7 @@ namespace Wikibase\Repo\RestApi\RouteHandlers; +use MediaWiki\HookContainer\HookRunner; use MediaWiki\MediaWikiServices; use MediaWiki\Rest\Handler; use MediaWiki\Rest\RequestInterface; @@ -67,7 +68,7 @@ public static function factory(): Handler { WbRestApi::getPreconditionMiddlewareFactory()->newPreconditionMiddleware( fn( RequestInterface $request ): string => $request->getPathParam( self::PROPERTY_ID_PATH_PARAM ) ), - new TempUserCreationResponseHeaderMiddleware(), + new TempUserCreationResponseHeaderMiddleware( new HookRunner( MediaWikiServices::getInstance()->getHookContainer() ) ), ] ), ); } diff --git a/repo/rest-api/src/RouteHandlers/PatchPropertyRouteHandler.php b/repo/rest-api/src/RouteHandlers/PatchPropertyRouteHandler.php index e04452c2c5..36246e17ee 100644 --- a/repo/rest-api/src/RouteHandlers/PatchPropertyRouteHandler.php +++ b/repo/rest-api/src/RouteHandlers/PatchPropertyRouteHandler.php @@ -2,6 +2,7 @@ namespace Wikibase\Repo\RestApi\RouteHandlers; +use MediaWiki\HookContainer\HookRunner; use MediaWiki\MediaWikiServices; use MediaWiki\Rest\Handler; use MediaWiki\Rest\RequestInterface; @@ -68,7 +69,7 @@ public static function factory(): Handler { WbRestApi::getPreconditionMiddlewareFactory()->newPreconditionMiddleware( fn( RequestInterface $request ): string => $request->getPathParam( self::PROPERTY_ID_PATH_PARAM ) ), - new TempUserCreationResponseHeaderMiddleware(), + new TempUserCreationResponseHeaderMiddleware( new HookRunner( MediaWikiServices::getInstance()->getHookContainer() ) ), ] ), WbRestApi::getPatchProperty(), new PropertySerializer( diff --git a/repo/rest-api/src/RouteHandlers/PatchPropertyStatementRouteHandler.php b/repo/rest-api/src/RouteHandlers/PatchPropertyStatementRouteHandler.php index b56ec2ded9..1681ff0488 100644 --- a/repo/rest-api/src/RouteHandlers/PatchPropertyStatementRouteHandler.php +++ b/repo/rest-api/src/RouteHandlers/PatchPropertyStatementRouteHandler.php @@ -2,6 +2,7 @@ namespace Wikibase\Repo\RestApi\RouteHandlers; +use MediaWiki\HookContainer\HookRunner; use MediaWiki\MediaWikiServices; use MediaWiki\Rest\Handler; use MediaWiki\Rest\RequestInterface; @@ -71,7 +72,7 @@ public static function factory(): Handler { self::STATEMENT_ID_PATH_PARAM, self::PROPERTY_ID_PATH_PARAM ), - new TempUserCreationResponseHeaderMiddleware(), + new TempUserCreationResponseHeaderMiddleware( new HookRunner( MediaWikiServices::getInstance()->getHookContainer() ) ), ] ), WbRestApi::getStatementSerializer(), $responseFactory diff --git a/repo/rest-api/src/RouteHandlers/PatchSitelinksRouteHandler.php b/repo/rest-api/src/RouteHandlers/PatchSitelinksRouteHandler.php index 776aa97136..e63efa6085 100644 --- a/repo/rest-api/src/RouteHandlers/PatchSitelinksRouteHandler.php +++ b/repo/rest-api/src/RouteHandlers/PatchSitelinksRouteHandler.php @@ -2,6 +2,7 @@ namespace Wikibase\Repo\RestApi\RouteHandlers; +use MediaWiki\HookContainer\HookRunner; use MediaWiki\MediaWikiServices; use MediaWiki\Rest\Handler; use MediaWiki\Rest\RequestInterface; @@ -70,7 +71,7 @@ public static function factory(): Handler { WbRestApi::getPreconditionMiddlewareFactory()->newPreconditionMiddleware( fn( RequestInterface $request ): string => $request->getPathParam( self::ITEM_ID_PATH_PARAM ) ), - new TempUserCreationResponseHeaderMiddleware(), + new TempUserCreationResponseHeaderMiddleware( new HookRunner( MediaWikiServices::getInstance()->getHookContainer() ) ), ] ) ); } diff --git a/repo/rest-api/src/RouteHandlers/PatchStatementRouteHandler.php b/repo/rest-api/src/RouteHandlers/PatchStatementRouteHandler.php index 65bb318a9f..186fb47542 100644 --- a/repo/rest-api/src/RouteHandlers/PatchStatementRouteHandler.php +++ b/repo/rest-api/src/RouteHandlers/PatchStatementRouteHandler.php @@ -2,6 +2,7 @@ namespace Wikibase\Repo\RestApi\RouteHandlers; +use MediaWiki\HookContainer\HookRunner; use MediaWiki\MediaWikiServices; use MediaWiki\Rest\Handler; use MediaWiki\Rest\RequestInterface; @@ -73,7 +74,7 @@ public static function factory(): Handler { WbRestApi::getStatementRedirectMiddlewareFactory()->newStatementRedirectMiddleware( self::STATEMENT_ID_PATH_PARAM ), - new TempUserCreationResponseHeaderMiddleware(), + new TempUserCreationResponseHeaderMiddleware( new HookRunner( MediaWikiServices::getInstance()->getHookContainer() ) ), ] ), WbRestApi::getStatementSerializer(), $responseFactory diff --git a/repo/rest-api/src/RouteHandlers/RemoveItemDescriptionRouteHandler.php b/repo/rest-api/src/RouteHandlers/RemoveItemDescriptionRouteHandler.php index c275d4e3fd..ac43b36264 100644 --- a/repo/rest-api/src/RouteHandlers/RemoveItemDescriptionRouteHandler.php +++ b/repo/rest-api/src/RouteHandlers/RemoveItemDescriptionRouteHandler.php @@ -2,6 +2,7 @@ namespace Wikibase\Repo\RestApi\RouteHandlers; +use MediaWiki\HookContainer\HookRunner; use MediaWiki\MediaWikiServices; use MediaWiki\Rest\Handler; use MediaWiki\Rest\RequestInterface; @@ -64,7 +65,7 @@ public static function factory(): Handler { WbRestApi::getPreconditionMiddlewareFactory()->newPreconditionMiddleware( fn( RequestInterface $request ): string => $request->getPathParam( self::ITEM_ID_PATH_PARAM ) ), - new TempUserCreationResponseHeaderMiddleware(), + new TempUserCreationResponseHeaderMiddleware( new HookRunner( MediaWikiServices::getInstance()->getHookContainer() ) ), ] ), WbRestApi::getRemoveItemDescription(), $responseFactory diff --git a/repo/rest-api/src/RouteHandlers/RemoveItemLabelRouteHandler.php b/repo/rest-api/src/RouteHandlers/RemoveItemLabelRouteHandler.php index 10680409d7..4f9af10e82 100644 --- a/repo/rest-api/src/RouteHandlers/RemoveItemLabelRouteHandler.php +++ b/repo/rest-api/src/RouteHandlers/RemoveItemLabelRouteHandler.php @@ -2,6 +2,7 @@ namespace Wikibase\Repo\RestApi\RouteHandlers; +use MediaWiki\HookContainer\HookRunner; use MediaWiki\MediaWikiServices; use MediaWiki\Rest\Handler; use MediaWiki\Rest\RequestInterface; @@ -65,7 +66,7 @@ public static function factory(): Handler { WbRestApi::getPreconditionMiddlewareFactory()->newPreconditionMiddleware( fn( RequestInterface $request ): string => $request->getPathParam( self::ITEM_ID_PATH_PARAM ) ), - new TempUserCreationResponseHeaderMiddleware(), + new TempUserCreationResponseHeaderMiddleware( new HookRunner( MediaWikiServices::getInstance()->getHookContainer() ) ), ] ), $responseFactory ); diff --git a/repo/rest-api/src/RouteHandlers/RemoveItemStatementRouteHandler.php b/repo/rest-api/src/RouteHandlers/RemoveItemStatementRouteHandler.php index 0fa03212ee..dad7105438 100644 --- a/repo/rest-api/src/RouteHandlers/RemoveItemStatementRouteHandler.php +++ b/repo/rest-api/src/RouteHandlers/RemoveItemStatementRouteHandler.php @@ -2,6 +2,7 @@ namespace Wikibase\Repo\RestApi\RouteHandlers; +use MediaWiki\HookContainer\HookRunner; use MediaWiki\MediaWikiServices; use MediaWiki\Rest\Handler; use MediaWiki\Rest\RequestInterface; @@ -69,7 +70,7 @@ public static function factory(): Handler { self::STATEMENT_ID_PATH_PARAM, self::ITEM_ID_PATH_PARAM ), - new TempUserCreationResponseHeaderMiddleware(), + new TempUserCreationResponseHeaderMiddleware( new HookRunner( MediaWikiServices::getInstance()->getHookContainer() ) ), ] ) ); } diff --git a/repo/rest-api/src/RouteHandlers/RemovePropertyDescriptionRouteHandler.php b/repo/rest-api/src/RouteHandlers/RemovePropertyDescriptionRouteHandler.php index 8873e37c01..04821ff58b 100644 --- a/repo/rest-api/src/RouteHandlers/RemovePropertyDescriptionRouteHandler.php +++ b/repo/rest-api/src/RouteHandlers/RemovePropertyDescriptionRouteHandler.php @@ -2,6 +2,7 @@ namespace Wikibase\Repo\RestApi\RouteHandlers; +use MediaWiki\HookContainer\HookRunner; use MediaWiki\MediaWikiServices; use MediaWiki\Rest\Handler; use MediaWiki\Rest\RequestInterface; @@ -64,7 +65,7 @@ public static function factory(): Handler { WbRestApi::getPreconditionMiddlewareFactory()->newPreconditionMiddleware( fn( RequestInterface $request ): string => $request->getPathParam( self::PROPERTY_ID_PATH_PARAM ) ), - new TempUserCreationResponseHeaderMiddleware(), + new TempUserCreationResponseHeaderMiddleware( new HookRunner( MediaWikiServices::getInstance()->getHookContainer() ) ), ] ), $responseFactory ); @@ -103,6 +104,7 @@ private function newSuccessHttpResponse(): Response { $httpResponse->setStatus( 200 ); $httpResponse->setHeader( 'Content-Type', 'application/json' ); $httpResponse->setHeader( 'Content-Language', 'en' ); + $httpResponse->setBody( new StringStream( '"Description deleted"' ) ); return $httpResponse; diff --git a/repo/rest-api/src/RouteHandlers/RemovePropertyLabelRouteHandler.php b/repo/rest-api/src/RouteHandlers/RemovePropertyLabelRouteHandler.php index fe0c426a22..b4dc4ffb2b 100644 --- a/repo/rest-api/src/RouteHandlers/RemovePropertyLabelRouteHandler.php +++ b/repo/rest-api/src/RouteHandlers/RemovePropertyLabelRouteHandler.php @@ -2,6 +2,7 @@ namespace Wikibase\Repo\RestApi\RouteHandlers; +use MediaWiki\HookContainer\HookRunner; use MediaWiki\MediaWikiServices; use MediaWiki\Rest\Handler; use MediaWiki\Rest\RequestInterface; @@ -64,7 +65,7 @@ public static function factory(): Handler { WbRestApi::getPreconditionMiddlewareFactory()->newPreconditionMiddleware( fn( RequestInterface $request ): string => $request->getPathParam( self::PROPERTY_ID_PATH_PARAM ) ), - new TempUserCreationResponseHeaderMiddleware(), + new TempUserCreationResponseHeaderMiddleware( new HookRunner( MediaWikiServices::getInstance()->getHookContainer() ) ), ] ), $responseFactory ); diff --git a/repo/rest-api/src/RouteHandlers/RemovePropertyStatementRouteHandler.php b/repo/rest-api/src/RouteHandlers/RemovePropertyStatementRouteHandler.php index 156e6ce82e..4c441e3c0a 100644 --- a/repo/rest-api/src/RouteHandlers/RemovePropertyStatementRouteHandler.php +++ b/repo/rest-api/src/RouteHandlers/RemovePropertyStatementRouteHandler.php @@ -2,6 +2,7 @@ namespace Wikibase\Repo\RestApi\RouteHandlers; +use MediaWiki\HookContainer\HookRunner; use MediaWiki\MediaWikiServices; use MediaWiki\Rest\Handler; use MediaWiki\Rest\RequestInterface; @@ -69,7 +70,7 @@ public static function factory(): Handler { self::STATEMENT_ID_PATH_PARAM, self::PROPERTY_ID_PATH_PARAM ), - new TempUserCreationResponseHeaderMiddleware(), + new TempUserCreationResponseHeaderMiddleware( new HookRunner( MediaWikiServices::getInstance()->getHookContainer() ) ), ] ) ); } diff --git a/repo/rest-api/src/RouteHandlers/RemoveSitelinkRouteHandler.php b/repo/rest-api/src/RouteHandlers/RemoveSitelinkRouteHandler.php index 9d7e612614..72cd6b97c2 100644 --- a/repo/rest-api/src/RouteHandlers/RemoveSitelinkRouteHandler.php +++ b/repo/rest-api/src/RouteHandlers/RemoveSitelinkRouteHandler.php @@ -2,6 +2,7 @@ namespace Wikibase\Repo\RestApi\RouteHandlers; +use MediaWiki\HookContainer\HookRunner; use MediaWiki\MediaWikiServices; use MediaWiki\Rest\RequestInterface; use MediaWiki\Rest\Response; @@ -60,7 +61,7 @@ public static function factory(): self { WbRestApi::getPreconditionMiddlewareFactory()->newPreconditionMiddleware( fn( RequestInterface $request ): string => $request->getPathParam( self::ITEM_ID_PATH_PARAM ) ), - new TempUserCreationResponseHeaderMiddleware(), + new TempUserCreationResponseHeaderMiddleware( new HookRunner( MediaWikiServices::getInstance()->getHookContainer() ) ), ] ), $responseFactory ); diff --git a/repo/rest-api/src/RouteHandlers/RemoveStatementRouteHandler.php b/repo/rest-api/src/RouteHandlers/RemoveStatementRouteHandler.php index 61a6384cb0..0ea1180192 100644 --- a/repo/rest-api/src/RouteHandlers/RemoveStatementRouteHandler.php +++ b/repo/rest-api/src/RouteHandlers/RemoveStatementRouteHandler.php @@ -2,6 +2,7 @@ namespace Wikibase\Repo\RestApi\RouteHandlers; +use MediaWiki\HookContainer\HookRunner; use MediaWiki\MediaWikiServices; use MediaWiki\Rest\Handler; use MediaWiki\Rest\RequestInterface; @@ -70,7 +71,7 @@ public static function factory(): Handler { WbRestApi::getStatementRedirectMiddlewareFactory()->newStatementRedirectMiddleware( self::STATEMENT_ID_PATH_PARAM ), - new TempUserCreationResponseHeaderMiddleware(), + new TempUserCreationResponseHeaderMiddleware( new HookRunner( MediaWikiServices::getInstance()->getHookContainer() ) ), ] ) ); } diff --git a/repo/rest-api/src/RouteHandlers/ReplaceItemStatementRouteHandler.php b/repo/rest-api/src/RouteHandlers/ReplaceItemStatementRouteHandler.php index 9263530729..b265b451df 100644 --- a/repo/rest-api/src/RouteHandlers/ReplaceItemStatementRouteHandler.php +++ b/repo/rest-api/src/RouteHandlers/ReplaceItemStatementRouteHandler.php @@ -2,6 +2,7 @@ namespace Wikibase\Repo\RestApi\RouteHandlers; +use MediaWiki\HookContainer\HookRunner; use MediaWiki\MediaWikiServices; use MediaWiki\Rest\Handler; use MediaWiki\Rest\RequestInterface; @@ -71,7 +72,7 @@ public static function factory(): Handler { self::STATEMENT_ID_PATH_PARAM, self::ITEM_ID_PATH_PARAM ), - new TempUserCreationResponseHeaderMiddleware(), + new TempUserCreationResponseHeaderMiddleware( new HookRunner( MediaWikiServices::getInstance()->getHookContainer() ) ), ] ), $responseFactory ); diff --git a/repo/rest-api/src/RouteHandlers/ReplacePropertyStatementRouteHandler.php b/repo/rest-api/src/RouteHandlers/ReplacePropertyStatementRouteHandler.php index ed8b269220..995b189573 100644 --- a/repo/rest-api/src/RouteHandlers/ReplacePropertyStatementRouteHandler.php +++ b/repo/rest-api/src/RouteHandlers/ReplacePropertyStatementRouteHandler.php @@ -2,6 +2,7 @@ namespace Wikibase\Repo\RestApi\RouteHandlers; +use MediaWiki\HookContainer\HookRunner; use MediaWiki\MediaWikiServices; use MediaWiki\Rest\Handler; use MediaWiki\Rest\RequestInterface; @@ -70,7 +71,7 @@ public static function factory(): Handler { self::STATEMENT_ID_PATH_PARAM, self::PROPERTY_ID_PATH_PARAM ), - new TempUserCreationResponseHeaderMiddleware(), + new TempUserCreationResponseHeaderMiddleware( new HookRunner( MediaWikiServices::getInstance()->getHookContainer() ) ), ] ), $responseFactory ); diff --git a/repo/rest-api/src/RouteHandlers/ReplaceStatementRouteHandler.php b/repo/rest-api/src/RouteHandlers/ReplaceStatementRouteHandler.php index 3cad4063ce..95ce8e5b96 100644 --- a/repo/rest-api/src/RouteHandlers/ReplaceStatementRouteHandler.php +++ b/repo/rest-api/src/RouteHandlers/ReplaceStatementRouteHandler.php @@ -2,6 +2,7 @@ namespace Wikibase\Repo\RestApi\RouteHandlers; +use MediaWiki\HookContainer\HookRunner; use MediaWiki\MediaWikiServices; use MediaWiki\Rest\Handler; use MediaWiki\Rest\RequestInterface; @@ -72,7 +73,7 @@ public static function factory(): Handler { WbRestApi::getStatementRedirectMiddlewareFactory()->newStatementRedirectMiddleware( self::STATEMENT_ID_PATH_PARAM ), - new TempUserCreationResponseHeaderMiddleware(), + new TempUserCreationResponseHeaderMiddleware( new HookRunner( MediaWikiServices::getInstance()->getHookContainer() ) ), ] ), $responseFactory ); diff --git a/repo/rest-api/src/RouteHandlers/SetItemDescriptionRouteHandler.php b/repo/rest-api/src/RouteHandlers/SetItemDescriptionRouteHandler.php index 11ca87011b..9a2f446522 100644 --- a/repo/rest-api/src/RouteHandlers/SetItemDescriptionRouteHandler.php +++ b/repo/rest-api/src/RouteHandlers/SetItemDescriptionRouteHandler.php @@ -2,6 +2,7 @@ namespace Wikibase\Repo\RestApi\RouteHandlers; +use MediaWiki\HookContainer\HookRunner; use MediaWiki\MediaWikiServices; use MediaWiki\Rest\RequestInterface; use MediaWiki\Rest\Response; @@ -62,7 +63,7 @@ public static function factory(): self { WbRestApi::getPreconditionMiddlewareFactory()->newPreconditionMiddleware( fn( RequestInterface $request ): string => $request->getPathParam( self::ITEM_ID_PATH_PARAM ) ), - new TempUserCreationResponseHeaderMiddleware(), + new TempUserCreationResponseHeaderMiddleware( new HookRunner( MediaWikiServices::getInstance()->getHookContainer() ) ), ] ) ); } diff --git a/repo/rest-api/src/RouteHandlers/SetItemLabelRouteHandler.php b/repo/rest-api/src/RouteHandlers/SetItemLabelRouteHandler.php index c66b5b5002..ee9eb9487b 100644 --- a/repo/rest-api/src/RouteHandlers/SetItemLabelRouteHandler.php +++ b/repo/rest-api/src/RouteHandlers/SetItemLabelRouteHandler.php @@ -2,6 +2,7 @@ namespace Wikibase\Repo\RestApi\RouteHandlers; +use MediaWiki\HookContainer\HookRunner; use MediaWiki\MediaWikiServices; use MediaWiki\Rest\Handler; use MediaWiki\Rest\RequestInterface; @@ -59,7 +60,7 @@ public static function factory(): Handler { WbRestApi::getPreconditionMiddlewareFactory()->newPreconditionMiddleware( fn( RequestInterface $request ): string => $request->getPathParam( self::ITEM_ID_PATH_PARAM ) ), - new TempUserCreationResponseHeaderMiddleware(), + new TempUserCreationResponseHeaderMiddleware( new HookRunner( MediaWikiServices::getInstance()->getHookContainer() ) ), ] ), $responseFactory ); diff --git a/repo/rest-api/src/RouteHandlers/SetPropertyDescriptionRouteHandler.php b/repo/rest-api/src/RouteHandlers/SetPropertyDescriptionRouteHandler.php index 9153ad511c..6cf59a660a 100644 --- a/repo/rest-api/src/RouteHandlers/SetPropertyDescriptionRouteHandler.php +++ b/repo/rest-api/src/RouteHandlers/SetPropertyDescriptionRouteHandler.php @@ -2,6 +2,7 @@ namespace Wikibase\Repo\RestApi\RouteHandlers; +use MediaWiki\HookContainer\HookRunner; use MediaWiki\MediaWikiServices; use MediaWiki\Rest\RequestInterface; use MediaWiki\Rest\Response; @@ -61,7 +62,7 @@ public static function factory(): self { WbRestApi::getPreconditionMiddlewareFactory()->newPreconditionMiddleware( fn( RequestInterface $request ): string => $request->getPathParam( self::PROPERTY_ID_PATH_PARAM ) ), - new TempUserCreationResponseHeaderMiddleware(), + new TempUserCreationResponseHeaderMiddleware( new HookRunner( MediaWikiServices::getInstance()->getHookContainer() ) ), ] ), ); } diff --git a/repo/rest-api/src/RouteHandlers/SetPropertyLabelRouteHandler.php b/repo/rest-api/src/RouteHandlers/SetPropertyLabelRouteHandler.php index 91f33f2971..41c8a21dba 100644 --- a/repo/rest-api/src/RouteHandlers/SetPropertyLabelRouteHandler.php +++ b/repo/rest-api/src/RouteHandlers/SetPropertyLabelRouteHandler.php @@ -2,6 +2,7 @@ namespace Wikibase\Repo\RestApi\RouteHandlers; +use MediaWiki\HookContainer\HookRunner; use MediaWiki\MediaWikiServices; use MediaWiki\Rest\Handler; use MediaWiki\Rest\RequestInterface; @@ -63,7 +64,7 @@ public static function factory(): Handler { WbRestApi::getPreconditionMiddlewareFactory()->newPreconditionMiddleware( fn( RequestInterface $request ): string => $request->getPathParam( self::PROPERTY_ID_PATH_PARAM ) ), - new TempUserCreationResponseHeaderMiddleware(), + new TempUserCreationResponseHeaderMiddleware( new HookRunner( MediaWikiServices::getInstance()->getHookContainer() ) ), ] ) ); } diff --git a/repo/rest-api/src/RouteHandlers/SetSitelinkRouteHandler.php b/repo/rest-api/src/RouteHandlers/SetSitelinkRouteHandler.php index 1f2247fcb0..407e867c5a 100644 --- a/repo/rest-api/src/RouteHandlers/SetSitelinkRouteHandler.php +++ b/repo/rest-api/src/RouteHandlers/SetSitelinkRouteHandler.php @@ -2,6 +2,7 @@ namespace Wikibase\Repo\RestApi\RouteHandlers; +use MediaWiki\HookContainer\HookRunner; use MediaWiki\MediaWikiServices; use MediaWiki\Rest\Handler; use MediaWiki\Rest\RequestInterface; @@ -70,7 +71,7 @@ public static function factory(): Handler { WbRestApi::getPreconditionMiddlewareFactory()->newPreconditionMiddleware( fn( RequestInterface $request ): string => $request->getPathParam( self::ITEM_ID_PATH_PARAM ) ), - new TempUserCreationResponseHeaderMiddleware(), + new TempUserCreationResponseHeaderMiddleware( new HookRunner( MediaWikiServices::getInstance()->getHookContainer() ) ), ] ) ); } diff --git a/repo/rest-api/tests/phpunit/RouteHandlers/Middleware/TempUserCreationResponseHeaderMiddlewareTest.php b/repo/rest-api/tests/phpunit/RouteHandlers/Middleware/TempUserCreationResponseHeaderMiddlewareTest.php index ec05cdde54..4e5980e31b 100644 --- a/repo/rest-api/tests/phpunit/RouteHandlers/Middleware/TempUserCreationResponseHeaderMiddlewareTest.php +++ b/repo/rest-api/tests/phpunit/RouteHandlers/Middleware/TempUserCreationResponseHeaderMiddlewareTest.php @@ -2,6 +2,7 @@ namespace Wikibase\Repo\Tests\RestApi\RouteHandlers\Middleware; +use MediaWiki\HookContainer\HookRunner; use MediaWiki\Permissions\Authority; use MediaWiki\Rest\Response; use MediaWiki\Rest\SimpleHandler; @@ -19,7 +20,7 @@ */ class TempUserCreationResponseHeaderMiddlewareTest extends TestCase { - public function testAddsHeaderWhenNewTempUserIsCreatedAndDifferentFromAuthorityUser(): void { + public function testAddsHeadersWhenNewTempUserIsCreatedAndDifferentFromAuthorityUser(): void { $user = $this->createMock( User::class ); $user->method( 'isTemp' )->willReturn( true ); $user->method( 'getName' )->willReturn( 'tempUser123' ); @@ -34,14 +35,58 @@ public function testAddsHeaderWhenNewTempUserIsCreatedAndDifferentFromAuthorityU $routeHandler->method( 'getSession' )->willReturn( $session ); $routeHandler->method( 'getAuthority' )->willReturn( $authority ); + $hookRunner = $this->createMock( HookRunner::class ); + $hookRunner->method( 'onTempUserCreatedRedirect' )->willReturnCallback( + function( $session, $user, $returnTo, $returnToQuery, $returnToAnchor, &$redirectUrl ): void { + $redirectUrl = 'https://en.wikipedia.org/wiki/Test'; + } + ); + $expectedResponse = new Response(); - $middlewareResponse = ( new TempUserCreationResponseHeaderMiddleware() )->run( + $middlewareResponse = ( new TempUserCreationResponseHeaderMiddleware( $hookRunner ) )->run( $routeHandler, fn() => $expectedResponse ); $this->assertSame( $expectedResponse, $middlewareResponse ); $this->assertSame( 'tempUser123', $middlewareResponse->getHeaderLine( 'X-Temporary-User-Created' ) ); + $this->assertSame( + 'https://en.wikipedia.org/wiki/Test', + $middlewareResponse->getHeaderLine( 'X-Temporary-User-Redirect' ) + ); + } + + public function testAddsHeaderWhenNewTempUserIsCreatedWithoutRedirectUrl(): void { + $user = $this->createMock( User::class ); + $user->method( 'isTemp' )->willReturn( true ); + $user->method( 'getName' )->willReturn( 'tempUserWithoutRedirect' ); + + $authority = $this->createMock( Authority::class ); + $authority->method( 'getUser' )->willReturn( new User() ); + + $session = $this->createMock( Session::class ); + $session->method( 'getUser' )->willReturn( $user ); + + $routeHandler = $this->createMock( SimpleHandler::class ); + $routeHandler->method( 'getSession' )->willReturn( $session ); + $routeHandler->method( 'getAuthority' )->willReturn( $authority ); + + $hookRunner = $this->createMock( HookRunner::class ); + $hookRunner->method( 'onTempUserCreatedRedirect' )->willReturnCallback( + function( $session, $user, $returnTo, $returnToQuery, $returnToAnchor, &$redirectUrl ): void { + $redirectUrl = ''; + } + ); + + $expectedResponse = new Response(); + $middlewareResponse = ( new TempUserCreationResponseHeaderMiddleware( $hookRunner ) )->run( + $routeHandler, + fn() => $expectedResponse + ); + + $this->assertSame( $expectedResponse, $middlewareResponse ); + $this->assertSame( 'tempUserWithoutRedirect', $middlewareResponse->getHeaderLine( 'X-Temporary-User-Created' ) ); + $this->assertSame( '', $middlewareResponse->getHeaderLine( 'X-Temporary-User-Redirect' ) ); } public function testDoesNotAddHeaderWhenUserEqualsAuthorityUser(): void { @@ -58,14 +103,17 @@ public function testDoesNotAddHeaderWhenUserEqualsAuthorityUser(): void { $routeHandler->method( 'getSession' )->willReturn( $session ); $routeHandler->method( 'getAuthority' )->willReturn( $authority ); + $hookRunner = $this->createMock( HookRunner::class ); + $expectedResponse = new Response(); - $middlewareResponse = ( new TempUserCreationResponseHeaderMiddleware() )->run( + $middlewareResponse = ( new TempUserCreationResponseHeaderMiddleware( $hookRunner ) )->run( $routeHandler, fn() => $expectedResponse ); $this->assertSame( $expectedResponse, $middlewareResponse ); $this->assertSame( '', $middlewareResponse->getHeaderLine( 'X-Temporary-User-Created' ) ); + $this->assertSame( '', $middlewareResponse->getHeaderLine( 'X-Temporary-User-Redirect' ) ); } public function testDoesNotAddHeaderWhenUserIsNotTemporary(): void { @@ -82,13 +130,16 @@ public function testDoesNotAddHeaderWhenUserIsNotTemporary(): void { $routeHandler->method( 'getSession' )->willReturn( $session ); $routeHandler->method( 'getAuthority' )->willReturn( $authority ); + $hookRunner = $this->createMock( HookRunner::class ); + $expectedResponse = new Response(); - $middlewareResponse = ( new TempUserCreationResponseHeaderMiddleware() )->run( + $middlewareResponse = ( new TempUserCreationResponseHeaderMiddleware( $hookRunner ) )->run( $routeHandler, fn() => $expectedResponse ); $this->assertSame( $expectedResponse, $middlewareResponse ); $this->assertSame( '', $middlewareResponse->getHeaderLine( 'X-Temporary-User-Created' ) ); + $this->assertSame( '', $middlewareResponse->getHeaderLine( 'X-Temporary-User-Redirect' ) ); } }