2022-09-20 19:59:52 +00:00
< ? php
use App\Rules\FormPropertyLogicRule ;
it ( 'can validate form logic rules for actions' , function () {
$rules = [
'properties.*.logic' => [ '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' => [
2023-08-30 11:28:52 +00:00
" conditions " => [
" operatorIdentifier " => " and " ,
" children " => [
[
" identifier " => " title " ,
" value " => [
" operator " => " equals " ,
" property_meta " => [
" id " => " title " ,
" type " => " text "
],
" value " => " TEST "
]
]
]
],
2022-09-20 19:59:52 +00:00
" 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' => [
2023-08-30 11:28:52 +00:00
" conditions " => [
" operatorIdentifier " => " and " ,
" children " => [
[
" identifier " => " title " ,
" value " => [
" operator " => " equals " ,
" property_meta " => [
" id " => " title " ,
" type " => " text "
],
" value " => " TEST "
]
]
]
],
2022-09-20 19:59:52 +00:00
" 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 "
]
]
]
],
2023-08-30 11:28:52 +00:00
" actions " => [ 'hide-block' ]
2022-09-20 19:59:52 +00:00
]
]
]
];
$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 "
],
]
]
]
],
2023-08-30 11:28:52 +00:00
" actions " => [ 'hide-block' ]
2022-09-20 19:59:52 +00:00
]
]
]
];
$validatorObj = $this -> app [ 'validator' ] -> make ( $data , $rules );
$this -> assertFalse ( $validatorObj -> passes ());
2023-01-25 15:10:33 +00:00
expect ( $validatorObj -> errors () -> messages ()[ 'properties.0.logic' ][ 0 ]) -> toBe ( " The logic conditions for Name are not complete. Error detail(s): missing condition value " );
2023-03-15 17:11:25 +00:00
$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 "
],
]
]
]
],
2023-08-30 11:28:52 +00:00
" actions " => [ 'hide-block' ]
2023-03-15 17:11:25 +00:00
]
]
]
];
$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 " );
2022-09-20 19:59:52 +00:00
});