File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 44
55namespace SimpleSquid \SaloonOData \Concerns ;
66
7- use Saloon \Enums \PipeOrder ;
87use Saloon \Http \PendingRequest ;
98use SimpleSquid \SaloonOData \Enums \ODataVersion ;
109use SimpleSquid \SaloonOData \ODataQueryBuilder ;
2322 * applied consistently to all chained calls. (Pre-encoded `filterRaw()`
2423 * fragments are version-baked by the caller.)
2524 *
26- * Registers a request middleware that merges the builder's rendered params
27- * into the PendingRequest's query bag immediately before send.
25+ * Merges the builder's rendered params into the PendingRequest's query bag
26+ * at boot time — before Saloon's `MergeRequestProperties` step overlays
27+ * `$request->query()` and `defaultQuery()`. This means user-set query
28+ * params always take precedence over the builder for same-key conflicts.
2829 */
2930trait HasODataQuery
3031{
@@ -77,12 +78,6 @@ public function bootHasODataQuery(PendingRequest $pendingRequest): void
7778 }
7879 }
7980
80- $ pendingRequest ->middleware ()->onRequest (
81- static function (PendingRequest $ request ) use ($ builder ): void {
82- $ request ->query ()->merge ($ builder ->toArray ());
83- },
84- 'odata-merge-query ' ,
85- PipeOrder::LAST ,
86- );
81+ $ pendingRequest ->query ()->merge ($ builder ->toArray ());
8782 }
8883}
Original file line number Diff line number Diff line change 3434 ]);
3535});
3636
37+ it ('lets user query params override OData builder params for the same key ' , function (): void {
38+ $ mock = new MockClient ([MockResponse::make ([])]);
39+ $ connector = new TestConnector ;
40+ $ connector ->withMockClient ($ mock );
41+
42+ $ request = new TestRequest ;
43+ $ request ->odataQuery ()->top (10 );
44+ $ request ->query ()->add ('$top ' , '5 ' );
45+
46+ $ connector ->send ($ request );
47+
48+ expect ($ mock ->getLastPendingRequest ()?->query()->get ('$top ' ))->toBe ('5 ' );
49+ });
50+
3751it ('does not override params explicitly added by the user ' , function (): void {
3852 $ mock = new MockClient ([MockResponse::make ([])]);
3953 $ connector = new TestConnector ;
Original file line number Diff line number Diff line change 77use SimpleSquid \SaloonOData \Tests \Fixtures \TestConnector ;
88use SimpleSquid \SaloonOData \Tests \Fixtures \TestRequest ;
99
10- it ('does not register middleware when no OData params and no attributes apply ' , function (): void {
10+ it ('does not merge query params when no OData params and no attributes apply ' , function (): void {
1111 $ mock = new MockClient ([MockResponse::make ([])]);
1212 $ connector = new TestConnector ;
1313 $ connector ->withMockClient ($ mock );
You can’t perform that action at this time.
0 commit comments