Skip to content

Commit

Permalink
Unit tests (netgen#18)
Browse files Browse the repository at this point in the history
* Install dependency injection test extension

* Create unit tests for Layouts classes

* Create unit tests for Templating classes

* Create dependency injection unit tests

* Create unit test for MenuPlugin

* Support PHP > 5.4

* Add support for PHP >= 5.4

* Add support for PHPUnit 4.8 for PHP5.4 and older

* Add support for PHP 5.4
  • Loading branch information
RandyCupic authored and emodric committed Aug 23, 2018
1 parent a7e0ce3 commit c5b7591
Show file tree
Hide file tree
Showing 9 changed files with 668 additions and 3 deletions.
3 changes: 2 additions & 1 deletion composer.json
Expand Up @@ -25,7 +25,8 @@
},
"require-dev": {
"ezsystems/ezpublish-kernel": "^6.0",
"phpunit/phpunit": "^4.8|^5.7|^6.5"
"phpunit/phpunit": "^4.8|^5.7|^6.5",
"matthiasnoback/symfony-dependency-injection-test": "^1.0"
},
"conflict": {
"netgen/block-manager": "<0.8",
Expand Down
2 changes: 0 additions & 2 deletions phpunit.xml.dist
Expand Up @@ -21,12 +21,10 @@
<exclude>
<directory>bundle/Command</directory>
<directory>bundle/Controller</directory>
<directory>bundle/DependencyInjection</directory>
<directory>bundle/EventListener</directory>
<directory>bundle/Exception</directory>
<directory>bundle/Installer</directory>
<directory>bundle/Resources</directory>
<directory>bundle/Templating</directory>
<file>bundle/NetgenAdminUIBundle.php</file>
</exclude>
</whitelist>
Expand Down
@@ -0,0 +1,38 @@
<?php

namespace Netgen\Bundle\AdminUIBundle\Tests\DependencyInjection\CompilerPass;

use Matthias\SymfonyDependencyInjectionTest\PhpUnit\AbstractCompilerPassTestCase;
use Netgen\Bundle\AdminUIBundle\DependencyInjection\CompilerPass\MenuPluginRegistryPass;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Definition;
use Symfony\Component\DependencyInjection\Reference;

class MenuPluginRegistryPassTest extends AbstractCompilerPassTestCase
{
public function testWithoutMenuPluginRegistry()
{
$this->assertNull($this->compile());
}

public function testCompile()
{
$definition = new Definition();
$definition->addTag('netgen_admin_ui.menu_plugin', array('priority' => 2));

$this->setDefinition('netgen_admin_ui.menu_plugin.registry', $definition);

$this->compile();

$arguments = array(
new Reference('netgen_admin_ui.menu_plugin.registry'),
);

$this->assertContainerBuilderHasServiceDefinitionWithMethodCall('netgen_admin_ui.menu_plugin.registry', 'addMenuPlugin', $arguments);
}

protected function registerCompilerPass(ContainerBuilder $container)
{
$container->addCompilerPass(new MenuPluginRegistryPass());
}
}
55 changes: 55 additions & 0 deletions tests/DependencyInjection/NetgenAdminUIExtensionTest.php
@@ -0,0 +1,55 @@
<?php

namespace Netgen\Bundle\AdminUIBundle\Tests\DependencyInjection;

use Matthias\SymfonyDependencyInjectionTest\PhpUnit\AbstractExtensionTestCase;
use Netgen\Bundle\AdminUIBundle\DependencyInjection\NetgenAdminUIExtension;

class NetgenAdminUIExtensionTest extends AbstractExtensionTestCase
{
public function testWithNoEzCoreExtraBundle()
{
$this->setExpectedException('RuntimeException');

$this->container->setParameter('kernel.bundles', []);
$this->load();
}

public function testWithNoInformationCollectionBundle()
{
$this->container->setParameter('kernel.bundles', array(
'EzCoreExtraBundle' => 'EzCoreExtraBundle',
'NetgenBlockManagerBundle' => 'NetgenBlockManagerBundle',
));

$this->load();

$this->assertContainerBuilderHasParameter('netgen_admin_ui.logo_type', 'default');
}

public function testWithAdminUILogo()
{
$this->container->setParameter('kernel.bundles', array(
'EzCoreExtraBundle' => 'EzCoreExtraBundle',
'NetgenBlockManagerBundle' => 'NetgenBlockManagerBundle',
'NetgenInformationCollectionBundle' => 'NetgenInformationCollectionBundle',
));

$this->container->setParameter('netgen_admin_ui.logo_type', 'default');

$this->getMockBuilder('Netgen\Bundle\MoreBundle\NetgenMoreBundle')
->disableOriginalConstructor()
->getMock();

$this->load();

$this->assertContainerBuilderHasParameter('netgen_admin_ui.logo_type', 'ngadminui');
}

protected function getContainerExtensions()
{
return [
new NetgenAdminUIExtension(),
];
}
}
93 changes: 93 additions & 0 deletions tests/Layouts/EventListener/CacheEnabledListenerTest.php
@@ -0,0 +1,93 @@
<?php

namespace Netgen\Bundle\AdminUIBundle\Tests\Layouts\EventListener;

use Netgen\BlockManager\Event\BlockManagerEvents;
use Netgen\BlockManager\Event\CollectViewParametersEvent;
use Netgen\BlockManager\HttpCache\NullClient;
use Netgen\BlockManager\View\View\FormView;
use Netgen\BlockManager\View\View\LayoutView;
use Netgen\Bundle\AdminUIBundle\Layouts\EventListener\CacheEnabledListener;
use PHPUnit\Framework\TestCase;

class CacheEnabledListenerTest extends TestCase
{
/**
* @var \Netgen\Bundle\AdminUIBundle\Layouts\EventListener\CacheEnabledListener
*/
protected $listener;

public function setUp()
{
if (
!class_exists('\Netgen\BlockManager\Version')
|| !class_exists('Netgen\BlockManager\Event\CollectViewParametersEvent')
|| !class_exists('Netgen\BlockManager\Event\BlockManagerEvents')
|| !class_exists('Netgen\BlockManager\View\View\FormView')
|| !class_exists('Netgen\BlockManager\View\View\LayoutView')
|| !class_exists('Netgen\BlockManager\HttpCache\NullClient')
) {
$this->markTestSkipped();
}

$httpCacheClient = $this->getMockBuilder('Netgen\BlockManager\HttpCache\ClientInterface')
->disableOriginalConstructor()
->getMock();

$this->listener = new CacheEnabledListener($httpCacheClient);
}

public function testGetSubscribedEvents()
{
$this->assertEquals(array(BlockManagerEvents::BUILD_VIEW => 'onBuildView'), CacheEnabledListener::getSubscribedEvents());
}

public function testOnBuildViewWithWrongView()
{
$view = new FormView();
$event = new CollectViewParametersEvent($view);

$this->assertNull($this->listener->onBuildView($event));
}

public function testOnBuildViewWithWrongViewContext()
{
$view = new LayoutView();
$view->setContext('unsupported');
$event = new CollectViewParametersEvent($view);

$this->assertNull($this->listener->onBuildView($event));
}

public function testOnBuildViewEnabled()
{
$view = new LayoutView();
$view->setContext('ngadminui');
$event = new CollectViewParametersEvent($view);

$this->assertNull($this->listener->onBuildView($event));

$parameters = array(
'http_cache_enabled' => true,
);

$this->assertEquals($parameters, $event->getParameters());
}

public function testOnBuildViewDisabled()
{
$listener = new CacheEnabledListener(new NullClient());

$view = new LayoutView();
$view->setContext('ngadminui');
$event = new CollectViewParametersEvent($view);

$this->assertNull($listener->onBuildView($event));

$parameters = array(
'http_cache_enabled' => false,
);

$this->assertEquals($parameters, $event->getParameters());
}
}
159 changes: 159 additions & 0 deletions tests/Layouts/RelatedLayoutsLoaderTest.php
@@ -0,0 +1,159 @@
<?php

namespace Netgen\Bundle\AdminUIBundle\Tests\Layouts;

use eZ\Publish\API\Repository\Values\Content\ContentInfo;
use eZ\Publish\Core\Repository\Values\Content\Location;
use Netgen\BlockManager\Core\Values\Layout\Layout;
use Netgen\Bundle\AdminUIBundle\Layouts\RelatedLayoutsLoader;
use PHPUnit\Framework\TestCase;

class RelatedLayoutsLoaderTest extends TestCase
{
/**
* @var \Netgen\Bundle\AdminUIBundle\Layouts\RelatedLayoutsLoader
*/
protected $loader;

/**
* @var \PHPUnit_Framework_MockObject_MockObject
*/
protected $layoutService;

/**
* @var \PHPUnit_Framework_MockObject_MockObject
*/
protected $databaseConnection;

public function setUp()
{
if (
!interface_exists('\Netgen\BlockManager\API\Service\LayoutService')
|| !interface_exists('\Netgen\BlockManager\API\Values\Layout\Layout')
|| !interface_exists('\Netgen\BlockManager\API\Values\Value')
|| !class_exists('\Netgen\BlockManager\Version')
) {
$this->markTestSkipped();
}

$this->layoutService = $this->getMockBuilder('Netgen\BlockManager\API\Service\LayoutService')
->disableOriginalConstructor()
->getMock();

$this->databaseConnection = $this->getMockBuilder('Doctrine\DBAL\Connection')
->disableOriginalConstructor()
->getMock();

$this->loader = new RelatedLayoutsLoader($this->layoutService, $this->databaseConnection);
}

public function testLoadRelatedLayouts()
{
$contentInfo = new ContentInfo();

$location = new Location(
array(
'contentInfo' => $contentInfo,
)
);

$queryBuilder = $this->getMockBuilder('Doctrine\DBAL\Query\QueryBuilder')
->disableOriginalConstructor()
->getMock();

$expressionBuilder = $this->getMockBuilder('Doctrine\DBAL\Query\Expression\ExpressionBuilder')
->disableOriginalConstructor()
->getMock();

$statement = $this->getMockBuilder('Doctrine\DBAL\Driver\Statement')
->disableOriginalConstructor()
->getMock();

$this->databaseConnection
->expects($this->once())
->method('createQueryBuilder')
->willReturn($queryBuilder);

$queryBuilder
->expects($this->once())
->method('select')
->willReturn($queryBuilder);

$queryBuilder
->expects($this->once())
->method('from')
->willReturn($queryBuilder);

$queryBuilder
->expects($this->exactly(2))
->method('innerJoin')
->willReturn($queryBuilder);

$queryBuilder
->expects($this->exactly(15))
->method('expr')
->willReturn($expressionBuilder);

$queryBuilder
->expects($this->once())
->method('where')
->willReturn($queryBuilder);

$queryBuilder
->expects($this->exactly(5))
->method('setParameter')
->willReturn($queryBuilder);

$expressionBuilder
->expects($this->exactly(5))
->method('andX');

$expressionBuilder
->expects($this->once())
->method('orX');

$expressionBuilder
->expects($this->exactly(9))
->method('eq');

$queryBuilder
->expects($this->once())
->method('execute')
->willReturn($statement);

$layoutRows = array(
array(
'layout_id' => 5,
),
array(
'layout_id' => 6,
),
array(
'layout_id' => 7,
)
);

$layout1 = new Layout(array('name' => 'Frontpage'));
$layout2 = new Layout(array('name' => 'Article'));
$layout3 = new Layout(array('name' => 'Article'));

$statement
->expects($this->once())
->method('fetchAll')
->willReturn($layoutRows);

$this->layoutService
->expects($this->exactly(3))
->method('loadLayout')
->withConsecutive(
array(5),
array(6),
array(7)
)
->willReturnOnConsecutiveCalls($layout1, $layout2, $layout3);

$result = array($layout2, $layout3, $layout1);

$this->assertEquals($result, $this->loader->loadRelatedLayouts($location));
}
}

0 comments on commit c5b7591

Please sign in to comment.