Improve form property logic validation for checkbox conditions
- Update FormPropertyLogicRule to handle operators without values - Add support for checkbox conditions like 'is_checked' and 'is_not_checked' - Refactor logic validation in both API and client-side implementations - Remove unnecessary console.log statements - Update error modal text for better user experience
This commit is contained in:
@@ -199,3 +199,57 @@ it('can validate form logic rules for conditions', function () {
|
||||
$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');
|
||||
});
|
||||
|
||||
it('can validate form logic rules for operators without values', function () {
|
||||
$rules = [
|
||||
'properties.*.logic' => ['array', 'nullable', new FormPropertyLogicRule()],
|
||||
];
|
||||
|
||||
// Test checkbox is_checked without value
|
||||
$data = [
|
||||
'properties' => [
|
||||
[
|
||||
'id' => 'checkbox1',
|
||||
'name' => 'Checkbox Field',
|
||||
'type' => 'checkbox',
|
||||
'logic' => [
|
||||
'conditions' => [
|
||||
'operatorIdentifier' => 'and',
|
||||
'children' => [
|
||||
[
|
||||
'identifier' => 'test-id',
|
||||
'value' => [
|
||||
'operator' => 'is_checked',
|
||||
'property_meta' => [
|
||||
'id' => 'test-id',
|
||||
'type' => 'checkbox'
|
||||
]
|
||||
]
|
||||
]
|
||||
]
|
||||
],
|
||||
'actions' => ['show-block']
|
||||
]
|
||||
]
|
||||
]
|
||||
];
|
||||
$validatorObj = $this->app['validator']->make($data, $rules);
|
||||
$this->assertTrue($validatorObj->passes());
|
||||
|
||||
// Test checkbox is_checked with value (should still pass for backward compatibility)
|
||||
$data['properties'][0]['logic']['conditions']['children'][0]['value']['value'] = true;
|
||||
$validatorObj = $this->app['validator']->make($data, $rules);
|
||||
$this->assertTrue($validatorObj->passes());
|
||||
|
||||
// Test checkbox is_not_checked without value
|
||||
$data['properties'][0]['logic']['conditions']['children'][0]['value']['operator'] = 'is_not_checked';
|
||||
unset($data['properties'][0]['logic']['conditions']['children'][0]['value']['value']);
|
||||
$validatorObj = $this->app['validator']->make($data, $rules);
|
||||
$this->assertTrue($validatorObj->passes());
|
||||
|
||||
// Test checkbox with operator that doesn't exist
|
||||
$data['properties'][0]['logic']['conditions']['children'][0]['value']['operator'] = 'invalid_operator';
|
||||
$validatorObj = $this->app['validator']->make($data, $rules);
|
||||
$this->assertFalse($validatorObj->passes());
|
||||
expect($validatorObj->errors()->messages()['properties.0.logic'][0])->toBe('The logic conditions for Checkbox Field are not complete. Error detail(s): configuration not found for condition operator');
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user