Completed
Pull Request — 2.11.x (#3850)
by Benjamin
61:00
created

CompositeExpressionTest::testAddWith()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 26
Code Lines 12

Duplication

Lines 0
Ratio 0 %

Importance

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