['array', 'nullable', new FormPropertyLogicRule()] ]; $data = [ 'properties' => [ [ 'id' => "title", 'name' => "Name", 'type' => 'title', 'hidden' => false, 'required' => false, 'logic' => [ "conditions" => null, "actions" => [] ] ] ] ]; $validatorObj = $this->app['validator']->make($data, $rules); $this->assertTrue($validatorObj->passes()); $data = [ 'properties' => [ [ 'id' => "title", 'name' => "Name", 'type' => 'title', 'hidden' => true, 'required' => false, 'logic' => [ "conditions" => [ "operatorIdentifier"=> "and", "children"=> [ [ "identifier"=> "title", "value"=> [ "operator"=> "equals", "property_meta"=> [ "id"=> "title", "type"=> "text" ], "value"=> "TEST" ] ] ] ], "actions" => ['hide-block'] ] ] ] ]; $validatorObj = $this->app['validator']->make($data, $rules); $this->assertFalse($validatorObj->passes()); expect($validatorObj->errors()->messages()['properties.0.logic'][0])->toBe("The logic actions for Name are not valid."); $data = [ 'properties' => [ [ 'id' => "text", 'name' => "Custom Test", 'type' => 'nf-text', 'logic' => [ "conditions" => [ "operatorIdentifier"=> "and", "children"=> [ [ "identifier"=> "title", "value"=> [ "operator"=> "equals", "property_meta"=> [ "id"=> "title", "type"=> "text" ], "value"=> "TEST" ] ] ] ], "actions" => ['require-answer'] ] ] ] ]; $validatorObj = $this->app['validator']->make($data, $rules); $this->assertFalse($validatorObj->passes()); expect($validatorObj->errors()->messages()['properties.0.logic'][0])->toBe("The logic actions for Custom Test are not valid."); }); it('can validate form logic rules for conditions', function () { $rules = [ 'properties.*.logic' => ['array', 'nullable', new FormPropertyLogicRule()] ]; $data = [ 'properties' => [ [ 'id' => "title", 'name' => "Name", 'type' => 'text', 'hidden' => false, 'required' => false, 'logic' => [ "conditions" => [ "operatorIdentifier"=> "and", "children"=> [ [ "identifier"=> "title", "value"=> [ "operator"=> "equals", "property_meta"=> [ "id"=> "title", "type"=> "text" ], "value"=> "TEST" ] ] ] ], "actions" => ['hide-block'] ] ] ] ]; $validatorObj = $this->app['validator']->make($data, $rules); $this->assertTrue($validatorObj->passes()); $data = [ 'properties' => [ [ 'id' => "title", 'name' => "Name", 'type' => 'text', 'hidden' => false, 'required' => false, 'logic' => [ "conditions" => [ "operatorIdentifier"=> "and", "children"=> [ [ "identifier"=> "title", "value"=> [ "operator"=> "starts_with", "property_meta"=> [ "id"=> "title", "type"=> "text" ], ] ] ] ], "actions" => ['hide-block'] ] ] ] ]; $validatorObj = $this->app['validator']->make($data, $rules); $this->assertFalse($validatorObj->passes()); expect($validatorObj->errors()->messages()['properties.0.logic'][0])->toBe("The logic conditions for Name are not complete. Error detail(s): missing condition value"); $data = [ 'properties' => [ [ 'id' => "title", 'name' => "Name", 'type' => 'text', 'hidden' => false, 'required' => false, 'logic' => [ "conditions" => [ "operatorIdentifier"=> null, "children"=> [ [ "identifier"=> "title", "value"=> [ "operator"=> "starts_with", "property_meta"=> [ "id"=> "title", "type"=> "text" ], ] ] ] ], "actions" => ['hide-block'] ] ] ] ]; $validatorObj = $this->app['validator']->make($data, $rules); $this->assertFalse($validatorObj->passes()); expect($validatorObj->errors()->messages()['properties.0.logic'][0])->toBe("The logic conditions for Name are not complete. Error detail(s): missing operator"); });