56 lines
2.4 KiB
PHP
56 lines
2.4 KiB
PHP
<?php
|
||
|
||
namespace goodboyalex\php_db_components_pack\tests\classes;
|
||
|
||
use goodboyalex\php_components_pack\extensions\StringExtension;
|
||
use goodboyalex\php_db_components_pack\classes\Condition;
|
||
use goodboyalex\php_db_components_pack\classes\ConditionBuilder;
|
||
use goodboyalex\php_db_components_pack\classes\ConditionGroup;
|
||
use PHPUnit\Framework\TestCase;
|
||
|
||
class ConditionBuilderTest extends TestCase
|
||
{
|
||
public function testBuild ()
|
||
{
|
||
// Требуемое условие
|
||
$requireCondition =
|
||
"`id` = 1 AND `age` >= 18 OR `profile` <= 12 AND (`Name` = Alex AND (`Age` > 18 OR `FirstName` = Titanic))";
|
||
|
||
// Создаем условие методом цепочек
|
||
$condition = new ConditionBuilder()->WhereEquals('id', 1)->And()->WhereGreaterThanEqual('age', 18)->Or()
|
||
->WhereLessThanEqual('profile', 12)->And()->AddGroup(Condition::LOGIC_AND, [
|
||
new Condition("Name", '=', "Alex"),
|
||
new ConditionGroup(Condition::LOGIC_OR, [
|
||
new Condition("Age", '>', 18), new Condition("FirstName",
|
||
'=',
|
||
"Titanic")
|
||
]),
|
||
])->Build();
|
||
|
||
// Эмулирую подготовку условий
|
||
$condition = StringExtension::ReplaceAll($condition->Get(1), $condition->Get(0));
|
||
|
||
// Проверяем его
|
||
$this->assertEquals($requireCondition, $condition);
|
||
|
||
// Задаем условие методом массива
|
||
$conditionArray = [
|
||
"id" => 1, 'AND', "age" => ['>=', 18], 'OR', "profile" => ['<=', 12], 'AND', [
|
||
'AND', "Name" => "Alex", ['OR', "Age" => ['>', 18], "FirstName" => "Titanic"]
|
||
]
|
||
];
|
||
|
||
// Создаем ConditionBuilder
|
||
$builder = ConditionBuilder::Parse($conditionArray);
|
||
|
||
// Получаем условие
|
||
$condition = $builder->Build();
|
||
|
||
// Эмулирую подготовку условий
|
||
$condition = StringExtension::ReplaceAll($condition->Get(1), $condition->Get(0));
|
||
|
||
// Проверяем его
|
||
$this->assertEquals($requireCondition, $condition);
|
||
}
|
||
}
|