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); } }