Test Failed
Pull Request — master (#17)
by Denis
10:14
created

QueryBuilderTest::testQueryBuilderNoDoctrine()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 22
Code Lines 13

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 13
nc 1
nop 0
dl 0
loc 22
rs 9.8333
c 1
b 0
f 0
1
<?php
2
3
namespace Artprima\QueryFilterBundle\tests\functional\QueryBuilder;
4
5
use Artprima\QueryFilterBundle\ArtprimaQueryFilterBundle;
6
use Artprima\QueryFilterBundle\DependencyInjection\ArtprimaQueryFilterExtension;
7
use Artprima\QueryFilterBundle\ParamConverter\ConfigConverter;
8
use Artprima\QueryFilterBundle\Query\ConditionManager;
9
use Artprima\QueryFilterBundle\QueryFilter\QueryFilter;
10
use Artprima\QueryFilterBundle\tests\functional\Test\MakePublicCompilerPass;
11
use Doctrine\Bundle\DoctrineBundle\DependencyInjection\DoctrineExtension;
12
use PHPUnit\Framework\TestCase;
13
use Symfony\Component\DependencyInjection\ContainerBuilder;
14
use Symfony\Component\DependencyInjection\Exception\ServiceNotFoundException;
15
use Artprima\QueryFilterBundle\Query\Condition;
16
17
class QueryBuilderTest extends TestCase
18
{
19
    private static $conditions = [
20
        'between' => Condition\Between::class,
21
        'eq' => Condition\Eq::class,
22
        'gt' => Condition\Gt::class,
23
        'gte' => Condition\Gte::class,
24
        'in' => Condition\In::class,
25
        'is not null' => Condition\IsNotNull::class,
26
        'is null' => Condition\IsNull::class,
27
        'like' => Condition\Like::class,
28
        'lt' => Condition\Lt::class,
29
        'lte' => Condition\Lte::class,
30
        'member of' => Condition\MemberOf::class,
31
        'not between' => Condition\NotBetween::class,
32
        'not eq' => Condition\NotEq::class,
33
        'not in' => Condition\NotIn::class,
34
        'not like' => Condition\NotLike::class,
35
    ];
36
37
    public function testQueryBuilder()
38
    {
39
        $container = new ContainerBuilder();
40
41
        $bundle = new ArtprimaQueryFilterBundle();
42
        $bundle->setContainer($container);
43
        $bundle->build($container);
44
45
        // In this step we make the service public for it to be accessible via the container
46
        // I could have of course used the WebTestCase but it's too heavy for my tasks
47
        $container->addCompilerPass(new MakePublicCompilerPass(ConditionManager::class));
48
        $container->addCompilerPass(new MakePublicCompilerPass('query_filter_bundle.param_converter.query_filter_config'));
49
        $container->addCompilerPass(new MakePublicCompilerPass('query_filter_bundle.query_filter'));
50
51
        $extension = new ArtprimaQueryFilterExtension();
52
        $container->setParameter('kernel.debug', true);
53
        $extension->load([], $container);
54
        $doctrine = new DoctrineExtension();
55
        $doctrine->load([['dbal' => []]], $container);
56
57
        $container->compile();
58
59
        // check registered services
60
        $conditionManager = $container->get(ConditionManager::class);
61
        self::assertInstanceOf(ConditionManager::class, $conditionManager);
62
        $queryFilterConfig = $container->get('query_filter_bundle.param_converter.query_filter_config');
63
        self::assertInstanceOf(ConfigConverter::class, $queryFilterConfig);
64
        $queryFilter = $container->get('query_filter_bundle.query_filter');
65
        self::assertInstanceOf(QueryFilter::class, $queryFilter);
66
67
        // check registered conditions
68
        $conditions = $conditionManager->all();
69
        foreach (self::$conditions as $operator => $class) {
70
            self::assertArrayHasKey($operator, $conditions);
71
            self::assertInstanceOf($class, $conditions[$operator]);
72
        }
73
    }
74
75
    public function testQueryBuilderNoDoctrine()
76
    {
77
        $this->expectException(ServiceNotFoundException::class);
78
        $this->expectExceptionMessage('The service "query_filter_bundle.param_converter.query_filter_config" has a dependency on a non-existent service "doctrine"');
79
80
        $container = new ContainerBuilder();
81
82
        $bundle = new ArtprimaQueryFilterBundle();
83
        $bundle->setContainer($container);
84
        $bundle->build($container);
85
86
        // In this step we make the service public for it to be accessible via the container
87
        // I could have of course used the WebTestCase but it's too heavy for my tasks
88
        $container->addCompilerPass(new MakePublicCompilerPass(ConditionManager::class));
89
        $container->addCompilerPass(new MakePublicCompilerPass('query_filter_bundle.param_converter.query_filter_config'));
90
        $container->addCompilerPass(new MakePublicCompilerPass('query_filter_bundle.query_filter'));
91
92
        $extension = new ArtprimaQueryFilterExtension();
93
        $container->setParameter('kernel.debug', true);
94
        $extension->load([], $container);
95
96
        $container->compile();
97
    }
98
}