Passed
Push — master ( cfcd5c...480211 )
by Wilmer
12:32 queued 08:25
created

FromTest::build()

Size

Total Lines 25
Code Lines 13

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 1 Features 0
Metric Value
eloc 13
c 1
b 1
f 0
nc 1
nop 1
dl 0
loc 25

1 Method

Rating   Name   Duplication   Size   Complexity  
A FromTest.php$0 ➔ __construct() 0 17 1
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Yiisoft\Db\Tests\QueryBuilder;
6
7
use PHPUnit\Framework\TestCase;
8
use Yiisoft\Db\Connection\Connection;
9
use Yiisoft\Db\Expression\Expression;
10
use Yiisoft\Db\Query\Query;
11
use Yiisoft\Db\QueryBuilder\DDLQueryBuilder;
12
use Yiisoft\Db\QueryBuilder\DMLQueryBuilder;
13
use Yiisoft\Db\QueryBuilder\DQLQueryBuilder;
14
use Yiisoft\Db\QueryBuilder\QueryBuilder;
15
use Yiisoft\Db\Schema\Quoter;
16
use Yiisoft\Db\Schema\Schema;
17
18
/**
19
 * @group db
20
 */
21
final class FromTest extends TestCase
22
{
23
    /** @dataProvider fromCases */
24
    public function testBasic(mixed $table, string $expectedSql, array $expectedParams = []): void
25
    {
26
        $query = $this->createQuery()->from($table);
27
28
        [$sql, $params] = $this->build($query);
29
30
        $this->assertSame($expectedSql, $sql);
31
        $this->assertSame($expectedParams, $params);
32
    }
33
34
    private function fromCases(): array
0 ignored issues
show
Unused Code introduced by
The method fromCases() is not used, and could be removed.

This check looks for private methods that have been defined, but are not used inside the class.

Loading history...
35
    {
36
        return [
37
            ['table1', 'SELECT * FROM "table1"'],
38
            [['table1'], 'SELECT * FROM "table1"'],
39
            [new Expression('table2'), 'SELECT * FROM table2'],
40
            [[new Expression('table2')], 'SELECT * FROM table2'],
41
            [['alias' => 'table3'], 'SELECT * FROM "table3" "alias"'],
42
            [['alias' => new Expression('table4')], 'SELECT * FROM table4 "alias"'],
43
            [
44
                ['alias' => new Expression('func(:param1, :param2)',  ['param1' => 'A', 'param2' => 'B'])],
45
                'SELECT * FROM func(:param1, :param2) "alias"',
46
                ['param1' => 'A', 'param2' => 'B'],
47
            ],
48
        ];
49
    }
50
51
    private function build(Query $query): array
52
    {
53
        $cm = \Closure::fromCallable([$this, 'createMock']);
54
        $qb = new class ($cm,) extends QueryBuilder {
55
            public function __construct( \Closure $cm)
56
            {
57
                $quoter = new Quoter('"', '"');
58
                /** @var Schema $schema */
59
                $schema = $cm(Schema::class);
60
                /** @var DDLQueryBuilder $ddlBuilder */
61
                $ddlBuilder = $cm(DDLQueryBuilder::class);
62
                /** @var DMLQueryBuilder $dmlBuilder */
63
                $dmlBuilder = $cm(DMLQueryBuilder::class);
64
65
                $dqlBuilder = new class (
66
                    $this,
67
                    $quoter,
68
                    $schema,
69
                ) extends DQLQueryBuilder {};
70
71
                parent::__construct($quoter, $schema, $ddlBuilder, $dmlBuilder, $dqlBuilder);
72
            }
73
        };
74
75
        return $qb->build($query);
76
    }
77
78
    private function createQuery(): Query
79
    {
80
        return (new Query($this->createMock(Connection::class)));
81
    }
82
}
83