-
-
Notifications
You must be signed in to change notification settings - Fork 6.8k
Expand file tree
/
Copy pathExpressionTest.php
More file actions
89 lines (72 loc) · 2.35 KB
/
ExpressionTest.php
File metadata and controls
89 lines (72 loc) · 2.35 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
<?php
/**
* @link https://www.yiiframework.com/
* @copyright Copyright (c) 2008 Yii Software LLC
* @license https://www.yiiframework.com/license/
*/
declare(strict_types=1);
namespace yiiunit\framework\db;
use yii\db\Expression;
use yii\db\ExpressionInterface;
use yiiunit\TestCase;
/**
* @group db
*/
class ExpressionTest extends TestCase
{
public function testConstructor(): void
{
$expression = new Expression('NOW()');
self::assertSame('NOW()', $expression->expression);
self::assertSame([], $expression->params);
}
public function testConstructorWithConfig(): void
{
$expression = new Expression('DEFAULT', [], ['expression' => 'overridden']);
self::assertSame('overridden', $expression->expression);
}
public function testToString(): void
{
$expression = new Expression('COUNT(*)');
self::assertSame('COUNT(*)', (string) $expression);
self::assertSame('COUNT(*)', $expression->__toString());
}
public function testImplementsExpressionInterface(): void
{
$expression = new Expression('1');
self::assertInstanceOf(ExpressionInterface::class, $expression);
}
public function testEmptyExpression(): void
{
$expression = new Expression('');
self::assertSame('', $expression->expression);
self::assertSame('', (string) $expression);
}
/**
* @dataProvider expressionsProvider
*/
public function testVariousExpressions(string $sql, array $params): void
{
$expression = new Expression($sql, $params);
self::assertSame($sql, (string) $expression);
self::assertSame($params, $expression->params);
}
public static function expressionsProvider(): array
{
return [
'simple function' => ['NOW()', []],
'aggregate' => ['COUNT(*)', []],
'with placeholder' => ['status = :status', [':status' => 1]],
'multiple placeholders' => [
'age BETWEEN :min AND :max',
[':min' => 18, ':max' => 65],
],
'subquery-like' => ['(SELECT MAX(id) FROM users)', []],
'raw literal' => ['1', []],
'complex expression' => [
'CASE WHEN status = :active THEN 1 ELSE 0 END',
[':active' => 'active'],
],
];
}
}