diff options
Diffstat (limited to 'tests/Unit/Middleware/RouteDispatcherServiceProviderTest.php')
-rw-r--r-- | tests/Unit/Middleware/RouteDispatcherServiceProviderTest.php | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/tests/Unit/Middleware/RouteDispatcherServiceProviderTest.php b/tests/Unit/Middleware/RouteDispatcherServiceProviderTest.php new file mode 100644 index 00000000..ca784c73 --- /dev/null +++ b/tests/Unit/Middleware/RouteDispatcherServiceProviderTest.php @@ -0,0 +1,65 @@ +<?php + +namespace Engelsystem\Test\Unit\Middleware; + +use Engelsystem\Middleware\LegacyMiddleware; +use Engelsystem\Middleware\RouteDispatcher; +use Engelsystem\Middleware\RouteDispatcherServiceProvider; +use Engelsystem\Test\Unit\ServiceProviderTest; +use FastRoute\Dispatcher as FastRouteDispatcher; +use Illuminate\Contracts\Container\ContextualBindingBuilder; +use PHPUnit\Framework\MockObject\MockObject; +use Psr\Http\Server\MiddlewareInterface; + +class RouteDispatcherServiceProviderTest extends ServiceProviderTest +{ + /** + * @covers \Engelsystem\Middleware\RouteDispatcherServiceProvider::register() + */ + public function testRegister() + { + $bindingBuilder = $this->createMock(ContextualBindingBuilder::class); + $routeDispatcher = $this->getMockForAbstractClass(FastRouteDispatcher::class); + + $app = $this->getApp(['alias', 'when']); + + $app->expects($this->once()) + ->method('alias') + ->with(RouteDispatcher::class, 'route.dispatcher'); + + $app->expects($this->exactly(2)) + ->method('when') + ->with(RouteDispatcher::class) + ->willReturn($bindingBuilder); + + $bindingBuilder->expects($this->exactly(2)) + ->method('needs') + ->withConsecutive( + [FastRouteDispatcher::class], + [MiddlewareInterface::class] + ) + ->willReturn($bindingBuilder); + + $bindingBuilder->expects($this->exactly(2)) + ->method('give') + ->with($this->callback(function ($subject) { + if (is_callable($subject)) { + $subject(); + } + + return is_callable($subject) || $subject == LegacyMiddleware::class; + })); + + /** @var RouteDispatcherServiceProvider|MockObject $serviceProvider */ + $serviceProvider = $this->getMockBuilder(RouteDispatcherServiceProvider::class) + ->setConstructorArgs([$app]) + ->setMethods(['generateRouting']) + ->getMock(); + + $serviceProvider->expects($this->once()) + ->method('generateRouting') + ->willReturn($routeDispatcher); + + $serviceProvider->register(); + } +} |