@@ -143,6 +143,7 @@ public function testInvokesHandlerWhenRouteImplicitlySupportsHeadAndSupportsGet(
143143 $ result = $ this ->prophesize (RouteResult::class);
144144 $ result ->isFailure ()->willReturn (false );
145145 $ result ->getMatchedRoute ()->will ([$ route , 'reveal ' ]);
146+ $ result ->getMatchedParams ()->willReturn ([]);
146147
147148 $ request ->withAttribute (RouteResult::class, $ result ->reveal ())->will ([$ request , 'reveal ' ]);
148149
@@ -157,4 +158,47 @@ public function testInvokesHandlerWhenRouteImplicitlySupportsHeadAndSupportsGet(
157158
158159 $ this ->assertSame ($ response ->reveal (), $ result );
159160 }
161+
162+ public function testInvokesHandlerWithRequestComposingRouteResultAndAttributes ()
163+ {
164+ $ result = $ this ->prophesize (RouteResult::class);
165+ $ result ->getMatchedRoute ()->willReturn (false );
166+
167+ $ request = $ this ->prophesize (ServerRequestInterface::class);
168+ $ request ->getMethod ()->willReturn (RequestMethod::METHOD_HEAD );
169+ $ request ->getAttribute (RouteResult::class)->will ([$ result , 'reveal ' ]);
170+ $ request ->withMethod (RequestMethod::METHOD_GET )->will ([$ request , 'reveal ' ]);
171+ $ request
172+ ->withAttribute (
173+ ImplicitHeadMiddleware::FORWARDED_HTTP_METHOD_ATTRIBUTE ,
174+ RequestMethod::METHOD_HEAD
175+ )
176+ ->will ([$ request , 'reveal ' ]);
177+
178+ $ response = $ this ->prophesize (ResponseInterface::class);
179+ $ response ->withBody ($ this ->stream ->reveal ())->will ([$ response , 'reveal ' ]);
180+
181+ $ route = $ this ->prophesize (Route::class);
182+
183+ $ parameters = ['foo ' => 'bar ' , 'baz ' => 'bat ' ];
184+ $ result = $ this ->prophesize (RouteResult::class);
185+ $ result ->isFailure ()->willReturn (false );
186+ $ result ->getMatchedRoute ()->will ([$ route , 'reveal ' ]);
187+ $ result ->getMatchedParams ()->willReturn ($ parameters )->shouldBeCalled ();
188+
189+ $ request ->withAttribute (RouteResult::class, $ result ->reveal ())->will ([$ request , 'reveal ' ]);
190+ $ request ->withAttribute ('foo ' , 'bar ' )->will ([$ request , 'reveal ' ])->shouldBeCalled ();
191+ $ request ->withAttribute ('baz ' , 'bat ' )->will ([$ request , 'reveal ' ])->shouldBeCalled ();
192+
193+ $ this ->router ->match ($ request )->will ([$ result , 'reveal ' ]);
194+
195+ $ handler = $ this ->prophesize (RequestHandlerInterface::class);
196+ $ handler
197+ ->handle (Argument::that ([$ request , 'reveal ' ]))
198+ ->will ([$ response , 'reveal ' ]);
199+
200+ $ result = $ this ->middleware ->process ($ request ->reveal (), $ handler ->reveal ());
201+
202+ $ this ->assertSame ($ response ->reveal (), $ result );
203+ }
160204}
0 commit comments