Failed Conditions
Push — master ( 389cea...9cc91e )
by Adrien
13:06
created

NativeInTest::providerNativeIn()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 39
Code Lines 27

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 27
c 1
b 0
f 0
dl 0
loc 39
rs 9.488
cc 1
nc 1
nop 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace EcodevTests\Felix\ORM\Query;
6
7
use Ecodev\Felix\ORM\Query\NativeIn;
8
use EcodevTests\Felix\Traits\TestWithTypes;
9
use PHPUnit\Framework\TestCase;
10
11
class NativeInTest extends TestCase
12
{
13
    use TestWithTypes;
14
15
    public function providerNativeIn(): iterable
16
    {
17
        yield 'normal with string' => [
18
            'SELECT u.id FROM EcodevTests\Felix\Blog\Model\User u WHERE ' . NativeIn::dql('u.id', "SELECT '123'"),
19
            "SELECT u0_.id AS id_0 FROM user u0_ WHERE u0_.id IN (SELECT '123') = 1",
20
        ];
21
22
        yield 'normal with escape' => [
23
            'SELECT c.id FROM EcodevTests\Felix\Blog\Model\User c WHERE ' . NativeIn::dql('c.id', "SELECT '1\t2\n3'"),
24
            "SELECT u0_.id AS id_0 FROM user u0_ WHERE u0_.id IN (SELECT '1\t2\n3') = 1",
25
        ];
26
        yield 'normal with double string' => [
27
            'SELECT c.id FROM EcodevTests\Felix\Blog\Model\User c WHERE ' . NativeIn::dql('c.id', 'SELECT "123"'),
28
            'SELECT u0_.id AS id_0 FROM user u0_ WHERE u0_.id IN (SELECT "123") = 1',
29
        ];
30
        yield 'negative with string' => [
31
            'SELECT u.id FROM EcodevTests\Felix\Blog\Model\User u WHERE ' . NativeIn::dql('u.id', "SELECT '123'", true),
32
            "SELECT u0_.id AS id_0 FROM user u0_ WHERE u0_.id NOT IN (SELECT '123') = 1",
33
        ];
34
        yield 'complex' => [
35
            'SELECT u.id FROM EcodevTests\Felix\Blog\Model\User u WHERE ' . NativeIn::dql('u.id', 'SELECT post.user_id FROM post'),
36
            'SELECT u0_.id AS id_0 FROM user u0_ WHERE u0_.id IN (SELECT post.user_id FROM post) = 1',
37
        ];
38
        yield 'multiline' => [
39
            'SELECT u.id FROM EcodevTests\Felix\Blog\Model\User u WHERE ' . NativeIn::dql(
40
                'u.id',
41
                <<<SQL
42
                    SELECT post.user_id
43
                    FROM post
44
                    SQL
45
            ),
46
            <<<SQL
47
                SELECT u0_.id AS id_0 FROM user u0_ WHERE u0_.id IN (SELECT post.user_id
48
                FROM post) = 1
49
                SQL,
50
        ];
51
        yield 'alias' => [
52
            'SELECT u.id AS my_alias FROM EcodevTests\Felix\Blog\Model\User u WHERE ' . NativeIn::dql('my_alias', "SELECT '123'"),
53
            "SELECT u0_.id AS id_0 FROM user u0_ WHERE id_0 IN (SELECT '123') = 1",
54
55
        ];
56
    }
57
58
    /**
59
     * @dataProvider providerNativeIn
60
     */
61
    public function testNativeIn(string $dql, string $expected): void
62
    {
63
        $query = $this->entityManager->createQuery($dql);
64
        $actual = $query->getSQL();
65
66
        self::assertSame($expected, $actual);
67
    }
68
}
69