Skip to content

Commit

Permalink
Merge pull request #6 from Zenify/console-tests
Browse files Browse the repository at this point in the history
add support to Console [closes #3]
  • Loading branch information
Tomáš Votruba committed Nov 1, 2016
2 parents fbdcb50 + ef8c0c5 commit b8714e8
Show file tree
Hide file tree
Showing 5 changed files with 81 additions and 2 deletions.
1 change: 1 addition & 0 deletions composer.json
Expand Up @@ -15,6 +15,7 @@
"require-dev": {
"kdyby/doctrine": "~3.1",
"nette/bootstrap": "~2.4",
"symfony/console": "~3.0",
"tracy/tracy": "~2.4",
"phpunit/phpunit": "^5.6",
"zenify/coding-standard": "^4.0"
Expand Down
8 changes: 6 additions & 2 deletions src/EventSubscriber/EnableFiltersSubscriber.php
Expand Up @@ -9,6 +9,7 @@

namespace Zenify\DoctrineFilters\EventSubscriber;

use Symfony\Component\Console\ConsoleEvents;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symnedi\EventDispatcher\NetteApplicationEvents;
use Zenify\DoctrineFilters\Contract\FilterManagerInterface;
Expand All @@ -31,11 +32,14 @@ public function setFilterManager(FilterManagerInterface $filterManager)

public static function getSubscribedEvents() : array
{
return [NetteApplicationEvents::ON_PRESENTER => 'onPresenter'];
return [
ConsoleEvents::COMMAND => 'enableFilters',
NetteApplicationEvents::ON_PRESENTER => 'enableFilters'
];
}


public function onPresenter()
public function enableFilters()
{
$this->filterManager->enableFilters();
}
Expand Down
11 changes: 11 additions & 0 deletions src/FilterManager.php
Expand Up @@ -29,6 +29,11 @@ final class FilterManager implements FilterManagerInterface
*/
private $entityManager;

/**
* @var bool
*/
private $areFiltersEnabled = FALSE;


public function __construct(EntityManagerInterface $entityManager)
{
Expand All @@ -44,13 +49,19 @@ public function addFilter(string $name, FilterInterface $filter)

public function enableFilters()
{
if ($this->areFiltersEnabled) {
return;
}

foreach ($this->filters as $name => $filter) {
if ($filter instanceof ConditionalFilterInterface && ! $filter->isEnabled()) {
continue;
}

$this->addFilterToEnabledInFilterCollection($name, $filter);
}

$this->areFiltersEnabled = TRUE;
}


Expand Down
61 changes: 61 additions & 0 deletions tests/Console/ConsoleTest.php
@@ -0,0 +1,61 @@
<?php

declare(strict_types=1);

namespace Zenify\DoctrineFilters\Tests\Console;

use Doctrine\ORM\EntityManagerInterface;
use PHPUnit\Framework\TestCase;
use Symfony\Component\Console\Application;
use Symfony\Component\Console\Input\ArgvInput;
use Symfony\Component\Console\Output\NullOutput;
use Zenify\DoctrineFilters\Tests\ContainerFactory;


final class ConsoleTest extends TestCase
{

/**
* @var Application
*/
private $consoleApplication;

/**
* @var EntityManagerInterface
*/
private $entityManager;


protected function setUp()
{
$container = (new ContainerFactory)->create();
$this->consoleApplication = $container->getByType(Application::class);
$this->consoleApplication->setAutoExit(FALSE);
$this->entityManager = $container->getByType(EntityManagerInterface::class);
}


public function test()
{
$this->assertCount(0, $this->entityManager->getFilters()->getEnabledFilters());

$this->consoleApplication->run(new ArgvInput, new NullOutput);

$this->assertCount(2, $this->entityManager->getFilters()->getEnabledFilters());
}


public function testEnablingOnlyOnce()
{
$this->assertCount(0, $this->entityManager->getFilters()->getEnabledFilters());

$this->consoleApplication->run(new ArgvInput, new NullOutput);

$this->assertCount(2, $this->entityManager->getFilters()->getEnabledFilters());

$this->consoleApplication->run(new ArgvInput, new NullOutput);

$this->assertCount(2, $this->entityManager->getFilters()->getEnabledFilters());
}

}
2 changes: 2 additions & 0 deletions tests/config/default.neon
Expand Up @@ -7,6 +7,8 @@ services:
- Zenify\DoctrineFilters\Tests\FilterManager\Source\EnabledFilter
- Zenify\DoctrineFilters\Tests\FilterManager\Source\DisabledFilter

- Symfony\Component\Console\Application


extensions:
doctrine: Kdyby\Doctrine\DI\OrmExtension
Expand Down

0 comments on commit b8714e8

Please sign in to comment.