nginxsonarrradarrplexorganizrdashboardapplication-dashboardmuximuxlandingpagestartpagelandinghtpcserverhomepagesabnzbdheimdallembycouchpotatonzbgetbookmark
		
		
		
		
			You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							237 lines
						
					
					
						
							8.1 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							237 lines
						
					
					
						
							8.1 KiB
						
					
					
				
								<?php
							 | 
						|
								
							 | 
						|
								/*
							 | 
						|
								 * This file is part of the Symfony package.
							 | 
						|
								 *
							 | 
						|
								 * (c) Fabien Potencier <fabien@symfony.com>
							 | 
						|
								 *
							 | 
						|
								 * For the full copyright and license information, please view the LICENSE
							 | 
						|
								 * file that was distributed with this source code.
							 | 
						|
								 */
							 | 
						|
								
							 | 
						|
								namespace Symfony\Component\HttpKernel\Tests\Controller;
							 | 
						|
								
							 | 
						|
								use Psr\Container\ContainerInterface;
							 | 
						|
								use Psr\Log\LoggerInterface;
							 | 
						|
								use Symfony\Component\DependencyInjection\Container;
							 | 
						|
								use Symfony\Component\HttpFoundation\Request;
							 | 
						|
								use Symfony\Component\HttpKernel\Controller\ContainerControllerResolver;
							 | 
						|
								
							 | 
						|
								class ContainerControllerResolverTest extends ControllerResolverTest
							 | 
						|
								{
							 | 
						|
								    public function testGetControllerServiceWithSingleColon()
							 | 
						|
								    {
							 | 
						|
								        $service = new ControllerTestService('foo');
							 | 
						|
								
							 | 
						|
								        $container = $this->createMockContainer();
							 | 
						|
								        $container->expects($this->once())
							 | 
						|
								            ->method('has')
							 | 
						|
								            ->with('foo')
							 | 
						|
								            ->willReturn(true);
							 | 
						|
								        $container->expects($this->once())
							 | 
						|
								            ->method('get')
							 | 
						|
								            ->with('foo')
							 | 
						|
								            ->willReturn($service)
							 | 
						|
								        ;
							 | 
						|
								
							 | 
						|
								        $resolver = $this->createControllerResolver(null, $container);
							 | 
						|
								        $request = Request::create('/');
							 | 
						|
								        $request->attributes->set('_controller', 'foo:action');
							 | 
						|
								
							 | 
						|
								        $controller = $resolver->getController($request);
							 | 
						|
								
							 | 
						|
								        $this->assertSame($service, $controller[0]);
							 | 
						|
								        $this->assertSame('action', $controller[1]);
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    public function testGetControllerService()
							 | 
						|
								    {
							 | 
						|
								        $service = new ControllerTestService('foo');
							 | 
						|
								
							 | 
						|
								        $container = $this->createMockContainer();
							 | 
						|
								        $container->expects($this->once())
							 | 
						|
								            ->method('has')
							 | 
						|
								            ->with('foo')
							 | 
						|
								            ->willReturn(true);
							 | 
						|
								        $container->expects($this->once())
							 | 
						|
								            ->method('get')
							 | 
						|
								            ->with('foo')
							 | 
						|
								            ->willReturn($service)
							 | 
						|
								        ;
							 | 
						|
								
							 | 
						|
								        $resolver = $this->createControllerResolver(null, $container);
							 | 
						|
								        $request = Request::create('/');
							 | 
						|
								        $request->attributes->set('_controller', 'foo::action');
							 | 
						|
								
							 | 
						|
								        $controller = $resolver->getController($request);
							 | 
						|
								
							 | 
						|
								        $this->assertSame($service, $controller[0]);
							 | 
						|
								        $this->assertSame('action', $controller[1]);
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    public function testGetControllerInvokableService()
							 | 
						|
								    {
							 | 
						|
								        $service = new InvokableControllerService('bar');
							 | 
						|
								
							 | 
						|
								        $container = $this->createMockContainer();
							 | 
						|
								        $container->expects($this->once())
							 | 
						|
								            ->method('has')
							 | 
						|
								            ->with('foo')
							 | 
						|
								            ->willReturn(true)
							 | 
						|
								        ;
							 | 
						|
								        $container->expects($this->once())
							 | 
						|
								            ->method('get')
							 | 
						|
								            ->with('foo')
							 | 
						|
								            ->willReturn($service)
							 | 
						|
								        ;
							 | 
						|
								
							 | 
						|
								        $resolver = $this->createControllerResolver(null, $container);
							 | 
						|
								        $request = Request::create('/');
							 | 
						|
								        $request->attributes->set('_controller', 'foo');
							 | 
						|
								
							 | 
						|
								        $controller = $resolver->getController($request);
							 | 
						|
								
							 | 
						|
								        $this->assertSame($service, $controller);
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    public function testGetControllerInvokableServiceWithClassNameAsName()
							 | 
						|
								    {
							 | 
						|
								        $service = new InvokableControllerService('bar');
							 | 
						|
								
							 | 
						|
								        $container = $this->createMockContainer();
							 | 
						|
								        $container->expects($this->once())
							 | 
						|
								            ->method('has')
							 | 
						|
								            ->with(InvokableControllerService::class)
							 | 
						|
								            ->willReturn(true)
							 | 
						|
								        ;
							 | 
						|
								        $container->expects($this->once())
							 | 
						|
								            ->method('get')
							 | 
						|
								            ->with(InvokableControllerService::class)
							 | 
						|
								            ->willReturn($service)
							 | 
						|
								        ;
							 | 
						|
								
							 | 
						|
								        $resolver = $this->createControllerResolver(null, $container);
							 | 
						|
								        $request = Request::create('/');
							 | 
						|
								        $request->attributes->set('_controller', InvokableControllerService::class);
							 | 
						|
								
							 | 
						|
								        $controller = $resolver->getController($request);
							 | 
						|
								
							 | 
						|
								        $this->assertSame($service, $controller);
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * Tests where the fallback instantiation fails due to required constructor arguments.
							 | 
						|
								     *
							 | 
						|
								     * @expectedException \InvalidArgumentException
							 | 
						|
								     * @expectedExceptionMessage Controller "Symfony\Component\HttpKernel\Tests\Controller\ControllerTestService" cannot be fetched from the container because it is private. Did you forget to tag the service with "controller.service_arguments"?
							 | 
						|
								     */
							 | 
						|
								    public function testExceptionWhenUsingRemovedControllerServiceWithClassNameAsName()
							 | 
						|
								    {
							 | 
						|
								        $container = $this->getMockBuilder(Container::class)->getMock();
							 | 
						|
								        $container->expects($this->once())
							 | 
						|
								            ->method('has')
							 | 
						|
								            ->with(ControllerTestService::class)
							 | 
						|
								            ->willReturn(false)
							 | 
						|
								        ;
							 | 
						|
								
							 | 
						|
								        $container->expects($this->atLeastOnce())
							 | 
						|
								            ->method('getRemovedIds')
							 | 
						|
								            ->with()
							 | 
						|
								            ->willReturn([ControllerTestService::class => true])
							 | 
						|
								        ;
							 | 
						|
								
							 | 
						|
								        $resolver = $this->createControllerResolver(null, $container);
							 | 
						|
								        $request = Request::create('/');
							 | 
						|
								        $request->attributes->set('_controller', [ControllerTestService::class, 'action']);
							 | 
						|
								
							 | 
						|
								        $resolver->getController($request);
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * Tests where the fallback instantiation fails due to non-existing class.
							 | 
						|
								     *
							 | 
						|
								     * @expectedException \InvalidArgumentException
							 | 
						|
								     * @expectedExceptionMessage Controller "app.my_controller" cannot be fetched from the container because it is private. Did you forget to tag the service with "controller.service_arguments"?
							 | 
						|
								     */
							 | 
						|
								    public function testExceptionWhenUsingRemovedControllerService()
							 | 
						|
								    {
							 | 
						|
								        $container = $this->getMockBuilder(Container::class)->getMock();
							 | 
						|
								        $container->expects($this->once())
							 | 
						|
								            ->method('has')
							 | 
						|
								            ->with('app.my_controller')
							 | 
						|
								            ->willReturn(false)
							 | 
						|
								        ;
							 | 
						|
								
							 | 
						|
								        $container->expects($this->atLeastOnce())
							 | 
						|
								            ->method('getRemovedIds')
							 | 
						|
								            ->with()
							 | 
						|
								            ->willReturn(['app.my_controller' => true])
							 | 
						|
								        ;
							 | 
						|
								
							 | 
						|
								        $resolver = $this->createControllerResolver(null, $container);
							 | 
						|
								
							 | 
						|
								        $request = Request::create('/');
							 | 
						|
								        $request->attributes->set('_controller', 'app.my_controller');
							 | 
						|
								        $resolver->getController($request);
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    public function getUndefinedControllers()
							 | 
						|
								    {
							 | 
						|
								        $tests = parent::getUndefinedControllers();
							 | 
						|
								        $tests[0] = ['foo', \InvalidArgumentException::class, 'Controller "foo" does neither exist as service nor as class'];
							 | 
						|
								        $tests[1] = ['oof::bar', \InvalidArgumentException::class, 'Controller "oof" does neither exist as service nor as class'];
							 | 
						|
								        $tests[2] = [['oof', 'bar'], \InvalidArgumentException::class, 'Controller "oof" does neither exist as service nor as class'];
							 | 
						|
								        $tests[] = [
							 | 
						|
								            [ControllerTestService::class, 'action'],
							 | 
						|
								            \InvalidArgumentException::class,
							 | 
						|
								            'Controller "Symfony\Component\HttpKernel\Tests\Controller\ControllerTestService" has required constructor arguments and does not exist in the container. Did you forget to define such a service?',
							 | 
						|
								        ];
							 | 
						|
								        $tests[] = [
							 | 
						|
								            ControllerTestService::class.'::action',
							 | 
						|
								            \InvalidArgumentException::class, 'Controller "Symfony\Component\HttpKernel\Tests\Controller\ControllerTestService" has required constructor arguments and does not exist in the container. Did you forget to define such a service?',
							 | 
						|
								        ];
							 | 
						|
								        $tests[] = [
							 | 
						|
								            InvokableControllerService::class,
							 | 
						|
								            \InvalidArgumentException::class,
							 | 
						|
								            'Controller "Symfony\Component\HttpKernel\Tests\Controller\InvokableControllerService" has required constructor arguments and does not exist in the container. Did you forget to define such a service?',
							 | 
						|
								        ];
							 | 
						|
								
							 | 
						|
								        return $tests;
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    protected function createControllerResolver(LoggerInterface $logger = null, ContainerInterface $container = null)
							 | 
						|
								    {
							 | 
						|
								        if (!$container) {
							 | 
						|
								            $container = $this->createMockContainer();
							 | 
						|
								        }
							 | 
						|
								
							 | 
						|
								        return new ContainerControllerResolver($container, $logger);
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    protected function createMockContainer()
							 | 
						|
								    {
							 | 
						|
								        return $this->getMockBuilder(ContainerInterface::class)->getMock();
							 | 
						|
								    }
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								class InvokableControllerService
							 | 
						|
								{
							 | 
						|
								    public function __construct($bar) // mandatory argument to prevent automatic instantiation
							 | 
						|
								    {
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    public function __invoke()
							 | 
						|
								    {
							 | 
						|
								    }
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								class ControllerTestService
							 | 
						|
								{
							 | 
						|
								    public function __construct($foo)
							 | 
						|
								    {
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    public function action()
							 | 
						|
								    {
							 | 
						|
								    }
							 | 
						|
								}
							 | 
						|
								
							 |