feat(automations): multi-option form-field conditions (all / any / none / exact)

This commit is contained in:
2026-10-11 17:26:17 +03:30
parent f4398cdb3e
commit b43ed68e82
6 changed files with 93 additions and 16 deletions
@@ -22,6 +22,7 @@ import {
automationStepToConfig,
automationUsesAdvanced,
firstAutomationAction,
formConditionValues,
matchFormFieldCondition,
normalizeAutomationSteps,
packAutomationConfig,
@@ -668,7 +669,7 @@ function matchCondition(step: AutomationStep, facts: AutomationFacts): boolean {
if (field === 'form_field') {
const key = step.conditionKey?.trim();
if (!key) return false;
return matchFormFieldCondition(op, facts.formValues[key], step.conditionValue);
return matchFormFieldCondition(op, facts.formValues[key], formConditionValues(step));
}
return false;
+16
View File
@@ -2,6 +2,7 @@ import { describe, it } from 'node:test';
import assert from 'node:assert/strict';
import {
automationUsesAdvanced,
formConditionValues,
matchFormFieldCondition,
splitAutomationBranches,
planAutomationActions,
@@ -66,6 +67,21 @@ describe('اتوماسیون شاخه‌ای فرم', () => {
assert.equal(matchFormFieldCondition('is_empty', '', ''), true);
});
it('شرط با چند گزینهٔ انتخابی', () => {
const many = ['آزاد', 'کارگر'];
assert.equal(matchFormFieldCondition('contains', 'آزاد, کارگر, کارمند دولتی', many), true);
assert.equal(matchFormFieldCondition('contains', 'آزاد', many), false);
assert.equal(matchFormFieldCondition('contains_any', 'کارگر', many), true);
assert.equal(matchFormFieldCondition('contains_any', 'کارمند دولتی', many), false);
assert.equal(matchFormFieldCondition('not_contains', 'کارمند دولتی', many), true);
assert.equal(matchFormFieldCondition('not_contains', 'کارگر', many), false);
assert.equal(matchFormFieldCondition('eq', 'کارگر, آزاد', many), true);
assert.equal(matchFormFieldCondition('eq', 'آزاد, کارگر, کارمند دولتی', many), false);
assert.equal(matchFormFieldCondition('neq', 'آزاد', many), true);
assert.deepEqual(formConditionValues({ conditionValue: 'آزاد', conditionValues: [] }), ['آزاد']);
assert.deepEqual(formConditionValues({ conditionValue: 'x', conditionValues: many }), many);
});
it('هر گزینه فقط شاخهٔ خودش را اجرا می‌کند', () => {
assert.deepEqual(run(BSJ, 'بنکداری'), ['a1']);
assert.deepEqual(run(BSJ, 'آنلاین شاپ'), ['a2']);