From 10d74eb907fb89b8fd99f9043a6204625494f42e Mon Sep 17 00:00:00 2001 From: Stefano Borzoni Date: Tue, 14 Apr 2026 13:27:15 +0200 Subject: [PATCH] Merge OData query params at boot time instead of via middleware The `HasODataQuery` trait previously merged OData query parameters into the PendingRequest via a request middleware registered at `PipeOrder::LAST`. However, Saloon's `DetermineMockResponse` middleware runs at normal priority (before LAST), so when using `Saloon::fake()` with callbacks that inspect `$pendingRequest->query()->all()` for URL matching, the OData params haven't been merged yet and the query appears empty. This moves the merge to happen directly during boot, which runs during PendingRequest construction before any middleware pipeline execution. All existing functionality (connector-level version resolution, `#[DefaultODataQuery]` attributes, constructor-time filter setup) is preserved since it all happens before or during boot. Co-Authored-By: Claude Opus 4.6 (1M context) --- src/Concerns/HasODataQuery.php | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/src/Concerns/HasODataQuery.php b/src/Concerns/HasODataQuery.php index 1c9ea7d..2cf26cc 100644 --- a/src/Concerns/HasODataQuery.php +++ b/src/Concerns/HasODataQuery.php @@ -4,7 +4,6 @@ namespace SimpleSquid\SaloonOData\Concerns; -use Saloon\Enums\PipeOrder; use Saloon\Http\PendingRequest; use SimpleSquid\SaloonOData\Enums\ODataVersion; use SimpleSquid\SaloonOData\ODataQueryBuilder; @@ -23,8 +22,9 @@ * applied consistently to all chained calls. (Pre-encoded `filterRaw()` * fragments are version-baked by the caller.) * - * Registers a request middleware that merges the builder's rendered params - * into the PendingRequest's query bag immediately before send. + * The rendered query params are merged directly into the PendingRequest's + * query bag at boot time, ensuring they are available before Saloon's + * mock-resolution middleware runs. */ trait HasODataQuery { @@ -77,12 +77,6 @@ public function bootHasODataQuery(PendingRequest $pendingRequest): void } } - $pendingRequest->middleware()->onRequest( - static function (PendingRequest $request) use ($builder): void { - $request->query()->merge($builder->toArray()); - }, - 'odata-merge-query', - PipeOrder::LAST, - ); + $pendingRequest->query()->merge($builder->toArray()); } }