Completed
Push — master ( 77087e...43819a )
by Sergei
22s queued 15s
created

provideDataForConvertToString()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 44
Code Lines 25

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 25
dl 0
loc 44
rs 9.52
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 testAdd() : void
27
    {
28
        $expr = new CompositeExpression(CompositeExpression::TYPE_OR, ['u.group_id = 1']);
29
30
        self::assertCount(1, $expr);
31
32
        $expr->add(new CompositeExpression(CompositeExpression::TYPE_AND, []));
33
34
        self::assertCount(1, $expr);
35
36
        $expr->add(new CompositeExpression(CompositeExpression::TYPE_OR, ['u.user_id = 1']));
37
38
        self::assertCount(2, $expr);
39
40
        $expr->add('u.user_id = 1');
41
42
        self::assertCount(3, $expr);
43
    }
44
45
    public function testWith() : void
46
    {
47
        $expr = new CompositeExpression(CompositeExpression::TYPE_OR, ['u.group_id = 1']);
48
49
        self::assertCount(1, $expr);
50
51
        // test immutability
52
        $expr->with(new CompositeExpression(CompositeExpression::TYPE_OR, ['u.user_id = 1']));
53
54
        self::assertCount(1, $expr);
55
56
        $expr = $expr->with(new CompositeExpression(CompositeExpression::TYPE_OR, ['u.user_id = 1']));
57
58
        self::assertCount(2, $expr);
59
60
        $expr = $expr->with('u.user_id = 1');
61
62
        self::assertCount(3, $expr);
63
    }
64
65
    /**
66
     * @param string[]|CompositeExpression[] $parts
67
     *
68
     * @dataProvider provideDataForConvertToString
69
     */
70
    public function testCompositeUsageAndGeneration(string $type, array $parts, string $expects) : void
71
    {
72
        $expr = new CompositeExpression($type, $parts);
73
74
        self::assertEquals($expects, (string) $expr);
75
    }
76
77
    /**
78
     * @return mixed[][]
79
     */
80
    public static function provideDataForConvertToString() : iterable
81
    {
82
        return [
83
            [
84
                CompositeExpression::TYPE_AND,
85
                ['u.user = 1'],
86
                'u.user = 1',
87
            ],
88
            [
89
                CompositeExpression::TYPE_AND,
90
                ['u.user = 1', 'u.group_id = 1'],
91
                '(u.user = 1) AND (u.group_id = 1)',
92
            ],
93
            [
94
                CompositeExpression::TYPE_OR,
95
                ['u.user = 1'],
96
                'u.user = 1',
97
            ],
98
            [
99
                CompositeExpression::TYPE_OR,
100
                ['u.group_id = 1', 'u.group_id = 2'],
101
                '(u.group_id = 1) OR (u.group_id = 2)',
102
            ],
103
            [
104
                CompositeExpression::TYPE_AND,
105
                [
106
                    'u.user = 1',
107
                    new CompositeExpression(
108
                        CompositeExpression::TYPE_OR,
109
                        ['u.group_id = 1', 'u.group_id = 2']
110
                    ),
111
                ],
112
                '(u.user = 1) AND ((u.group_id = 1) OR (u.group_id = 2))',
113
            ],
114
            [
115
                CompositeExpression::TYPE_OR,
116
                [
117
                    'u.group_id = 1',
118
                    new CompositeExpression(
119
                        CompositeExpression::TYPE_AND,
120
                        ['u.user = 1', 'u.group_id = 2']
121
                    ),
122
                ],
123
                '(u.group_id = 1) OR ((u.user = 1) AND (u.group_id = 2))',
124
            ],
125
        ];
126
    }
127
}
128