@@ -509,4 +509,68 @@ public function testValidMiddlewareFiresDispatchableInterfaceEventListeners()
509
509
510
510
$ listener ->onDispatch ($ event );
511
511
}
512
+
513
+ /**
514
+ * @dataProvider alreadySetMvcEventResultProvider
515
+ *
516
+ * @param mixed $alreadySetResult
517
+ */
518
+ public function testWillNotDispatchWhenAnMvcEventResultIsAlreadySet ($ alreadySetResult )
519
+ {
520
+ $ middlewareName = uniqid ('middleware ' , true );
521
+ $ routeMatch = new RouteMatch (['middleware ' => $ middlewareName ]);
522
+ /* @var $application Application|\PHPUnit_Framework_MockObject_MockObject */
523
+ $ application = $ this ->createMock (Application::class);
524
+ $ middleware = $ this ->getMockBuilder (\stdClass::class)->setMethods (['__invoke ' ])->getMock ();
525
+ $ serviceManager = new ServiceManager ([
526
+ 'factories ' => [
527
+ 'EventManager ' => function () {
528
+ return new EventManager ();
529
+ },
530
+ ],
531
+ 'services ' => [
532
+ $ middlewareName => $ middleware ,
533
+ ],
534
+ ]);
535
+
536
+ $ application ->expects (self ::any ())->method ('getRequest ' )->willReturn (new Request ());
537
+ $ application ->expects (self ::any ())->method ('getEventManager ' )->willReturn (new EventManager ());
538
+ $ application ->expects (self ::any ())->method ('getServiceManager ' )->willReturn ($ serviceManager );
539
+ $ application ->expects (self ::any ())->method ('getResponse ' )->willReturn (new Response ());
540
+ $ middleware ->expects (self ::never ())->method ('__invoke ' );
541
+
542
+ $ event = new MvcEvent ();
543
+
544
+ $ event ->setResult ($ alreadySetResult ); // a result is already there - listener should bail out early
545
+ $ event ->setRequest (new Request ());
546
+ $ event ->setApplication ($ application );
547
+ $ event ->setError (Application::ERROR_CONTROLLER_CANNOT_DISPATCH );
548
+ $ event ->setRouteMatch ($ routeMatch );
549
+
550
+ $ listener = new MiddlewareListener ();
551
+
552
+ $ listener ->onDispatch ($ event );
553
+
554
+ self ::assertSame ($ alreadySetResult , $ event ->getResult (), 'The event result was not replaced ' );
555
+ }
556
+
557
+ /**
558
+ * @return mixed[][]
559
+ */
560
+ public function alreadySetMvcEventResultProvider ()
561
+ {
562
+ return [
563
+ [123 ],
564
+ [true ],
565
+ [false ],
566
+ [[]],
567
+ [new \stdClass ()],
568
+ [$ this ],
569
+ [$ this ->createMock (ModelInterface::class)],
570
+ [$ this ->createMock (Response::class)],
571
+ [['view model data ' => 'as an array ' ]],
572
+ [['foo ' => new \stdClass ()]],
573
+ ['a response string ' ],
574
+ ];
575
+ }
512
576
}
0 commit comments