Merge branch '4.3' into 4.4
* 4.3: Added more tests for WebProfilerBundle
This commit is contained in:
commit
2a3de1a6d1
@ -11,9 +11,11 @@
|
|||||||
|
|
||||||
namespace Symfony\Bundle\WebProfilerBundle\Tests\Controller;
|
namespace Symfony\Bundle\WebProfilerBundle\Tests\Controller;
|
||||||
|
|
||||||
use PHPUnit\Framework\TestCase;
|
use Symfony\Bundle\FrameworkBundle\Client;
|
||||||
|
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
|
||||||
use Symfony\Bundle\WebProfilerBundle\Controller\ProfilerController;
|
use Symfony\Bundle\WebProfilerBundle\Controller\ProfilerController;
|
||||||
use Symfony\Bundle\WebProfilerBundle\Csp\ContentSecurityPolicyHandler;
|
use Symfony\Bundle\WebProfilerBundle\Csp\ContentSecurityPolicyHandler;
|
||||||
|
use Symfony\Bundle\WebProfilerBundle\Tests\Functional\WebProfilerBundleKernel;
|
||||||
use Symfony\Component\HttpFoundation\Request;
|
use Symfony\Component\HttpFoundation\Request;
|
||||||
use Symfony\Component\HttpFoundation\Response;
|
use Symfony\Component\HttpFoundation\Response;
|
||||||
use Symfony\Component\HttpKernel\DataCollector\DumpDataCollector;
|
use Symfony\Component\HttpKernel\DataCollector\DumpDataCollector;
|
||||||
@ -26,12 +28,101 @@ use Twig\Environment;
|
|||||||
use Twig\Loader\LoaderInterface;
|
use Twig\Loader\LoaderInterface;
|
||||||
use Twig\Loader\SourceContextLoaderInterface;
|
use Twig\Loader\SourceContextLoaderInterface;
|
||||||
|
|
||||||
class ProfilerControllerTest extends TestCase
|
class ProfilerControllerTest extends WebTestCase
|
||||||
{
|
{
|
||||||
|
public function testHomeActionWithProfilerDisabled()
|
||||||
|
{
|
||||||
|
$this->expectException(NotFoundHttpException::class);
|
||||||
|
$this->expectExceptionMessage('The profiler must be enabled.');
|
||||||
|
|
||||||
|
$urlGenerator = $this->getMockBuilder('Symfony\Component\Routing\Generator\UrlGeneratorInterface')->getMock();
|
||||||
|
$twig = $this->getMockBuilder('Twig\Environment')->disableOriginalConstructor()->getMock();
|
||||||
|
|
||||||
|
$controller = new ProfilerController($urlGenerator, null, $twig, []);
|
||||||
|
$controller->homeAction();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testHomeActionRedirect()
|
||||||
|
{
|
||||||
|
$kernel = new WebProfilerBundleKernel();
|
||||||
|
$client = new Client($kernel);
|
||||||
|
|
||||||
|
$client->request('GET', '/_profiler/');
|
||||||
|
|
||||||
|
$this->assertSame(302, $client->getResponse()->getStatusCode());
|
||||||
|
$this->assertSame('/_profiler/empty/search/results?limit=10', $client->getResponse()->getTargetUrl());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testPanelActionWithLatestTokenWhenNoTokensExist()
|
||||||
|
{
|
||||||
|
$kernel = new WebProfilerBundleKernel();
|
||||||
|
$client = new Client($kernel);
|
||||||
|
|
||||||
|
$client->request('GET', '/_profiler/latest');
|
||||||
|
|
||||||
|
$this->assertStringContainsString('No profiles found.', $client->getResponse()->getContent());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testPanelActionWithLatestToken()
|
||||||
|
{
|
||||||
|
$kernel = new WebProfilerBundleKernel();
|
||||||
|
$client = new Client($kernel);
|
||||||
|
|
||||||
|
$client->request('GET', '/');
|
||||||
|
$client->request('GET', '/_profiler/latest');
|
||||||
|
|
||||||
|
$this->assertStringContainsString('kernel:homepageController', $client->getResponse()->getContent());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testPanelActionWithoutValidToken()
|
||||||
|
{
|
||||||
|
$kernel = new WebProfilerBundleKernel();
|
||||||
|
$client = new Client($kernel);
|
||||||
|
|
||||||
|
$client->request('GET', '/_profiler/this-token-does-not-exist');
|
||||||
|
|
||||||
|
$this->assertStringContainsString('Token "this-token-does-not-exist" not found.', $client->getResponse()->getContent());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testPanelActionWithWrongPanel()
|
||||||
|
{
|
||||||
|
$kernel = new WebProfilerBundleKernel();
|
||||||
|
$client = new Client($kernel);
|
||||||
|
|
||||||
|
$client->request('GET', '/');
|
||||||
|
$client->request('GET', '/_profiler/latest?panel=this-panel-does-not-exist');
|
||||||
|
|
||||||
|
$this->assertSame(404, $client->getResponse()->getStatusCode());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testPanelActionWithValidPanelAndToken()
|
||||||
|
{
|
||||||
|
$kernel = new WebProfilerBundleKernel();
|
||||||
|
$client = new Client($kernel);
|
||||||
|
|
||||||
|
$client->request('GET', '/');
|
||||||
|
$crawler = $client->request('GET', '/_profiler/latest?panel=router');
|
||||||
|
|
||||||
|
$this->assertSame('_', $crawler->filter('.metrics .metric .value')->eq(0)->text());
|
||||||
|
$this->assertSame('12', $crawler->filter('.metrics .metric .value')->eq(1)->text());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testToolbarActionWithProfilerDisabled()
|
||||||
|
{
|
||||||
|
$this->expectException(NotFoundHttpException::class);
|
||||||
|
$this->expectExceptionMessage('The profiler must be enabled.');
|
||||||
|
|
||||||
|
$urlGenerator = $this->getMockBuilder('Symfony\Component\Routing\Generator\UrlGeneratorInterface')->getMock();
|
||||||
|
$twig = $this->getMockBuilder('Twig\Environment')->disableOriginalConstructor()->getMock();
|
||||||
|
|
||||||
|
$controller = new ProfilerController($urlGenerator, null, $twig, []);
|
||||||
|
$controller->toolbarAction(Request::create('/_wdt/foo-token'), null);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @dataProvider getEmptyTokenCases
|
* @dataProvider getEmptyTokenCases
|
||||||
*/
|
*/
|
||||||
public function testEmptyToken($token)
|
public function testToolbarActionWithEmptyToken($token)
|
||||||
{
|
{
|
||||||
$urlGenerator = $this->getMockBuilder('Symfony\Component\Routing\Generator\UrlGeneratorInterface')->getMock();
|
$urlGenerator = $this->getMockBuilder('Symfony\Component\Routing\Generator\UrlGeneratorInterface')->getMock();
|
||||||
$twig = $this->getMockBuilder('Twig\Environment')->disableOriginalConstructor()->getMock();
|
$twig = $this->getMockBuilder('Twig\Environment')->disableOriginalConstructor()->getMock();
|
||||||
@ -119,10 +210,36 @@ class ProfilerControllerTest extends TestCase
|
|||||||
$this->assertEquals(404, $response->getStatusCode());
|
$this->assertEquals(404, $response->getStatusCode());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testSearchBarActionWithProfilerDisabled()
|
||||||
|
{
|
||||||
|
$this->expectException(NotFoundHttpException::class);
|
||||||
|
$this->expectExceptionMessage('The profiler must be enabled.');
|
||||||
|
|
||||||
|
$urlGenerator = $this->getMockBuilder('Symfony\Component\Routing\Generator\UrlGeneratorInterface')->getMock();
|
||||||
|
$twig = $this->getMockBuilder('Twig\Environment')->disableOriginalConstructor()->getMock();
|
||||||
|
|
||||||
|
$controller = new ProfilerController($urlGenerator, null, $twig, []);
|
||||||
|
$controller->searchBarAction(Request::create('/_profiler/search_bar'));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testSearchBarActionDefaultPage()
|
||||||
|
{
|
||||||
|
$kernel = new WebProfilerBundleKernel();
|
||||||
|
$client = new Client($kernel);
|
||||||
|
|
||||||
|
$crawler = $client->request('GET', '/_profiler/search_bar');
|
||||||
|
|
||||||
|
$this->assertSame(200, $client->getResponse()->getStatusCode());
|
||||||
|
|
||||||
|
foreach (['ip', 'status_code', 'url', 'token', 'start', 'end'] as $searchCriteria) {
|
||||||
|
$this->assertSame('', $crawler->filter(sprintf('form input[name="%s"]', $searchCriteria))->text());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @dataProvider provideCspVariants
|
* @dataProvider provideCspVariants
|
||||||
*/
|
*/
|
||||||
public function testSearchResult($withCsp)
|
public function testSearchResultsAction($withCsp)
|
||||||
{
|
{
|
||||||
$twig = $this->getMockBuilder('Twig\Environment')->disableOriginalConstructor()->getMock();
|
$twig = $this->getMockBuilder('Twig\Environment')->disableOriginalConstructor()->getMock();
|
||||||
$profiler = $this
|
$profiler = $this
|
||||||
@ -185,6 +302,67 @@ class ProfilerControllerTest extends TestCase
|
|||||||
$this->assertEquals(200, $response->getStatusCode());
|
$this->assertEquals(200, $response->getStatusCode());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testSearchActionWithProfilerDisabled()
|
||||||
|
{
|
||||||
|
$this->expectException(NotFoundHttpException::class);
|
||||||
|
$this->expectExceptionMessage('The profiler must be enabled.');
|
||||||
|
|
||||||
|
$urlGenerator = $this->getMockBuilder('Symfony\Component\Routing\Generator\UrlGeneratorInterface')->getMock();
|
||||||
|
$twig = $this->getMockBuilder('Twig\Environment')->disableOriginalConstructor()->getMock();
|
||||||
|
|
||||||
|
$controller = new ProfilerController($urlGenerator, null, $twig, []);
|
||||||
|
$controller->searchBarAction(Request::create('/_profiler/search'));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testSearchActionWithToken()
|
||||||
|
{
|
||||||
|
$kernel = new WebProfilerBundleKernel();
|
||||||
|
$client = new Client($kernel);
|
||||||
|
|
||||||
|
$client->request('GET', '/');
|
||||||
|
$token = $client->getResponse()->headers->get('x-debug-token');
|
||||||
|
$client->request('GET', '/_profiler/search?token='.$token);
|
||||||
|
|
||||||
|
$this->assertSame(302, $client->getResponse()->getStatusCode());
|
||||||
|
$this->assertSame('/_profiler/'.$token, $client->getResponse()->getTargetUrl());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testSearchActionWithoutToken()
|
||||||
|
{
|
||||||
|
$kernel = new WebProfilerBundleKernel();
|
||||||
|
$client = new Client($kernel);
|
||||||
|
$client->followRedirects();
|
||||||
|
|
||||||
|
$client->request('GET', '/');
|
||||||
|
$token = $client->getResponse()->headers->get('x-debug-token');
|
||||||
|
$client->request('GET', '/_profiler/search?ip=&method=GET&status_code=&url=&token=&start=&end=&limit=10');
|
||||||
|
|
||||||
|
$this->assertStringContainsString('1 results found', $client->getResponse()->getContent());
|
||||||
|
$this->assertStringContainsString(sprintf('<a href="/_profiler/%s">%s</a>', $token, $token), $client->getResponse()->getContent());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testPhpinfoActionWithProfilerDisabled()
|
||||||
|
{
|
||||||
|
$this->expectException(NotFoundHttpException::class);
|
||||||
|
$this->expectExceptionMessage('The profiler must be enabled.');
|
||||||
|
|
||||||
|
$urlGenerator = $this->getMockBuilder('Symfony\Component\Routing\Generator\UrlGeneratorInterface')->getMock();
|
||||||
|
$twig = $this->getMockBuilder('Twig\Environment')->disableOriginalConstructor()->getMock();
|
||||||
|
|
||||||
|
$controller = new ProfilerController($urlGenerator, null, $twig, []);
|
||||||
|
$controller->phpinfoAction(Request::create('/_profiler/phpinfo'));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testPhpinfoAction()
|
||||||
|
{
|
||||||
|
$kernel = new WebProfilerBundleKernel();
|
||||||
|
$client = new Client($kernel);
|
||||||
|
|
||||||
|
$client->request('GET', '/_profiler/phpinfo');
|
||||||
|
|
||||||
|
$this->assertStringContainsString('PHP License', $client->getResponse()->getContent());
|
||||||
|
}
|
||||||
|
|
||||||
public function provideCspVariants()
|
public function provideCspVariants()
|
||||||
{
|
{
|
||||||
return [
|
return [
|
||||||
|
@ -0,0 +1,80 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Symfony\Bundle\WebProfilerBundle\Tests\Functional;
|
||||||
|
|
||||||
|
use Symfony\Bundle\FrameworkBundle\FrameworkBundle;
|
||||||
|
use Symfony\Bundle\FrameworkBundle\Kernel\MicroKernelTrait;
|
||||||
|
use Symfony\Bundle\TwigBundle\TwigBundle;
|
||||||
|
use Symfony\Bundle\WebProfilerBundle\WebProfilerBundle;
|
||||||
|
use Symfony\Component\Config\Loader\LoaderInterface;
|
||||||
|
use Symfony\Component\DependencyInjection\ContainerBuilder;
|
||||||
|
use Symfony\Component\HttpFoundation\Response;
|
||||||
|
use Symfony\Component\HttpKernel\Kernel;
|
||||||
|
use Symfony\Component\Routing\RouteCollectionBuilder;
|
||||||
|
|
||||||
|
class WebProfilerBundleKernel extends Kernel
|
||||||
|
{
|
||||||
|
use MicroKernelTrait;
|
||||||
|
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
parent::__construct('test', false);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
public function getName()
|
||||||
|
{
|
||||||
|
if (null === $this->name) {
|
||||||
|
$this->name = parent::getName().substr(md5(__CLASS__), -16);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function registerBundles()
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
new FrameworkBundle(),
|
||||||
|
new TwigBundle(),
|
||||||
|
new WebProfilerBundle(),
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function configureRoutes(RouteCollectionBuilder $routes)
|
||||||
|
{
|
||||||
|
$routes->import(__DIR__.'/../../Resources/config/routing/profiler.xml', '/_profiler');
|
||||||
|
$routes->import(__DIR__.'/../../Resources/config/routing/wdt.xml', '/_wdt');
|
||||||
|
$routes->add('/', 'kernel:homepageController');
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function configureContainer(ContainerBuilder $containerBuilder, LoaderInterface $loader)
|
||||||
|
{
|
||||||
|
$containerBuilder->loadFromExtension('framework', [
|
||||||
|
'secret' => 'foo-secret',
|
||||||
|
'profiler' => ['only_exceptions' => false],
|
||||||
|
'session' => ['storage_id' => 'session.storage.mock_file'],
|
||||||
|
]);
|
||||||
|
|
||||||
|
$containerBuilder->loadFromExtension('web_profiler', [
|
||||||
|
'toolbar' => true,
|
||||||
|
'intercept_redirects' => false,
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getCacheDir()
|
||||||
|
{
|
||||||
|
return sys_get_temp_dir().'/cache-'.spl_object_hash($this);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getLogDir()
|
||||||
|
{
|
||||||
|
return sys_get_temp_dir().'/log-'.spl_object_hash($this);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function homepageController()
|
||||||
|
{
|
||||||
|
return new Response('<html><head></head><body>Homepage Controller.</body></html>');
|
||||||
|
}
|
||||||
|
}
|
@ -20,12 +20,14 @@
|
|||||||
"symfony/config": "^4.2|^5.0",
|
"symfony/config": "^4.2|^5.0",
|
||||||
"symfony/framework-bundle": "^4.4|^5.0",
|
"symfony/framework-bundle": "^4.4|^5.0",
|
||||||
"symfony/http-kernel": "^4.4",
|
"symfony/http-kernel": "^4.4",
|
||||||
"symfony/routing": "^3.4|^4.0|^5.0",
|
"symfony/routing": "^3.4.7|^4.0|^5.0",
|
||||||
"symfony/twig-bundle": "^4.2|^5.0",
|
"symfony/twig-bundle": "^4.2|^5.0",
|
||||||
"twig/twig": "^1.41|^2.10|^3.0"
|
"twig/twig": "^1.41|^2.10|^3.0"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
|
"symfony/browser-kit": "^3.4|^4.0|^5.0",
|
||||||
"symfony/console": "^3.4|^4.0|^5.0",
|
"symfony/console": "^3.4|^4.0|^5.0",
|
||||||
|
"symfony/css-selector": "^3.4|^4.0|^5.0",
|
||||||
"symfony/dependency-injection": "^3.4|^4.0|^5.0",
|
"symfony/dependency-injection": "^3.4|^4.0|^5.0",
|
||||||
"symfony/stopwatch": "^3.4|^4.0|^5.0"
|
"symfony/stopwatch": "^3.4|^4.0|^5.0"
|
||||||
},
|
},
|
||||||
|
Reference in New Issue
Block a user