Skip to content

Commit

Permalink
Added more tests for WebProfilerBundle
Browse files Browse the repository at this point in the history
Updated the dev requirements

Added more dev dependencies

More fixes for tests

Try to fix more tests
  • Loading branch information
javiereguiluz committed Sep 27, 2019
1 parent ad89564 commit e7dee4b
Show file tree
Hide file tree
Showing 3 changed files with 274 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -11,19 +11,112 @@

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\Csp\ContentSecurityPolicyHandler;
use Symfony\Bundle\WebProfilerBundle\Tests\Functional\WebProfilerBundleKernel;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use Symfony\Component\HttpKernel\Profiler\Profile;

class ProfilerControllerTest extends TestCase
class ProfilerControllerTest extends WebTestCase
{
/**
* @expectedException \Symfony\Component\HttpKernel\Exception\NotFoundHttpException
* @expectedExceptionMessage The profiler must be enabled.
*/
public function testHomeActionWithProfilerDisabled()
{
$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->assertContains('No profiles found in the database.', $client->getResponse()->getContent());
}

public function testPanelActionWithLatestToken()
{
$kernel = new WebProfilerBundleKernel();
$client = new Client($kernel);

$client->request('GET', '/');
$client->request('GET', '/_profiler/latest');

$this->assertContains('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->assertContains('Token "this-token-does-not-exist" was not found in the database.', $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());
}

/**
* @expectedException \Symfony\Component\HttpKernel\Exception\NotFoundHttpException
* @expectedExceptionMessage The profiler must be enabled.
*/
public function testToolbarActionWithProfilerDisabled()
{
$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
*/
public function testEmptyToken($token)
public function testToolbarActionWithEmptyToken($token)
{
$urlGenerator = $this->getMockBuilder('Symfony\Component\Routing\Generator\UrlGeneratorInterface')->getMock();
$twig = $this->getMockBuilder('Twig\Environment')->disableOriginalConstructor()->getMock();
Expand Down Expand Up @@ -111,10 +204,37 @@ public function testReturns404onTokenNotFound($withCsp)
$this->assertEquals(404, $response->getStatusCode());
}

/**
* @expectedException \Symfony\Component\HttpKernel\Exception\NotFoundHttpException
* @expectedExceptionMessage The profiler must be enabled.
*/
public function testSearchBarActionWithProfilerDisabled()
{
$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
*/
public function testSearchResult($withCsp)
public function testSearchResultsAction($withCsp)
{
$twig = $this->getMockBuilder('Twig\Environment')->disableOriginalConstructor()->getMock();
$profiler = $this
Expand Down Expand Up @@ -177,6 +297,69 @@ public function testSearchResult($withCsp)
$this->assertEquals(200, $response->getStatusCode());
}

/**
* @expectedException \Symfony\Component\HttpKernel\Exception\NotFoundHttpException
* @expectedExceptionMessage The profiler must be enabled.
*/
public function testSearchActionWithProfilerDisabled()
{
$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->assertContains('1 results found', $client->getResponse()->getContent());
$this->assertContains(sprintf('<a href="/_profiler/%s">%s</a>', $token, $token), $client->getResponse()->getContent());
}

/**
* @expectedException \Symfony\Component\HttpKernel\Exception\NotFoundHttpException
* @expectedExceptionMessage The profiler must be enabled.
*/
public function testPhpinfoActionWithProfilerDisabled()
{
$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->assertContains('PHP License', $client->getResponse()->getContent());
}

public function provideCspVariants()
{
return [
Expand Down
Original file line number Diff line number Diff line change
@@ -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>');
}
}
8 changes: 7 additions & 1 deletion src/Symfony/Bundle/WebProfilerBundle/composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -25,10 +25,16 @@
"twig/twig": "~1.34|~2.4"
},
"require-dev": {
"symfony/browser-kit": "~3.4|~4.0",
"symfony/config": "~3.4|~4.0",
"symfony/console": "~2.8|~3.0|~4.0",
"symfony/css-selector": "~3.4|~4.0",
"symfony/dependency-injection": "~3.4|~4.0",
"symfony/stopwatch": "~2.8|~3.0|~4.0"
"symfony/dom-crawler": "~3.4|4.0",
"symfony/framework-bundle": "~3.4|~4.0",
"symfony/http-foundation": "~3.4|~4.0",
"symfony/stopwatch": "~2.8|~3.0|~4.0",
"symfony/twig-bundle": "~3.4|~4.0"
},
"conflict": {
"symfony/config": "<3.4",
Expand Down

0 comments on commit e7dee4b

Please sign in to comment.