Completed
Push — master ( 43819a...28fa94 )
by Sergei
05:48 queued 05:44
created

CompositeExpressionTest::testAdd()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 17
Code Lines 8

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 8
dl 0
loc 17
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Doctrine\Tests\DBAL\Query\Expression;
6
7
use Doctrine\DBAL\Query\Expression\CompositeExpression;
8
use Doctrine\Tests\DbalTestCase;
9
10
/**
11
 * @group DBAL-12
12
 */
13
class CompositeExpressionTest extends DbalTestCase
14
{
15
    public function testCount() : void
16
    {
17
        $expr = new CompositeExpression(CompositeExpression::TYPE_OR, ['u.group_id = 1']);
18
19
        self::assertCount(1, $expr);
20
21
        $expr = $expr->with('u.group_id = 2');
22
23
        self::assertCount(2, $expr);
24
    }
25
26
    public function testWith() : void
27
    {
28
        $expr = new CompositeExpression(CompositeExpression::TYPE_OR, ['u.group_id = 1']);
29
30
        self::assertCount(1, $expr);
31
32
        // test immutability
33
        $expr->with(new CompositeExpression(CompositeExpression::TYPE_OR, ['u.user_id = 1']));
34
35
        self::assertCount(1, $expr);
36
37
        $expr = $expr->with(new CompositeExpression(CompositeExpression::TYPE_OR, ['u.user_id = 1']));
38
39
        self::assertCount(2, $expr);
40
41
        $expr = $expr->with('u.user_id = 1');
42
43
        self::assertCount(3, $expr);
44
    }
45
46
    /**
47
     * @param string[]|CompositeExpression[] $parts
48
     *
49
     * @dataProvider provideDataForConvertToString
50
     */
51
    public function testCompositeUsageAndGeneration(string $type, array $parts, string $expects) : void
52
    {
53
        $expr = new CompositeExpression($type, $parts);
54
55
        self::assertEquals($expects, (string) $expr);
56
    }
57
58
    /**
59
     * @return mixed[][]
60
     */
61
    public static function provideDataForConvertToString() : iterable
62
    {
63
        return [
64
            [
65
                CompositeExpression::TYPE_AND,
66
                ['u.user = 1'],
67
                'u.user = 1',
68
            ],
69
            [
70
                CompositeExpression::TYPE_AND,
71
                ['u.user = 1', 'u.group_id = 1'],
72
                '(u.user = 1) AND (u.group_id = 1)',
73
            ],
74
            [
75
                CompositeExpression::TYPE_OR,
76
                ['u.user = 1'],
77
                'u.user = 1',
78
            ],
79
            [
80
                CompositeExpression::TYPE_OR,
81
                ['u.group_id = 1', 'u.group_id = 2'],
82
                '(u.group_id = 1) OR (u.group_id = 2)',
83
            ],
84
            [
85
                CompositeExpression::TYPE_AND,
86
                [
87
                    'u.user = 1',
88
                    new CompositeExpression(
89
                        CompositeExpression::TYPE_OR,
90
                        ['u.group_id = 1', 'u.group_id = 2']
91
                    ),
92
                ],
93
                '(u.user = 1) AND ((u.group_id = 1) OR (u.group_id = 2))',
94
            ],
95
            [
96
                CompositeExpression::TYPE_OR,
97
                [
98
                    'u.group_id = 1',
99
                    new CompositeExpression(
100
                        CompositeExpression::TYPE_AND,
101
                        ['u.user = 1', 'u.group_id = 2']
102
                    ),
103
                ],
104
                '(u.group_id = 1) OR ((u.user = 1) AND (u.group_id = 2))',
105
            ],
106
        ];
107
    }
108
}
109