61 lines
1.8 KiB
PHP
61 lines
1.8 KiB
PHP
|
|
<?php
|
||
|
|
|
||
|
|
namespace Tests\Unit\Rules;
|
||
|
|
|
||
|
|
use App\Services\RuleExpressionService;
|
||
|
|
use CodeIgniter\Test\CIUnitTestCase;
|
||
|
|
|
||
|
|
class RuleExpressionCompileTest extends CIUnitTestCase
|
||
|
|
{
|
||
|
|
protected function setUp(): void
|
||
|
|
{
|
||
|
|
parent::setUp();
|
||
|
|
if (!class_exists('Symfony\Component\ExpressionLanguage\ExpressionLanguage')) {
|
||
|
|
$this->markTestSkipped('Symfony ExpressionLanguage not installed');
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
public function testCompileSexCondition(): void
|
||
|
|
{
|
||
|
|
$svc = new RuleExpressionService();
|
||
|
|
|
||
|
|
$compiled = $svc->compile("if(sex('F') ? set_result(0.7) : set_result(1))");
|
||
|
|
|
||
|
|
$this->assertIsArray($compiled);
|
||
|
|
$this->assertEquals('order["Sex"] == "F"', $compiled['conditionExpr']);
|
||
|
|
$this->assertEquals(0.7, $compiled['then']['value']);
|
||
|
|
$this->assertEquals(1, $compiled['else']['value']);
|
||
|
|
$this->assertStringContainsString('order["Sex"] == "F"', $compiled['valueExpr']);
|
||
|
|
}
|
||
|
|
|
||
|
|
public function testCompilePriorityCondition(): void
|
||
|
|
{
|
||
|
|
$svc = new RuleExpressionService();
|
||
|
|
|
||
|
|
$compiled = $svc->compile("if(priority('S') ? set_result('urgent') : set_result('normal'))");
|
||
|
|
|
||
|
|
$this->assertIsArray($compiled);
|
||
|
|
$this->assertEquals('order["Priority"] == "S"', $compiled['conditionExpr']);
|
||
|
|
$this->assertEquals('urgent', $compiled['then']['value']);
|
||
|
|
$this->assertEquals('normal', $compiled['else']['value']);
|
||
|
|
}
|
||
|
|
|
||
|
|
public function testCompileInvalidSyntax(): void
|
||
|
|
{
|
||
|
|
$svc = new RuleExpressionService();
|
||
|
|
|
||
|
|
$this->expectException(\InvalidArgumentException::class);
|
||
|
|
$svc->compile("invalid syntax here");
|
||
|
|
}
|
||
|
|
|
||
|
|
public function testCompileEmptyReturnsEmpty(): void
|
||
|
|
{
|
||
|
|
$svc = new RuleExpressionService();
|
||
|
|
|
||
|
|
$compiled = $svc->compile("");
|
||
|
|
|
||
|
|
$this->assertIsArray($compiled);
|
||
|
|
$this->assertEmpty($compiled);
|
||
|
|
}
|
||
|
|
}
|