open-orchestra/open-orchestra-base-api-mongo-model-bundle

View on GitHub
BaseApiMongoModelBundle/Tests/DependencyInjection/OpenOrchestraBaseApiExtensionTest.php

Summary

Maintainability
A
0 mins
Test Coverage
<?php

namespace OpenOrchestra\BaseApiBundle\DependencyInjection;

use OpenOrchestra\BaseApiMongoModelBundle\DependencyInjection\OpenOrchestraBaseApiMongoModelExtension;
use OpenOrchestra\BaseBundle\Tests\AbstractTest\AbstractBaseTestCase;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\Config\FileLocator;
use Symfony\Component\DependencyInjection\Definition;
use Symfony\Component\DependencyInjection\Loader\YamlFileLoader;

/**
 * Class OpenOrchestraBaseApiMongoModelExtensionTest
 */
class OpenOrchestraBaseApiMongoModelExtensionTest extends AbstractBaseTestCase
{
    /**
     * @param string $className
     * @param string $name
     * @param bool|false $filter
     *
     * @dataProvider provideDocumentClass
     */
    public function testDefaultConfig($className, $name, $filter = false)
    {
        $class = 'OpenOrchestra\BaseApiMongoModelBundle\Document\\'. $className;
        $repository = 'OpenOrchestra\BaseApiMongoModelBundle\Repository\\'. $className . 'Repository';
        $container = $this->loadContainerFromFile('empty');
        $this->assertEquals($class, $container->getParameter('open_orchestra_api.document.' . $name . '.class'));
        $this->assertDefinition($container->getDefinition('open_orchestra_api.repository.' . $name), $class, $repository, $filter);
    }

    /**
     * @return array
     */
    public function provideDocumentClass()
    {
        return array(
            array("ApiClient", "api_client"),
            array("AccessToken", "access_token")
        );
    }

    /**
     * @param string     $class
     * @param string     $name
     * @param string     $repository
     * @param bool|false $filter
     *
     * @dataProvider provideDocumentClassFakeValue
     */
    public function testConfigWithValue($class, $name, $repository, $filter = false)
    {
        $container = $this->loadContainerFromFile('value');
        $this->assertEquals($class, $container->getParameter('open_orchestra_api.document.' . $name . '.class'));
        $this->assertDefinition($container->getDefinition('open_orchestra_api.repository.' . $name), $class, $repository, $filter);
    }

    /**
     * @return array
     */
    public function provideDocumentClassFakeValue()
    {
        return array(
            array("FakeClassApiClient", "api_client", "FakeRepositoryApiClient"),
            array("FakeClassAccessToken", "access_token", "FakeRepositoryAccesToken")
        );
    }

    /**
     * @param Definition $definition
     * @param string     $class
     * @param string     $repository
     * @param bool|false $filterType
     */
    private function assertDefinition(Definition $definition, $class, $repository, $filterType = false)
    {
        $this->assertSame($definition->getClass(), $repository);
        $factory = $definition->getFactory();
        $this->assertSame($factory[1], "getRepository");
        $this->assertSame($definition->getArgument(0), $class);
        $this->assertTrue($definition->hasMethodCall('setAggregationQueryBuilder'));
        if ($filterType) {
            $this->assertTrue($definition->hasMethodCall('setFilterTypeManager'));
        }
    }

    /**
     * @param string $file
     *
     * @return ContainerBuilder
     */
    private function loadContainerFromFile($file)
    {
        $container = new ContainerBuilder();
        $container->setParameter('kernel.debug', false);
        $container->setParameter('kernel.cache_dir', '/tmp');
        $container->registerExtension(new OpenOrchestraBaseApiMongoModelExtension());

        $locator = new FileLocator(__DIR__ . '/Fixtures/config/');
        $loader = new YamlFileLoader($container, $locator);
        $loader->load($file . '.yml');
        $container->getCompilerPassConfig()->setOptimizationPasses(array());
        $container->getCompilerPassConfig()->setRemovingPasses(array());
        $container->compile();

        return $container;
    }
}