Improve numeric condition handling in form logic checker

- Add robust numeric comparison for zero and negative numbers
- Implement safe numeric parsing and validation
- Enhance condition checking for numeric fields across PHP and JavaScript
- Add comprehensive test cases for edge case numeric comparisons
- Fix 'is_not_empty' operator logic in JavaScript condition checker
This commit is contained in:
Julien Nahum
2025-03-03 19:03:09 +08:00
parent 405ab64e41
commit cf4688d75e
3 changed files with 136 additions and 25 deletions

View File

@@ -150,6 +150,82 @@ describe('FormLogicConditionChecker', function () {
expect(FormLogicConditionChecker::conditionsMet($condition, $formData))->toBeTrue();
});
it('handles zero values correctly', function () {
$condition = [
'value' => [
'property_meta' => [
'id' => 'number_field',
'type' => 'number'
],
'operator' => 'equals',
'value' => 0
]
];
// Test zero equality
$formData = ['number_field' => 0];
expect(FormLogicConditionChecker::conditionsMet($condition, $formData))->toBeTrue();
$formData = ['number_field' => 1];
expect(FormLogicConditionChecker::conditionsMet($condition, $formData))->toBeFalse();
// Test less than with zero
$condition['value']['operator'] = 'less_than';
$condition['value']['value'] = 0;
$formData = ['number_field' => -1];
expect(FormLogicConditionChecker::conditionsMet($condition, $formData))->toBeTrue();
$formData = ['number_field' => 0];
expect(FormLogicConditionChecker::conditionsMet($condition, $formData))->toBeFalse();
// Test greater than with zero
$condition['value']['operator'] = 'greater_than';
$condition['value']['value'] = 0;
$formData = ['number_field' => 1];
expect(FormLogicConditionChecker::conditionsMet($condition, $formData))->toBeTrue();
$formData = ['number_field' => 0];
expect(FormLogicConditionChecker::conditionsMet($condition, $formData))->toBeFalse();
});
it('handles negative numbers correctly', function () {
$condition = [
'value' => [
'property_meta' => [
'id' => 'number_field',
'type' => 'number'
],
'operator' => 'equals',
'value' => -5
]
];
// Test negative number equality
$formData = ['number_field' => -5];
expect(FormLogicConditionChecker::conditionsMet($condition, $formData))->toBeTrue();
// Test less than with negative numbers
$condition['value']['operator'] = 'less_than';
$condition['value']['value'] = -5;
$formData = ['number_field' => -10];
expect(FormLogicConditionChecker::conditionsMet($condition, $formData))->toBeTrue();
$formData = ['number_field' => -5];
expect(FormLogicConditionChecker::conditionsMet($condition, $formData))->toBeFalse();
$formData = ['number_field' => 0];
expect(FormLogicConditionChecker::conditionsMet($condition, $formData))->toBeFalse();
// Test greater than with negative numbers
$condition['value']['operator'] = 'greater_than';
$condition['value']['value'] = -10;
$formData = ['number_field' => -5];
expect(FormLogicConditionChecker::conditionsMet($condition, $formData))->toBeTrue();
$formData = ['number_field' => -10];
expect(FormLogicConditionChecker::conditionsMet($condition, $formData))->toBeFalse();
});
it('handles empty checks correctly', function () {
$condition = [
'value' => [