44
55namespace Moon \HttpMiddleware \Unit ;
66
7+ use Interop \Http \ServerMiddleware \DelegateInterface ;
78use Interop \Http \ServerMiddleware \MiddlewareInterface ;
89use Moon \HttpMiddleware \Delegate ;
910use Moon \HttpMiddleware \Exception \InvalidArgumentException ;
1011use Moon \HttpMiddleware \Unit \Fixture \PlusOneMiddleware ;
1112use Moon \HttpMiddleware \Unit \Fixture \PlusTwoMiddleware ;
1213use Moon \HttpMiddleware \Unit \Fixture \StoppingMiddleware ;
1314use PHPUnit \Framework \TestCase ;
15+ use Prophecy \Argument ;
16+ use Psr \Container \ContainerInterface ;
1417use Psr \Http \Message \ResponseInterface ;
1518use Psr \Http \Message \ServerRequestInterface ;
1619
1720class DelegateTest extends TestCase
1821{
19- public function testInvlidArrayThrowInvalidArgumentException ()
20- {
21- $ this ->expectException (InvalidArgumentException::class);
22- $ this ->expectExceptionMessage ('All the middlewares must implement ' . MiddlewareInterface::class);
23- new Delegate (['invalid object ' ], function () {
24- });
25- }
26-
2722 public function testDefaultCallbackIsCalledOnEmptyMiddlewareStack ()
2823 {
2924 $ requestMock = $ this ->prophesize (ServerRequestInterface::class)->reveal ();
@@ -67,4 +62,69 @@ public function testMiddlewareStackStop()
6762
6863 $ this ->assertSame ($ responseMock , $ delegate ->process ($ requestMock ));
6964 }
65+
66+ public function testInvalidLazyLoadingMiddlewareFromContainer ()
67+ {
68+ $ this ->expectException (InvalidArgumentException::class);
69+
70+ $ requestMock = $ this ->prophesize (ServerRequestInterface::class)->reveal ();
71+ $ containerProphecy = $ this ->prophesize (ContainerInterface::class);
72+ $ containerProphecy ->has ('InvalidMiddleware ' )->shouldBeCalled (1 )->willReturn (true );
73+ $ containerProphecy ->get ('InvalidMiddleware ' )->shouldBeCalled (1 )->willReturn (new \SplStack ());
74+ $ containerMock = $ containerProphecy ->reveal ();
75+
76+ $ delegate = new Delegate (['InvalidMiddleware ' ], function () {
77+ }, $ containerMock );
78+
79+ $ delegate ->process ($ requestMock );
80+ }
81+
82+ public function testLazyLoadingMiddlewareFromContainer ()
83+ {
84+ $ requestMock = $ this ->prophesize (ServerRequestInterface::class)->reveal ();
85+ $ responseMock = $ this ->prophesize (ResponseInterface::class)->reveal ();
86+ $ middlewareProphecy = $ this ->prophesize (MiddlewareInterface::class);
87+ $ middlewareProphecy ->process (
88+ Argument::type (ServerRequestInterface::class), Argument::type (DelegateInterface::class)
89+ )->shouldBeCalled (1 )->willReturn ($ responseMock );
90+ $ middlewareMock = $ middlewareProphecy ->reveal ();
91+ $ containerProphecy = $ this ->prophesize (ContainerInterface::class);
92+ $ containerProphecy ->has ('validMiddleware ' )->shouldBeCalled (1 )->willReturn (true );
93+ $ containerProphecy ->get ('validMiddleware ' )->shouldBeCalled (1 )->willReturn ($ middlewareMock );
94+ $ containerMock = $ containerProphecy ->reveal ();
95+
96+ $ delegate = new Delegate (['validMiddleware ' ], function () {
97+ }, $ containerMock );
98+
99+ $ delegate ->process ($ requestMock );
100+ }
101+
102+ public function testInvalidContainerEntry ()
103+ {
104+ $ this ->expectException (InvalidArgumentException::class);
105+
106+ $ requestMock = $ this ->prophesize (ServerRequestInterface::class)->reveal ();
107+ $ containerProphecy = $ this ->prophesize (ContainerInterface::class);
108+ $ containerProphecy ->has ('InvalidMiddleware ' )->shouldBeCalled (1 )->willReturn (false );
109+ $ containerProphecy ->get ('InvalidMiddleware ' )->shouldNotBeCalled (1 );
110+ $ containerMock = $ containerProphecy ->reveal ();
111+
112+ $ delegate = new Delegate (['InvalidMiddleware ' ], function () {
113+ }, $ containerMock );
114+
115+ $ delegate ->process ($ requestMock );
116+ }
117+
118+
119+ public function testInvalidMiddlewareAndContainerNotPassed ()
120+ {
121+ $ this ->expectException (InvalidArgumentException::class);
122+
123+ $ requestMock = $ this ->prophesize (ServerRequestInterface::class)->reveal ();
124+
125+ $ delegate = new Delegate (['InvalidMiddleware ' ], function () {
126+ });
127+
128+ $ delegate ->process ($ requestMock );
129+ }
70130}
0 commit comments