@nyaruka/temba-components 0.142.0 → 0.142.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"split_by_run_result.test.js","sourceRoot":"","sources":["../../../test/nodes/split_by_run_result.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { expect } from '@open-wc/testing';\nimport { split_by_run_result } from '../../src/flow/nodes/split_by_run_result';\nimport { Node } from '../../src/store/flow-definition';\nimport { NodeTest } from '../NodeHelper';\nimport { zustand } from '../../src/store/AppState';\nimport { NODE_CONFIG } from '../../src/flow/config';\n\n/**\n * Test suite for the split_by_run_result node configuration.\n */\ndescribe('split_by_run_result node config', () => {\n const helper = new NodeTest(split_by_run_result, 'split_by_run_result');\n\n // Setup mock flow results in the store before each test\n beforeEach(() => {\n // Mock the store with flow results\n zustand.setState({\n flowInfo: {\n results: [\n {\n key: 'favorite_color',\n name: 'Favorite Color',\n categories: ['Red', 'Blue', 'Green'],\n node_uuids: ['node-1']\n },\n {\n key: 'age',\n name: 'Age',\n categories: ['Adult', 'Teen', 'Child'],\n node_uuids: ['node-2']\n }\n ],\n dependencies: [],\n counts: { nodes: 0, languages: 0 },\n locals: []\n }\n } as any);\n });\n\n describe('basic properties', () => {\n helper.testBasicProperties();\n\n it('has correct name', () => {\n expect(split_by_run_result.name).to.equal('Split by Result');\n });\n\n it('has correct type', () => {\n expect(split_by_run_result.type).to.equal('split_by_run_result');\n });\n\n it('has correct dialog size', () => {\n expect(split_by_run_result.dialogSize).to.equal('large');\n });\n });\n\n describe('toFormData', () => {\n it('should transform node with rules to form data correctly', () => {\n const node: Node = {\n uuid: 'test-node-uuid',\n actions: [],\n router: {\n type: 'switch',\n operand: '@results.favorite_color',\n cases: [\n {\n uuid: 'case-1',\n type: 'has_phrase',\n arguments: ['red'],\n category_uuid: 'cat-1'\n },\n {\n uuid: 'case-2',\n type: 'has_any_word',\n arguments: ['blue', 'azure'],\n category_uuid: 'cat-2'\n }\n ],\n categories: [\n { uuid: 'cat-1', name: 'Red', exit_uuid: 'exit-1' },\n { uuid: 'cat-2', name: 'Blue', exit_uuid: 'exit-2' },\n { uuid: 'cat-other', name: 'Other', exit_uuid: 'exit-other' }\n ],\n default_category_uuid: 'cat-other',\n result_name: 'color_category'\n },\n exits: [\n { uuid: 'exit-1', destination_uuid: null },\n { uuid: 'exit-2', destination_uuid: null },\n { uuid: 'exit-other', destination_uuid: null }\n ]\n };\n\n const nodeUI = {\n config: {\n operand: {\n value: 'favorite_color',\n name: 'Favorite Color'\n }\n }\n };\n\n const formData = split_by_run_result.toFormData!(node, nodeUI);\n\n expect(formData.uuid).to.equal('test-node-uuid');\n expect(formData.result).to.be.an('array');\n expect(formData.result[0].value).to.equal('favorite_color');\n expect(formData.result[0].name).to.equal('Favorite Color');\n expect(formData.rules).to.have.lengthOf(2);\n\n // Check first rule\n expect(formData.rules[0].operator.value).to.equal('has_phrase');\n expect(formData.rules[0].value1).to.equal('red');\n expect(formData.rules[0].category).to.equal('Red');\n\n // Check second rule\n expect(formData.rules[1].operator.value).to.equal('has_any_word');\n expect(formData.rules[1].value1).to.equal('blue azure');\n expect(formData.rules[1].category).to.equal('Blue');\n\n expect(formData.result_name).to.equal('color_category');\n });\n\n it('should transform node with no rules to form data correctly', () => {\n const node: Node = {\n uuid: 'test-node-uuid',\n actions: [],\n router: {\n type: 'switch',\n operand: '@results.age',\n cases: [],\n categories: [\n {\n uuid: 'cat-all',\n name: 'All Responses',\n exit_uuid: 'exit-all'\n }\n ],\n default_category_uuid: 'cat-all'\n },\n exits: [{ uuid: 'exit-all', destination_uuid: null }]\n };\n\n const nodeUI = {\n config: {\n operand: {\n value: 'age',\n name: 'Age'\n }\n }\n };\n\n const formData = split_by_run_result.toFormData!(node, nodeUI);\n\n expect(formData.uuid).to.equal('test-node-uuid');\n expect(formData.result).to.be.an('array');\n expect(formData.result[0].value).to.equal('age');\n expect(formData.result[0].name).to.equal('Age');\n expect(formData.rules).to.have.lengthOf(0);\n expect(formData.result_name).to.equal('');\n });\n\n it('should handle missing nodeUI config gracefully', () => {\n const node: Node = {\n uuid: 'test-node-uuid',\n actions: [],\n router: {\n type: 'switch',\n operand: '@results.favorite_color',\n cases: [],\n categories: [\n {\n uuid: 'cat-all',\n name: 'All Responses',\n exit_uuid: 'exit-all'\n }\n ],\n default_category_uuid: 'cat-all'\n },\n exits: [{ uuid: 'exit-all', destination_uuid: null }]\n };\n\n const formData = split_by_run_result.toFormData!(node);\n\n expect(formData.uuid).to.equal('test-node-uuid');\n expect(formData.result).to.be.an('array');\n expect(formData.result).to.have.lengthOf(0);\n });\n\n it('should transform node with two-operand operators correctly', () => {\n const node: Node = {\n uuid: 'test-node-uuid',\n actions: [],\n router: {\n type: 'switch',\n operand: '@results.age',\n cases: [\n {\n uuid: 'case-1',\n type: 'has_number_between',\n arguments: ['13', '17'],\n category_uuid: 'cat-1'\n }\n ],\n categories: [\n { uuid: 'cat-1', name: 'Teen', exit_uuid: 'exit-1' },\n { uuid: 'cat-other', name: 'Other', exit_uuid: 'exit-other' }\n ],\n default_category_uuid: 'cat-other'\n },\n exits: [\n { uuid: 'exit-1', destination_uuid: null },\n { uuid: 'exit-other', destination_uuid: null }\n ]\n };\n\n const nodeUI = {\n config: {\n operand: {\n value: 'age',\n name: 'Age'\n }\n }\n };\n\n const formData = split_by_run_result.toFormData!(node, nodeUI);\n\n expect(formData.rules).to.have.lengthOf(1);\n expect(formData.rules[0].operator.value).to.equal('has_number_between');\n expect(formData.rules[0].value1).to.equal('13');\n expect(formData.rules[0].value2).to.equal('17');\n expect(formData.rules[0].category).to.equal('Teen');\n });\n\n it('should transform node with zero-operand operators correctly', () => {\n const node: Node = {\n uuid: 'test-node-uuid',\n actions: [],\n router: {\n type: 'switch',\n operand: '@results.age',\n cases: [\n {\n uuid: 'case-1',\n type: 'has_number',\n arguments: [],\n category_uuid: 'cat-1'\n }\n ],\n categories: [\n { uuid: 'cat-1', name: 'Has Number', exit_uuid: 'exit-1' },\n { uuid: 'cat-other', name: 'Other', exit_uuid: 'exit-other' }\n ],\n default_category_uuid: 'cat-other'\n },\n exits: [\n { uuid: 'exit-1', destination_uuid: null },\n { uuid: 'exit-other', destination_uuid: null }\n ]\n };\n\n const nodeUI = {\n config: {\n operand: {\n value: 'age',\n name: 'Age'\n }\n }\n };\n\n const formData = split_by_run_result.toFormData!(node, nodeUI);\n\n expect(formData.rules).to.have.lengthOf(1);\n expect(formData.rules[0].operator.value).to.equal('has_number');\n expect(formData.rules[0].value1).to.equal('');\n expect(formData.rules[0].value2).to.equal('');\n });\n });\n\n describe('fromFormData', () => {\n it('should transform form data with rules to node correctly', () => {\n const formData = {\n uuid: 'test-node-uuid',\n result: [{ value: 'favorite_color', name: 'Favorite Color' }],\n rules: [\n {\n operator: { value: 'has_phrase', name: 'has the phrase' },\n value1: 'red',\n value2: '',\n category: 'Red'\n },\n {\n operator: { value: 'has_any_word', name: 'has any of the words' },\n value1: 'blue azure',\n value2: '',\n category: 'Blue'\n }\n ],\n result_name: 'color_category'\n };\n\n const originalNode: Node = {\n uuid: 'test-node-uuid',\n actions: [],\n router: {\n type: 'switch',\n operand: '@results.old_result',\n cases: [],\n categories: [],\n default_category_uuid: ''\n },\n exits: []\n };\n\n const resultNode = split_by_run_result.fromFormData!(\n formData,\n originalNode\n );\n\n expect(resultNode.uuid).to.equal('test-node-uuid');\n expect(resultNode.router).to.exist;\n expect(resultNode.router!.type).to.equal('switch');\n expect(resultNode.router!.operand).to.equal('@results.favorite_color');\n expect(resultNode.router!.result_name).to.equal('color_category');\n\n // Verify cases\n expect(resultNode.router!.cases).to.have.lengthOf(2);\n expect(resultNode.router!.cases![0].type).to.equal('has_phrase');\n expect(resultNode.router!.cases![0].arguments).to.deep.equal(['red']);\n expect(resultNode.router!.cases![1].type).to.equal('has_any_word');\n expect(resultNode.router!.cases![1].arguments).to.deep.equal([\n 'blue',\n 'azure'\n ]);\n\n // Verify categories\n expect(resultNode.router!.categories).to.have.lengthOf(3); // Red, Blue, Other\n expect(resultNode.router!.categories[0].name).to.equal('Red');\n expect(resultNode.router!.categories[1].name).to.equal('Blue');\n expect(resultNode.router!.categories[2].name).to.equal('Other');\n\n // Verify exits\n expect(resultNode.exits).to.have.lengthOf(3);\n });\n\n it('should transform form data without rules to node correctly', () => {\n const formData = {\n uuid: 'test-node-uuid',\n result: [{ value: 'age', name: 'Age' }],\n rules: [],\n result_name: ''\n };\n\n const originalNode: Node = {\n uuid: 'test-node-uuid',\n actions: [],\n router: {\n type: 'switch',\n operand: '@results.old_result',\n cases: [],\n categories: [],\n default_category_uuid: ''\n },\n exits: []\n };\n\n const resultNode = split_by_run_result.fromFormData!(\n formData,\n originalNode\n );\n\n expect(resultNode.uuid).to.equal('test-node-uuid');\n expect(resultNode.router).to.exist;\n expect(resultNode.router!.type).to.equal('switch');\n expect(resultNode.router!.operand).to.equal('@results.age');\n expect(resultNode.router!.result_name).to.be.undefined;\n\n // Should have only the default 'All Responses' category (no rules means \"All Responses\")\n expect(resultNode.router!.categories).to.have.lengthOf(1);\n expect(resultNode.router!.categories[0].name).to.equal('All Responses');\n\n // Should have one exit\n expect(resultNode.exits).to.have.lengthOf(1);\n });\n\n it('should not set result_name if empty', () => {\n const formData = {\n uuid: 'test-node-uuid',\n result: [{ value: 'favorite_color', name: 'Favorite Color' }],\n rules: [],\n result_name: ''\n };\n\n const originalNode: Node = {\n uuid: 'test-node-uuid',\n actions: [],\n router: {\n type: 'switch',\n operand: '@results.old_result',\n cases: [],\n categories: [],\n default_category_uuid: ''\n },\n exits: []\n };\n\n const resultNode = split_by_run_result.fromFormData!(\n formData,\n originalNode\n );\n\n expect(resultNode.router!.result_name).to.be.undefined;\n });\n\n it('should preserve existing UUIDs when updating categories', () => {\n const formData = {\n uuid: 'test-node-uuid',\n result: [{ value: 'favorite_color', name: 'Favorite Color' }],\n rules: [\n {\n operator: { value: 'has_phrase', name: 'has the phrase' },\n value1: 'red',\n value2: '',\n category: 'Red'\n }\n ],\n result_name: ''\n };\n\n const originalNode: Node = {\n uuid: 'test-node-uuid',\n actions: [],\n router: {\n type: 'switch',\n operand: '@results.favorite_color',\n cases: [\n {\n uuid: 'existing-case-uuid',\n type: 'has_phrase',\n arguments: ['red'],\n category_uuid: 'existing-cat-uuid'\n }\n ],\n categories: [\n {\n uuid: 'existing-cat-uuid',\n name: 'Red',\n exit_uuid: 'existing-exit-uuid'\n },\n {\n uuid: 'existing-other-uuid',\n name: 'Other',\n exit_uuid: 'existing-other-exit-uuid'\n }\n ],\n default_category_uuid: 'existing-other-uuid'\n },\n exits: [\n { uuid: 'existing-exit-uuid', destination_uuid: 'some-node' },\n { uuid: 'existing-other-exit-uuid', destination_uuid: null }\n ]\n };\n\n const resultNode = split_by_run_result.fromFormData!(\n formData,\n originalNode\n );\n\n // Should preserve existing category UUIDs\n const redCategory = resultNode.router!.categories.find(\n (cat) => cat.name === 'Red'\n );\n expect(redCategory!.uuid).to.equal('existing-cat-uuid');\n expect(redCategory!.exit_uuid).to.equal('existing-exit-uuid');\n\n const otherCategory = resultNode.router!.categories.find(\n (cat) => cat.name === 'Other'\n );\n expect(otherCategory!.uuid).to.equal('existing-other-uuid');\n expect(otherCategory!.exit_uuid).to.equal('existing-other-exit-uuid');\n\n // Should preserve exit destinations\n const redExit = resultNode.exits.find(\n (exit) => exit.uuid === 'existing-exit-uuid'\n );\n expect(redExit!.destination_uuid).to.equal('some-node');\n });\n\n it('should handle form data without result selection', () => {\n const formData = {\n uuid: 'test-node-uuid',\n result: [],\n rules: [],\n result_name: ''\n };\n\n const originalNode: Node = {\n uuid: 'test-node-uuid',\n actions: [],\n router: {\n type: 'switch',\n operand: '@results.old_result',\n cases: [],\n categories: [],\n default_category_uuid: ''\n },\n exits: []\n };\n\n const resultNode = split_by_run_result.fromFormData!(\n formData,\n originalNode\n );\n\n // Should return the original node unchanged\n expect(resultNode).to.equal(originalNode);\n });\n\n it('should handle incomplete rules gracefully', () => {\n const formData = {\n uuid: 'test-node-uuid',\n result: [{ value: 'age', name: 'Age' }],\n rules: [\n {\n operator: { value: 'has_number_gte', name: 'has a number above' },\n value1: '18',\n value2: '',\n category: 'Adult'\n },\n {\n operator: { value: 'has_number_lt', name: 'has a number below' },\n value1: '', // Missing value1\n value2: '',\n category: 'Child'\n },\n {\n operator: {\n value: 'has_number_between',\n name: 'has a number between'\n },\n value1: '10',\n value2: '', // Missing value2 for 2-operand operator\n category: 'Teen'\n }\n ],\n result_name: ''\n };\n\n const originalNode: Node = {\n uuid: 'test-node-uuid',\n actions: [],\n router: {\n type: 'switch',\n operand: '@results.age',\n cases: [],\n categories: [],\n default_category_uuid: ''\n },\n exits: []\n };\n\n const resultNode = split_by_run_result.fromFormData!(\n formData,\n originalNode\n );\n\n // Only the first complete rule should be included\n expect(resultNode.router!.cases).to.have.lengthOf(1);\n expect(resultNode.router!.cases![0].type).to.equal('has_number_gte');\n\n // Should have Adult category and Other\n expect(resultNode.router!.categories).to.have.lengthOf(2);\n expect(resultNode.router!.categories[0].name).to.equal('Adult');\n expect(resultNode.router!.categories[1].name).to.equal('Other');\n });\n\n it('should handle two-operand operators correctly', () => {\n const formData = {\n uuid: 'test-node-uuid',\n result: [{ value: 'age', name: 'Age' }],\n rules: [\n {\n operator: {\n value: 'has_number_between',\n name: 'has a number between'\n },\n value1: '13',\n value2: '17',\n category: 'Teen'\n }\n ],\n result_name: ''\n };\n\n const originalNode: Node = {\n uuid: 'test-node-uuid',\n actions: [],\n router: {\n type: 'switch',\n operand: '@results.age',\n cases: [],\n categories: [],\n default_category_uuid: ''\n },\n exits: []\n };\n\n const resultNode = split_by_run_result.fromFormData!(\n formData,\n originalNode\n );\n\n expect(resultNode.router!.cases).to.have.lengthOf(1);\n expect(resultNode.router!.cases![0].type).to.equal('has_number_between');\n expect(resultNode.router!.cases![0].arguments).to.deep.equal([\n '13',\n '17'\n ]);\n });\n });\n\n describe('validation', () => {\n it('should validate that a result is required', () => {\n const formData = {\n result: [],\n rules: [],\n result_name: ''\n };\n\n const validation = split_by_run_result.validate!(formData);\n\n expect(validation.valid).to.be.false;\n expect(validation.errors).to.have.property('result');\n expect(validation.errors.result).to.equal('A flow result is required');\n });\n\n it('should pass validation with valid result', () => {\n const formData = {\n result: [{ value: 'favorite_color', name: 'Favorite Color' }],\n rules: [],\n result_name: ''\n };\n\n const validation = split_by_run_result.validate!(formData);\n\n expect(validation.valid).to.be.true;\n expect(validation.errors).to.deep.equal({});\n });\n\n it('should pass validation with result and rules', () => {\n const formData = {\n result: [{ value: 'age', name: 'Age' }],\n rules: [\n {\n operator: { value: 'has_number_gte', name: 'has a number above' },\n value1: '18',\n value2: '',\n category: 'Adult'\n }\n ],\n result_name: 'age_category'\n };\n\n const validation = split_by_run_result.validate!(formData);\n\n expect(validation.valid).to.be.true;\n expect(validation.errors).to.deep.equal({});\n });\n });\n\n describe('delimiter functionality', () => {\n describe('toFormData', () => {\n it('should extract delimiter configuration when enabled', () => {\n const node: Node = {\n uuid: 'test-node-uuid',\n actions: [],\n router: {\n type: 'switch',\n operand: '@(field(results.favorite_color, 2, \".\"))',\n cases: [\n {\n uuid: 'case-1',\n type: 'has_phrase',\n arguments: ['red'],\n category_uuid: 'cat-1'\n }\n ],\n categories: [\n { uuid: 'cat-1', name: 'Red', exit_uuid: 'exit-1' },\n { uuid: 'cat-other', name: 'Other', exit_uuid: 'exit-other' }\n ],\n default_category_uuid: 'cat-other',\n result_name: 'color_category'\n },\n exits: [\n { uuid: 'exit-1', destination_uuid: null },\n { uuid: 'exit-other', destination_uuid: null }\n ]\n };\n\n const nodeUI = {\n config: {\n operand: {\n value: 'favorite_color',\n name: 'Favorite Color'\n },\n index: 2,\n delimiter: '.'\n }\n };\n\n const formData = split_by_run_result.toFormData!(node, nodeUI);\n\n expect(formData.delimit_by).to.be.an('array');\n expect(formData.delimit_by[0].value).to.equal('.');\n expect(formData.delimit_by[0].name).to.equal('Delimited by periods');\n expect(formData.delimit_index).to.be.an('array');\n expect(formData.delimit_index[0].value).to.equal('2');\n expect(formData.delimit_index[0].name).to.equal('third result');\n });\n\n it('should handle delimiter not enabled', () => {\n const node: Node = {\n uuid: 'test-node-uuid',\n actions: [],\n router: {\n type: 'switch',\n operand: '@results.favorite_color',\n cases: [],\n categories: [\n {\n uuid: 'cat-all',\n name: 'All Responses',\n exit_uuid: 'exit-all'\n }\n ],\n default_category_uuid: 'cat-all'\n },\n exits: [{ uuid: 'exit-all', destination_uuid: null }]\n };\n\n const nodeUI = {\n config: {\n operand: {\n value: 'favorite_color',\n name: 'Favorite Color'\n }\n }\n };\n\n const formData = split_by_run_result.toFormData!(node, nodeUI);\n\n expect(formData.delimit_by).to.be.an('array');\n expect(formData.delimit_by[0].value).to.equal('');\n expect(formData.delimit_by[0].name).to.equal(\"Don't delimit result\");\n expect(formData.delimit_index).to.be.an('array');\n expect(formData.delimit_index[0].value).to.equal('0');\n });\n });\n\n describe('fromFormData', () => {\n it('should generate operand with field() function when delimiter enabled', () => {\n const formData = {\n uuid: 'test-node-uuid',\n result: [{ value: 'favorite_color', name: 'Favorite Color' }],\n delimit_by: [{ value: '+', name: 'plusses' }],\n delimit_index: [{ value: '1', name: 'second' }],\n rules: [\n {\n operator: { value: 'has_phrase', name: 'has the phrase' },\n value1: 'red',\n value2: '',\n category: 'Red'\n }\n ],\n result_name: 'color_category'\n };\n\n const originalNode: Node = {\n uuid: 'test-node-uuid',\n actions: [],\n router: {\n type: 'switch',\n operand: '@results.old_result',\n cases: [],\n categories: [],\n default_category_uuid: ''\n },\n exits: []\n };\n\n const resultNode = split_by_run_result.fromFormData!(\n formData,\n originalNode\n );\n\n expect(resultNode.router!.operand).to.equal(\n '@(field(results.favorite_color, 1, \"+\"))'\n );\n });\n\n it('should generate standard operand when delimiter not enabled', () => {\n const formData = {\n uuid: 'test-node-uuid',\n result: [{ value: 'favorite_color', name: 'Favorite Color' }],\n delimit_by: [{ value: '', name: \"Don't delimit\" }],\n delimit_index: [{ value: '0', name: 'first' }],\n rules: [],\n result_name: ''\n };\n\n const originalNode: Node = {\n uuid: 'test-node-uuid',\n actions: [],\n router: {\n type: 'switch',\n operand: '@results.old_result',\n cases: [],\n categories: [],\n default_category_uuid: ''\n },\n exits: []\n };\n\n const resultNode = split_by_run_result.fromFormData!(\n formData,\n originalNode\n );\n\n expect(resultNode.router!.operand).to.equal('@results.favorite_color');\n });\n\n it('should handle different field numbers correctly', () => {\n const formData = {\n uuid: 'test-node-uuid',\n result: [{ value: 'age', name: 'Age' }],\n delimit_by: [{ value: '.', name: 'periods' }],\n delimit_index: [{ value: '9', name: 'tenth' }],\n rules: [],\n result_name: ''\n };\n\n const originalNode: Node = {\n uuid: 'test-node-uuid',\n actions: [],\n router: {\n type: 'switch',\n operand: '@results.age',\n cases: [],\n categories: [],\n default_category_uuid: ''\n },\n exits: []\n };\n\n const resultNode = split_by_run_result.fromFormData!(\n formData,\n originalNode\n );\n\n expect(resultNode.router!.operand).to.equal(\n '@(field(results.age, 9, \".\"))'\n );\n });\n\n it('should use default values when delimiter fields missing', () => {\n const formData = {\n uuid: 'test-node-uuid',\n result: [{ value: 'favorite_color', name: 'Favorite Color' }],\n delimit_by: [{ value: ' ', name: 'spaces' }],\n rules: [],\n result_name: ''\n };\n\n const originalNode: Node = {\n uuid: 'test-node-uuid',\n actions: [],\n router: {\n type: 'switch',\n operand: '@results.old_result',\n cases: [],\n categories: [],\n default_category_uuid: ''\n },\n exits: []\n };\n\n const resultNode = split_by_run_result.fromFormData!(\n formData,\n originalNode\n );\n\n expect(resultNode.router!.operand).to.equal(\n '@(field(results.favorite_color, 0, \" \"))'\n );\n });\n });\n\n describe('toUIConfig', () => {\n it('should persist delimiter configuration when enabled', () => {\n const formData = {\n result: [{ value: 'favorite_color', name: 'Favorite Color' }],\n delimit_by: [{ value: '+', name: 'plusses' }],\n delimit_index: [{ value: '3', name: 'fourth' }],\n rules: [],\n result_name: ''\n };\n\n const config = split_by_run_result.toUIConfig!(formData);\n\n expect(config.operand).to.exist;\n expect(config.operand.id).to.equal('favorite_color');\n expect(config.index).to.equal(3);\n expect(config.delimiter).to.equal('+');\n });\n\n it('should not include delimiter config when not enabled', () => {\n const formData = {\n result: [{ value: 'favorite_color', name: 'Favorite Color' }],\n delimit_by: [{ value: '', name: \"Don't delimit\" }],\n delimit_index: [{ value: '0', name: 'first' }],\n rules: [],\n result_name: ''\n };\n\n const config = split_by_run_result.toUIConfig!(formData);\n\n expect(config.operand).to.exist;\n expect(config.operand.id).to.equal('favorite_color');\n expect(config.index).to.be.undefined;\n expect(config.delimiter).to.be.undefined;\n });\n\n it('should set type to split_by_run_result_delimited when delimiter is enabled', () => {\n const formData = {\n result: [{ value: 'favorite_color', name: 'Favorite Color' }],\n delimit_by: [{ value: '+', name: 'plusses' }],\n delimit_index: [{ value: '3', name: 'fourth' }],\n rules: [],\n result_name: ''\n };\n\n const config = split_by_run_result.toUIConfig!(formData);\n\n expect(config.type).to.equal('split_by_run_result_delimited');\n });\n\n it('should set type to split_by_run_result when delimiter is not enabled', () => {\n const formData = {\n result: [{ value: 'favorite_color', name: 'Favorite Color' }],\n delimit_by: [{ value: '', name: \"Don't delimit\" }],\n delimit_index: [{ value: '0', name: 'first' }],\n rules: [],\n result_name: ''\n };\n\n const config = split_by_run_result.toUIConfig!(formData);\n\n expect(config.type).to.equal('split_by_run_result');\n });\n });\n\n describe('round-trip tests', () => {\n it('should preserve delimiter configuration through toFormData and fromFormData', () => {\n const originalNode: Node = {\n uuid: 'test-node-uuid',\n actions: [],\n router: {\n type: 'switch',\n operand: '@(field(results.favorite_color, 5, \".\"))',\n cases: [\n {\n uuid: 'case-1',\n type: 'has_phrase',\n arguments: ['red'],\n category_uuid: 'cat-1'\n }\n ],\n categories: [\n { uuid: 'cat-1', name: 'Red', exit_uuid: 'exit-1' },\n { uuid: 'cat-other', name: 'Other', exit_uuid: 'exit-other' }\n ],\n default_category_uuid: 'cat-other',\n result_name: 'color_category'\n },\n exits: [\n { uuid: 'exit-1', destination_uuid: null },\n { uuid: 'exit-other', destination_uuid: null }\n ]\n };\n\n const nodeUI = {\n config: {\n operand: {\n value: 'favorite_color',\n name: 'Favorite Color'\n },\n index: 5,\n delimiter: '.'\n }\n };\n\n // Convert to form data\n const formData = split_by_run_result.toFormData!(originalNode, nodeUI);\n\n // Convert back to node\n const resultNode = split_by_run_result.fromFormData!(\n formData,\n originalNode\n );\n\n // Verify operand is preserved\n expect(resultNode.router!.operand).to.equal(\n '@(field(results.favorite_color, 5, \".\"))'\n );\n });\n\n it('should handle toggling delimiter on and off', () => {\n const originalNode: Node = {\n uuid: 'test-node-uuid',\n actions: [],\n router: {\n type: 'switch',\n operand: '@results.favorite_color',\n cases: [],\n categories: [\n {\n uuid: 'cat-all',\n name: 'All Responses',\n exit_uuid: 'exit-all'\n }\n ],\n default_category_uuid: 'cat-all'\n },\n exits: [{ uuid: 'exit-all', destination_uuid: null }]\n };\n\n // Start with delimiter disabled\n const nodeUI = {\n config: {\n operand: {\n value: 'favorite_color',\n name: 'Favorite Color'\n }\n }\n };\n\n // Convert to form data\n const formData = split_by_run_result.toFormData!(originalNode, nodeUI);\n expect(formData.delimit_by[0].value).to.equal('');\n\n // Enable delimiter\n formData.delimit_by = [{ value: '+', name: 'plusses' }];\n formData.delimit_index = [{ value: '2', name: 'third' }];\n\n // Convert to node\n const resultNode = split_by_run_result.fromFormData!(\n formData,\n originalNode\n );\n\n expect(resultNode.router!.operand).to.equal(\n '@(field(results.favorite_color, 2, \"+\"))'\n );\n\n // Get UI config and verify it persists delimiter settings\n const config = split_by_run_result.toUIConfig!(formData);\n expect(config.index).to.equal(2);\n expect(config.delimiter).to.equal('+');\n });\n\n it('should properly remove delimiter when switching from delimited to non-delimited', () => {\n // Start with a node that has delimiter enabled\n const nodeWithDelimiter: Node = {\n uuid: 'test-node-uuid',\n actions: [],\n router: {\n type: 'switch',\n operand: '@(field(results.favorite_color, 2, \".\"))',\n cases: [],\n categories: [\n {\n uuid: 'cat-all',\n name: 'All Responses',\n exit_uuid: 'exit-all'\n }\n ],\n default_category_uuid: 'cat-all'\n },\n exits: [{ uuid: 'exit-all', destination_uuid: null }]\n };\n\n const nodeUI = {\n config: {\n operand: {\n value: 'favorite_color',\n name: 'Favorite Color'\n }\n }\n };\n\n // Convert to form data - should show delimiter is enabled\n const formData = split_by_run_result.toFormData!(\n nodeWithDelimiter,\n nodeUI\n );\n expect(formData.delimit_by[0].value).to.equal('.');\n expect(formData.delimit_index[0].value).to.equal('2');\n\n // Now remove the delimiter by selecting \"Don't delimit result\"\n formData.delimit_by = [{ value: '', name: \"Don't delimit result\" }];\n\n // Convert back to node\n const resultNode = split_by_run_result.fromFormData!(\n formData,\n nodeWithDelimiter\n );\n\n // Operand should now be standard without field() function\n expect(resultNode.router!.operand).to.equal('@results.favorite_color');\n\n // Get UI config - should NOT have index or delimiter\n const config = split_by_run_result.toUIConfig!(formData);\n expect(config.index).to.be.undefined;\n expect(config.delimiter).to.be.undefined;\n\n // Re-open the dialog - toFormData should show no delimiter\n const formDataReopened = split_by_run_result.toFormData!(\n resultNode,\n nodeUI\n );\n expect(formDataReopened.delimit_by[0].value).to.equal('');\n expect(formDataReopened.delimit_by[0].name).to.equal(\n \"Don't delimit result\"\n );\n });\n });\n });\n\n describe('toFormData normalizes operand from toUIConfig', () => {\n it('should handle round-trip when operand has only id (no value)', () => {\n // Reproduces the bug: toUIConfig saves { id, name, type } without 'value',\n // then toFormData loads it, and fromFormData must still produce a valid operand.\n const originalNode: Node = {\n uuid: 'test-node-uuid',\n actions: [],\n router: {\n type: 'switch',\n operand: '@results.favorite_color',\n cases: [\n {\n uuid: 'case-1',\n type: 'has_phrase',\n arguments: ['red'],\n category_uuid: 'cat-1'\n }\n ],\n categories: [\n { uuid: 'cat-1', name: 'Red', exit_uuid: 'exit-1' },\n { uuid: 'cat-other', name: 'Other', exit_uuid: 'exit-other' }\n ],\n default_category_uuid: 'cat-other',\n result_name: ''\n },\n exits: [\n { uuid: 'exit-1', destination_uuid: null },\n { uuid: 'exit-other', destination_uuid: null }\n ]\n };\n\n // nodeUI as saved by toUIConfig - note: NO 'value' property, only 'id'\n const nodeUI = {\n config: {\n operand: {\n id: 'favorite_color',\n name: 'Favorite Color',\n type: 'result'\n }\n }\n };\n\n // Step 1: toFormData (opening the editor)\n const formData = split_by_run_result.toFormData!(originalNode, nodeUI);\n\n // The result should have 'value' normalized from 'id'\n expect(formData.result[0].value).to.equal('favorite_color');\n\n // Step 2: fromFormData (saving without re-selecting the result)\n const updatedNode = split_by_run_result.fromFormData!(\n formData,\n originalNode\n );\n\n // The operand must NOT be @results.undefined\n expect(updatedNode.router!.operand).to.equal('@results.favorite_color');\n });\n\n it('should handle round-trip with delimiter when operand has only id', () => {\n const originalNode: Node = {\n uuid: 'test-node-uuid',\n actions: [],\n router: {\n type: 'switch',\n operand: '@(field(results.favorite_color, 2, \".\"))',\n cases: [],\n categories: [\n { uuid: 'cat-other', name: 'Other', exit_uuid: 'exit-other' }\n ],\n default_category_uuid: 'cat-other',\n result_name: ''\n },\n exits: [{ uuid: 'exit-other', destination_uuid: null }]\n };\n\n const nodeUI = {\n config: {\n operand: {\n id: 'favorite_color',\n name: 'Favorite Color',\n type: 'result'\n },\n index: 2,\n delimiter: '.'\n }\n };\n\n const formData = split_by_run_result.toFormData!(originalNode, nodeUI);\n expect(formData.result[0].value).to.equal('favorite_color');\n\n const updatedNode = split_by_run_result.fromFormData!(\n formData,\n originalNode\n );\n expect(updatedNode.router!.operand).to.equal(\n '@(field(results.favorite_color, 2, \".\"))'\n );\n });\n });\n\n describe('backwards compatibility', () => {\n it('should support split_by_run_result_delimited type from old flows', () => {\n // Verify that split_by_run_result_delimited points to the same config as split_by_run_result\n expect(NODE_CONFIG['split_by_run_result_delimited']).to.equal(\n NODE_CONFIG['split_by_run_result']\n );\n expect(NODE_CONFIG['split_by_run_result_delimited']).to.equal(\n split_by_run_result\n );\n\n // Verify we can look up the config with the old type name\n const config = NODE_CONFIG['split_by_run_result_delimited'];\n expect(config).to.not.be.undefined;\n expect(config.name).to.equal('Split by Result');\n });\n\n it('should correctly process old flow with split_by_run_result_delimited type', () => {\n // Simulate a node from an old flow with the delimited type\n const oldNode: Node = {\n uuid: 'old-node-uuid',\n actions: [],\n router: {\n type: 'switch',\n operand: '@(field(results.bloop, 0, \"+\"))',\n cases: [\n {\n uuid: 'case-1',\n type: 'has_any_word',\n arguments: ['red'],\n category_uuid: 'cat-1'\n }\n ],\n categories: [\n { uuid: 'cat-1', name: 'Red', exit_uuid: 'exit-1' },\n { uuid: 'cat-other', name: 'Other', exit_uuid: 'exit-other' }\n ],\n default_category_uuid: 'cat-other'\n },\n exits: [\n { uuid: 'exit-1', destination_uuid: null },\n { uuid: 'exit-other', destination_uuid: null }\n ]\n };\n\n const oldNodeUI = {\n type: 'split_by_run_result_delimited',\n config: {\n operand: {\n id: 'bloop',\n name: 'Bloop',\n type: 'result'\n },\n index: 0,\n delimiter: '+'\n }\n };\n\n // Get config using the old type name - this should work due to backwards compatibility\n const config = NODE_CONFIG[oldNodeUI.type];\n expect(config).to.not.be.undefined;\n\n // Verify we can convert to form data\n const formData = config.toFormData!(oldNode, oldNodeUI);\n expect(formData.result[0].id).to.equal('bloop');\n expect(formData.result[0].name).to.equal('Bloop');\n expect(formData.delimit_by[0].value).to.equal('+');\n expect(formData.delimit_index[0].value).to.equal('0');\n });\n });\n});\n"]}
1
+ {"version":3,"file":"split_by_run_result.test.js","sourceRoot":"","sources":["../../../test/nodes/split_by_run_result.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { expect } from '@open-wc/testing';\nimport { split_by_run_result } from '../../src/flow/nodes/split_by_run_result';\nimport { Node } from '../../src/store/flow-definition';\nimport { NodeTest } from '../NodeHelper';\nimport { zustand } from '../../src/store/AppState';\nimport { NODE_CONFIG } from '../../src/flow/config';\n\n/**\n * Test suite for the split_by_run_result node configuration.\n */\ndescribe('split_by_run_result node config', () => {\n const helper = new NodeTest(split_by_run_result, 'split_by_run_result');\n\n // Setup mock flow results in the store before each test\n beforeEach(() => {\n // Mock the store with flow results\n zustand.setState({\n flowInfo: {\n results: [\n {\n key: 'favorite_color',\n name: 'Favorite Color',\n categories: ['Red', 'Blue', 'Green'],\n node_uuids: ['node-1']\n },\n {\n key: 'age',\n name: 'Age',\n categories: ['Adult', 'Teen', 'Child'],\n node_uuids: ['node-2']\n }\n ],\n dependencies: [],\n counts: { nodes: 0, languages: 0 },\n locals: []\n }\n } as any);\n });\n\n describe('basic properties', () => {\n helper.testBasicProperties();\n\n it('has correct name', () => {\n expect(split_by_run_result.name).to.equal('Split by Result');\n });\n\n it('has correct type', () => {\n expect(split_by_run_result.type).to.equal('split_by_run_result');\n });\n\n it('has correct dialog size', () => {\n expect(split_by_run_result.dialogSize).to.equal('large');\n });\n });\n\n describe('toFormData', () => {\n it('should transform node with rules to form data correctly', () => {\n const node: Node = {\n uuid: 'test-node-uuid',\n actions: [],\n router: {\n type: 'switch',\n operand: '@results.favorite_color',\n cases: [\n {\n uuid: 'case-1',\n type: 'has_phrase',\n arguments: ['red'],\n category_uuid: 'cat-1'\n },\n {\n uuid: 'case-2',\n type: 'has_any_word',\n arguments: ['blue', 'azure'],\n category_uuid: 'cat-2'\n }\n ],\n categories: [\n { uuid: 'cat-1', name: 'Red', exit_uuid: 'exit-1' },\n { uuid: 'cat-2', name: 'Blue', exit_uuid: 'exit-2' },\n { uuid: 'cat-other', name: 'Other', exit_uuid: 'exit-other' }\n ],\n default_category_uuid: 'cat-other',\n result_name: 'color_category'\n },\n exits: [\n { uuid: 'exit-1', destination_uuid: null },\n { uuid: 'exit-2', destination_uuid: null },\n { uuid: 'exit-other', destination_uuid: null }\n ]\n };\n\n const nodeUI = {\n config: {\n operand: {\n value: 'favorite_color',\n name: 'Favorite Color'\n }\n }\n };\n\n const formData = split_by_run_result.toFormData!(node, nodeUI);\n\n expect(formData.uuid).to.equal('test-node-uuid');\n expect(formData.result).to.be.an('array');\n expect(formData.result[0].value).to.equal('favorite_color');\n expect(formData.result[0].name).to.equal('Favorite Color');\n expect(formData.rules).to.have.lengthOf(2);\n\n // Check first rule\n expect(formData.rules[0].operator.value).to.equal('has_phrase');\n expect(formData.rules[0].value1).to.equal('red');\n expect(formData.rules[0].category).to.equal('Red');\n\n // Check second rule\n expect(formData.rules[1].operator.value).to.equal('has_any_word');\n expect(formData.rules[1].value1).to.equal('blue azure');\n expect(formData.rules[1].category).to.equal('Blue');\n\n expect(formData.result_name).to.equal('color_category');\n });\n\n it('should transform node with no rules to form data correctly', () => {\n const node: Node = {\n uuid: 'test-node-uuid',\n actions: [],\n router: {\n type: 'switch',\n operand: '@results.age',\n cases: [],\n categories: [\n {\n uuid: 'cat-all',\n name: 'All Responses',\n exit_uuid: 'exit-all'\n }\n ],\n default_category_uuid: 'cat-all'\n },\n exits: [{ uuid: 'exit-all', destination_uuid: null }]\n };\n\n const nodeUI = {\n config: {\n operand: {\n value: 'age',\n name: 'Age'\n }\n }\n };\n\n const formData = split_by_run_result.toFormData!(node, nodeUI);\n\n expect(formData.uuid).to.equal('test-node-uuid');\n expect(formData.result).to.be.an('array');\n expect(formData.result[0].value).to.equal('age');\n expect(formData.result[0].name).to.equal('Age');\n expect(formData.rules).to.have.lengthOf(0);\n expect(formData.result_name).to.equal('');\n });\n\n it('should handle missing nodeUI config gracefully', () => {\n const node: Node = {\n uuid: 'test-node-uuid',\n actions: [],\n router: {\n type: 'switch',\n operand: '@results.favorite_color',\n cases: [],\n categories: [\n {\n uuid: 'cat-all',\n name: 'All Responses',\n exit_uuid: 'exit-all'\n }\n ],\n default_category_uuid: 'cat-all'\n },\n exits: [{ uuid: 'exit-all', destination_uuid: null }]\n };\n\n const formData = split_by_run_result.toFormData!(node);\n\n expect(formData.uuid).to.equal('test-node-uuid');\n expect(formData.result).to.be.an('array');\n expect(formData.result).to.have.lengthOf(0);\n });\n\n it('should transform node with two-operand operators correctly', () => {\n const node: Node = {\n uuid: 'test-node-uuid',\n actions: [],\n router: {\n type: 'switch',\n operand: '@results.age',\n cases: [\n {\n uuid: 'case-1',\n type: 'has_number_between',\n arguments: ['13', '17'],\n category_uuid: 'cat-1'\n }\n ],\n categories: [\n { uuid: 'cat-1', name: 'Teen', exit_uuid: 'exit-1' },\n { uuid: 'cat-other', name: 'Other', exit_uuid: 'exit-other' }\n ],\n default_category_uuid: 'cat-other'\n },\n exits: [\n { uuid: 'exit-1', destination_uuid: null },\n { uuid: 'exit-other', destination_uuid: null }\n ]\n };\n\n const nodeUI = {\n config: {\n operand: {\n value: 'age',\n name: 'Age'\n }\n }\n };\n\n const formData = split_by_run_result.toFormData!(node, nodeUI);\n\n expect(formData.rules).to.have.lengthOf(1);\n expect(formData.rules[0].operator.value).to.equal('has_number_between');\n expect(formData.rules[0].value1).to.equal('13');\n expect(formData.rules[0].value2).to.equal('17');\n expect(formData.rules[0].category).to.equal('Teen');\n });\n\n it('should transform node with zero-operand operators correctly', () => {\n const node: Node = {\n uuid: 'test-node-uuid',\n actions: [],\n router: {\n type: 'switch',\n operand: '@results.age',\n cases: [\n {\n uuid: 'case-1',\n type: 'has_number',\n arguments: [],\n category_uuid: 'cat-1'\n }\n ],\n categories: [\n { uuid: 'cat-1', name: 'Has Number', exit_uuid: 'exit-1' },\n { uuid: 'cat-other', name: 'Other', exit_uuid: 'exit-other' }\n ],\n default_category_uuid: 'cat-other'\n },\n exits: [\n { uuid: 'exit-1', destination_uuid: null },\n { uuid: 'exit-other', destination_uuid: null }\n ]\n };\n\n const nodeUI = {\n config: {\n operand: {\n value: 'age',\n name: 'Age'\n }\n }\n };\n\n const formData = split_by_run_result.toFormData!(node, nodeUI);\n\n expect(formData.rules).to.have.lengthOf(1);\n expect(formData.rules[0].operator.value).to.equal('has_number');\n expect(formData.rules[0].value1).to.equal('');\n expect(formData.rules[0].value2).to.equal('');\n });\n });\n\n describe('fromFormData', () => {\n it('should transform form data with rules to node correctly', () => {\n const formData = {\n uuid: 'test-node-uuid',\n result: [{ value: 'favorite_color', name: 'Favorite Color' }],\n rules: [\n {\n operator: { value: 'has_phrase', name: 'has the phrase' },\n value1: 'red',\n value2: '',\n category: 'Red'\n },\n {\n operator: { value: 'has_any_word', name: 'has any of the words' },\n value1: 'blue azure',\n value2: '',\n category: 'Blue'\n }\n ],\n result_name: 'color_category'\n };\n\n const originalNode: Node = {\n uuid: 'test-node-uuid',\n actions: [],\n router: {\n type: 'switch',\n operand: '@results.old_result',\n cases: [],\n categories: [],\n default_category_uuid: ''\n },\n exits: []\n };\n\n const resultNode = split_by_run_result.fromFormData!(\n formData,\n originalNode\n );\n\n expect(resultNode.uuid).to.equal('test-node-uuid');\n expect(resultNode.router).to.exist;\n expect(resultNode.router!.type).to.equal('switch');\n expect(resultNode.router!.operand).to.equal('@results.favorite_color');\n expect(resultNode.router!.result_name).to.equal('color_category');\n\n // Verify cases\n expect(resultNode.router!.cases).to.have.lengthOf(2);\n expect(resultNode.router!.cases![0].type).to.equal('has_phrase');\n expect(resultNode.router!.cases![0].arguments).to.deep.equal(['red']);\n expect(resultNode.router!.cases![1].type).to.equal('has_any_word');\n expect(resultNode.router!.cases![1].arguments).to.deep.equal([\n 'blue azure'\n ]);\n\n // Verify categories\n expect(resultNode.router!.categories).to.have.lengthOf(3); // Red, Blue, Other\n expect(resultNode.router!.categories[0].name).to.equal('Red');\n expect(resultNode.router!.categories[1].name).to.equal('Blue');\n expect(resultNode.router!.categories[2].name).to.equal('Other');\n\n // Verify exits\n expect(resultNode.exits).to.have.lengthOf(3);\n });\n\n it('should transform form data without rules to node correctly', () => {\n const formData = {\n uuid: 'test-node-uuid',\n result: [{ value: 'age', name: 'Age' }],\n rules: [],\n result_name: ''\n };\n\n const originalNode: Node = {\n uuid: 'test-node-uuid',\n actions: [],\n router: {\n type: 'switch',\n operand: '@results.old_result',\n cases: [],\n categories: [],\n default_category_uuid: ''\n },\n exits: []\n };\n\n const resultNode = split_by_run_result.fromFormData!(\n formData,\n originalNode\n );\n\n expect(resultNode.uuid).to.equal('test-node-uuid');\n expect(resultNode.router).to.exist;\n expect(resultNode.router!.type).to.equal('switch');\n expect(resultNode.router!.operand).to.equal('@results.age');\n expect(resultNode.router!.result_name).to.be.undefined;\n\n // Should have only the default 'All Responses' category (no rules means \"All Responses\")\n expect(resultNode.router!.categories).to.have.lengthOf(1);\n expect(resultNode.router!.categories[0].name).to.equal('All Responses');\n\n // Should have one exit\n expect(resultNode.exits).to.have.lengthOf(1);\n });\n\n it('should not set result_name if empty', () => {\n const formData = {\n uuid: 'test-node-uuid',\n result: [{ value: 'favorite_color', name: 'Favorite Color' }],\n rules: [],\n result_name: ''\n };\n\n const originalNode: Node = {\n uuid: 'test-node-uuid',\n actions: [],\n router: {\n type: 'switch',\n operand: '@results.old_result',\n cases: [],\n categories: [],\n default_category_uuid: ''\n },\n exits: []\n };\n\n const resultNode = split_by_run_result.fromFormData!(\n formData,\n originalNode\n );\n\n expect(resultNode.router!.result_name).to.be.undefined;\n });\n\n it('should preserve existing UUIDs when updating categories', () => {\n const formData = {\n uuid: 'test-node-uuid',\n result: [{ value: 'favorite_color', name: 'Favorite Color' }],\n rules: [\n {\n operator: { value: 'has_phrase', name: 'has the phrase' },\n value1: 'red',\n value2: '',\n category: 'Red'\n }\n ],\n result_name: ''\n };\n\n const originalNode: Node = {\n uuid: 'test-node-uuid',\n actions: [],\n router: {\n type: 'switch',\n operand: '@results.favorite_color',\n cases: [\n {\n uuid: 'existing-case-uuid',\n type: 'has_phrase',\n arguments: ['red'],\n category_uuid: 'existing-cat-uuid'\n }\n ],\n categories: [\n {\n uuid: 'existing-cat-uuid',\n name: 'Red',\n exit_uuid: 'existing-exit-uuid'\n },\n {\n uuid: 'existing-other-uuid',\n name: 'Other',\n exit_uuid: 'existing-other-exit-uuid'\n }\n ],\n default_category_uuid: 'existing-other-uuid'\n },\n exits: [\n { uuid: 'existing-exit-uuid', destination_uuid: 'some-node' },\n { uuid: 'existing-other-exit-uuid', destination_uuid: null }\n ]\n };\n\n const resultNode = split_by_run_result.fromFormData!(\n formData,\n originalNode\n );\n\n // Should preserve existing category UUIDs\n const redCategory = resultNode.router!.categories.find(\n (cat) => cat.name === 'Red'\n );\n expect(redCategory!.uuid).to.equal('existing-cat-uuid');\n expect(redCategory!.exit_uuid).to.equal('existing-exit-uuid');\n\n const otherCategory = resultNode.router!.categories.find(\n (cat) => cat.name === 'Other'\n );\n expect(otherCategory!.uuid).to.equal('existing-other-uuid');\n expect(otherCategory!.exit_uuid).to.equal('existing-other-exit-uuid');\n\n // Should preserve exit destinations\n const redExit = resultNode.exits.find(\n (exit) => exit.uuid === 'existing-exit-uuid'\n );\n expect(redExit!.destination_uuid).to.equal('some-node');\n });\n\n it('should handle form data without result selection', () => {\n const formData = {\n uuid: 'test-node-uuid',\n result: [],\n rules: [],\n result_name: ''\n };\n\n const originalNode: Node = {\n uuid: 'test-node-uuid',\n actions: [],\n router: {\n type: 'switch',\n operand: '@results.old_result',\n cases: [],\n categories: [],\n default_category_uuid: ''\n },\n exits: []\n };\n\n const resultNode = split_by_run_result.fromFormData!(\n formData,\n originalNode\n );\n\n // Should return the original node unchanged\n expect(resultNode).to.equal(originalNode);\n });\n\n it('should handle incomplete rules gracefully', () => {\n const formData = {\n uuid: 'test-node-uuid',\n result: [{ value: 'age', name: 'Age' }],\n rules: [\n {\n operator: { value: 'has_number_gte', name: 'has a number above' },\n value1: '18',\n value2: '',\n category: 'Adult'\n },\n {\n operator: { value: 'has_number_lt', name: 'has a number below' },\n value1: '', // Missing value1\n value2: '',\n category: 'Child'\n },\n {\n operator: {\n value: 'has_number_between',\n name: 'has a number between'\n },\n value1: '10',\n value2: '', // Missing value2 for 2-operand operator\n category: 'Teen'\n }\n ],\n result_name: ''\n };\n\n const originalNode: Node = {\n uuid: 'test-node-uuid',\n actions: [],\n router: {\n type: 'switch',\n operand: '@results.age',\n cases: [],\n categories: [],\n default_category_uuid: ''\n },\n exits: []\n };\n\n const resultNode = split_by_run_result.fromFormData!(\n formData,\n originalNode\n );\n\n // Only the first complete rule should be included\n expect(resultNode.router!.cases).to.have.lengthOf(1);\n expect(resultNode.router!.cases![0].type).to.equal('has_number_gte');\n\n // Should have Adult category and Other\n expect(resultNode.router!.categories).to.have.lengthOf(2);\n expect(resultNode.router!.categories[0].name).to.equal('Adult');\n expect(resultNode.router!.categories[1].name).to.equal('Other');\n });\n\n it('should handle two-operand operators correctly', () => {\n const formData = {\n uuid: 'test-node-uuid',\n result: [{ value: 'age', name: 'Age' }],\n rules: [\n {\n operator: {\n value: 'has_number_between',\n name: 'has a number between'\n },\n value1: '13',\n value2: '17',\n category: 'Teen'\n }\n ],\n result_name: ''\n };\n\n const originalNode: Node = {\n uuid: 'test-node-uuid',\n actions: [],\n router: {\n type: 'switch',\n operand: '@results.age',\n cases: [],\n categories: [],\n default_category_uuid: ''\n },\n exits: []\n };\n\n const resultNode = split_by_run_result.fromFormData!(\n formData,\n originalNode\n );\n\n expect(resultNode.router!.cases).to.have.lengthOf(1);\n expect(resultNode.router!.cases![0].type).to.equal('has_number_between');\n expect(resultNode.router!.cases![0].arguments).to.deep.equal([\n '13',\n '17'\n ]);\n });\n });\n\n describe('validation', () => {\n it('should validate that a result is required', () => {\n const formData = {\n result: [],\n rules: [],\n result_name: ''\n };\n\n const validation = split_by_run_result.validate!(formData);\n\n expect(validation.valid).to.be.false;\n expect(validation.errors).to.have.property('result');\n expect(validation.errors.result).to.equal('A flow result is required');\n });\n\n it('should pass validation with valid result', () => {\n const formData = {\n result: [{ value: 'favorite_color', name: 'Favorite Color' }],\n rules: [],\n result_name: ''\n };\n\n const validation = split_by_run_result.validate!(formData);\n\n expect(validation.valid).to.be.true;\n expect(validation.errors).to.deep.equal({});\n });\n\n it('should pass validation with result and rules', () => {\n const formData = {\n result: [{ value: 'age', name: 'Age' }],\n rules: [\n {\n operator: { value: 'has_number_gte', name: 'has a number above' },\n value1: '18',\n value2: '',\n category: 'Adult'\n }\n ],\n result_name: 'age_category'\n };\n\n const validation = split_by_run_result.validate!(formData);\n\n expect(validation.valid).to.be.true;\n expect(validation.errors).to.deep.equal({});\n });\n });\n\n describe('delimiter functionality', () => {\n describe('toFormData', () => {\n it('should extract delimiter configuration when enabled', () => {\n const node: Node = {\n uuid: 'test-node-uuid',\n actions: [],\n router: {\n type: 'switch',\n operand: '@(field(results.favorite_color, 2, \".\"))',\n cases: [\n {\n uuid: 'case-1',\n type: 'has_phrase',\n arguments: ['red'],\n category_uuid: 'cat-1'\n }\n ],\n categories: [\n { uuid: 'cat-1', name: 'Red', exit_uuid: 'exit-1' },\n { uuid: 'cat-other', name: 'Other', exit_uuid: 'exit-other' }\n ],\n default_category_uuid: 'cat-other',\n result_name: 'color_category'\n },\n exits: [\n { uuid: 'exit-1', destination_uuid: null },\n { uuid: 'exit-other', destination_uuid: null }\n ]\n };\n\n const nodeUI = {\n config: {\n operand: {\n value: 'favorite_color',\n name: 'Favorite Color'\n },\n index: 2,\n delimiter: '.'\n }\n };\n\n const formData = split_by_run_result.toFormData!(node, nodeUI);\n\n expect(formData.delimit_by).to.be.an('array');\n expect(formData.delimit_by[0].value).to.equal('.');\n expect(formData.delimit_by[0].name).to.equal('Delimited by periods');\n expect(formData.delimit_index).to.be.an('array');\n expect(formData.delimit_index[0].value).to.equal('2');\n expect(formData.delimit_index[0].name).to.equal('third result');\n });\n\n it('should handle delimiter not enabled', () => {\n const node: Node = {\n uuid: 'test-node-uuid',\n actions: [],\n router: {\n type: 'switch',\n operand: '@results.favorite_color',\n cases: [],\n categories: [\n {\n uuid: 'cat-all',\n name: 'All Responses',\n exit_uuid: 'exit-all'\n }\n ],\n default_category_uuid: 'cat-all'\n },\n exits: [{ uuid: 'exit-all', destination_uuid: null }]\n };\n\n const nodeUI = {\n config: {\n operand: {\n value: 'favorite_color',\n name: 'Favorite Color'\n }\n }\n };\n\n const formData = split_by_run_result.toFormData!(node, nodeUI);\n\n expect(formData.delimit_by).to.be.an('array');\n expect(formData.delimit_by[0].value).to.equal('');\n expect(formData.delimit_by[0].name).to.equal(\"Don't delimit result\");\n expect(formData.delimit_index).to.be.an('array');\n expect(formData.delimit_index[0].value).to.equal('0');\n });\n });\n\n describe('fromFormData', () => {\n it('should generate operand with field() function when delimiter enabled', () => {\n const formData = {\n uuid: 'test-node-uuid',\n result: [{ value: 'favorite_color', name: 'Favorite Color' }],\n delimit_by: [{ value: '+', name: 'plusses' }],\n delimit_index: [{ value: '1', name: 'second' }],\n rules: [\n {\n operator: { value: 'has_phrase', name: 'has the phrase' },\n value1: 'red',\n value2: '',\n category: 'Red'\n }\n ],\n result_name: 'color_category'\n };\n\n const originalNode: Node = {\n uuid: 'test-node-uuid',\n actions: [],\n router: {\n type: 'switch',\n operand: '@results.old_result',\n cases: [],\n categories: [],\n default_category_uuid: ''\n },\n exits: []\n };\n\n const resultNode = split_by_run_result.fromFormData!(\n formData,\n originalNode\n );\n\n expect(resultNode.router!.operand).to.equal(\n '@(field(results.favorite_color, 1, \"+\"))'\n );\n });\n\n it('should generate standard operand when delimiter not enabled', () => {\n const formData = {\n uuid: 'test-node-uuid',\n result: [{ value: 'favorite_color', name: 'Favorite Color' }],\n delimit_by: [{ value: '', name: \"Don't delimit\" }],\n delimit_index: [{ value: '0', name: 'first' }],\n rules: [],\n result_name: ''\n };\n\n const originalNode: Node = {\n uuid: 'test-node-uuid',\n actions: [],\n router: {\n type: 'switch',\n operand: '@results.old_result',\n cases: [],\n categories: [],\n default_category_uuid: ''\n },\n exits: []\n };\n\n const resultNode = split_by_run_result.fromFormData!(\n formData,\n originalNode\n );\n\n expect(resultNode.router!.operand).to.equal('@results.favorite_color');\n });\n\n it('should handle different field numbers correctly', () => {\n const formData = {\n uuid: 'test-node-uuid',\n result: [{ value: 'age', name: 'Age' }],\n delimit_by: [{ value: '.', name: 'periods' }],\n delimit_index: [{ value: '9', name: 'tenth' }],\n rules: [],\n result_name: ''\n };\n\n const originalNode: Node = {\n uuid: 'test-node-uuid',\n actions: [],\n router: {\n type: 'switch',\n operand: '@results.age',\n cases: [],\n categories: [],\n default_category_uuid: ''\n },\n exits: []\n };\n\n const resultNode = split_by_run_result.fromFormData!(\n formData,\n originalNode\n );\n\n expect(resultNode.router!.operand).to.equal(\n '@(field(results.age, 9, \".\"))'\n );\n });\n\n it('should use default values when delimiter fields missing', () => {\n const formData = {\n uuid: 'test-node-uuid',\n result: [{ value: 'favorite_color', name: 'Favorite Color' }],\n delimit_by: [{ value: ' ', name: 'spaces' }],\n rules: [],\n result_name: ''\n };\n\n const originalNode: Node = {\n uuid: 'test-node-uuid',\n actions: [],\n router: {\n type: 'switch',\n operand: '@results.old_result',\n cases: [],\n categories: [],\n default_category_uuid: ''\n },\n exits: []\n };\n\n const resultNode = split_by_run_result.fromFormData!(\n formData,\n originalNode\n );\n\n expect(resultNode.router!.operand).to.equal(\n '@(field(results.favorite_color, 0, \" \"))'\n );\n });\n });\n\n describe('toUIConfig', () => {\n it('should persist delimiter configuration when enabled', () => {\n const formData = {\n result: [{ value: 'favorite_color', name: 'Favorite Color' }],\n delimit_by: [{ value: '+', name: 'plusses' }],\n delimit_index: [{ value: '3', name: 'fourth' }],\n rules: [],\n result_name: ''\n };\n\n const config = split_by_run_result.toUIConfig!(formData);\n\n expect(config.operand).to.exist;\n expect(config.operand.id).to.equal('favorite_color');\n expect(config.index).to.equal(3);\n expect(config.delimiter).to.equal('+');\n });\n\n it('should not include delimiter config when not enabled', () => {\n const formData = {\n result: [{ value: 'favorite_color', name: 'Favorite Color' }],\n delimit_by: [{ value: '', name: \"Don't delimit\" }],\n delimit_index: [{ value: '0', name: 'first' }],\n rules: [],\n result_name: ''\n };\n\n const config = split_by_run_result.toUIConfig!(formData);\n\n expect(config.operand).to.exist;\n expect(config.operand.id).to.equal('favorite_color');\n expect(config.index).to.be.undefined;\n expect(config.delimiter).to.be.undefined;\n });\n\n it('should set type to split_by_run_result_delimited when delimiter is enabled', () => {\n const formData = {\n result: [{ value: 'favorite_color', name: 'Favorite Color' }],\n delimit_by: [{ value: '+', name: 'plusses' }],\n delimit_index: [{ value: '3', name: 'fourth' }],\n rules: [],\n result_name: ''\n };\n\n const config = split_by_run_result.toUIConfig!(formData);\n\n expect(config.type).to.equal('split_by_run_result_delimited');\n });\n\n it('should set type to split_by_run_result when delimiter is not enabled', () => {\n const formData = {\n result: [{ value: 'favorite_color', name: 'Favorite Color' }],\n delimit_by: [{ value: '', name: \"Don't delimit\" }],\n delimit_index: [{ value: '0', name: 'first' }],\n rules: [],\n result_name: ''\n };\n\n const config = split_by_run_result.toUIConfig!(formData);\n\n expect(config.type).to.equal('split_by_run_result');\n });\n });\n\n describe('round-trip tests', () => {\n it('should preserve delimiter configuration through toFormData and fromFormData', () => {\n const originalNode: Node = {\n uuid: 'test-node-uuid',\n actions: [],\n router: {\n type: 'switch',\n operand: '@(field(results.favorite_color, 5, \".\"))',\n cases: [\n {\n uuid: 'case-1',\n type: 'has_phrase',\n arguments: ['red'],\n category_uuid: 'cat-1'\n }\n ],\n categories: [\n { uuid: 'cat-1', name: 'Red', exit_uuid: 'exit-1' },\n { uuid: 'cat-other', name: 'Other', exit_uuid: 'exit-other' }\n ],\n default_category_uuid: 'cat-other',\n result_name: 'color_category'\n },\n exits: [\n { uuid: 'exit-1', destination_uuid: null },\n { uuid: 'exit-other', destination_uuid: null }\n ]\n };\n\n const nodeUI = {\n config: {\n operand: {\n value: 'favorite_color',\n name: 'Favorite Color'\n },\n index: 5,\n delimiter: '.'\n }\n };\n\n // Convert to form data\n const formData = split_by_run_result.toFormData!(originalNode, nodeUI);\n\n // Convert back to node\n const resultNode = split_by_run_result.fromFormData!(\n formData,\n originalNode\n );\n\n // Verify operand is preserved\n expect(resultNode.router!.operand).to.equal(\n '@(field(results.favorite_color, 5, \".\"))'\n );\n });\n\n it('should handle toggling delimiter on and off', () => {\n const originalNode: Node = {\n uuid: 'test-node-uuid',\n actions: [],\n router: {\n type: 'switch',\n operand: '@results.favorite_color',\n cases: [],\n categories: [\n {\n uuid: 'cat-all',\n name: 'All Responses',\n exit_uuid: 'exit-all'\n }\n ],\n default_category_uuid: 'cat-all'\n },\n exits: [{ uuid: 'exit-all', destination_uuid: null }]\n };\n\n // Start with delimiter disabled\n const nodeUI = {\n config: {\n operand: {\n value: 'favorite_color',\n name: 'Favorite Color'\n }\n }\n };\n\n // Convert to form data\n const formData = split_by_run_result.toFormData!(originalNode, nodeUI);\n expect(formData.delimit_by[0].value).to.equal('');\n\n // Enable delimiter\n formData.delimit_by = [{ value: '+', name: 'plusses' }];\n formData.delimit_index = [{ value: '2', name: 'third' }];\n\n // Convert to node\n const resultNode = split_by_run_result.fromFormData!(\n formData,\n originalNode\n );\n\n expect(resultNode.router!.operand).to.equal(\n '@(field(results.favorite_color, 2, \"+\"))'\n );\n\n // Get UI config and verify it persists delimiter settings\n const config = split_by_run_result.toUIConfig!(formData);\n expect(config.index).to.equal(2);\n expect(config.delimiter).to.equal('+');\n });\n\n it('should properly remove delimiter when switching from delimited to non-delimited', () => {\n // Start with a node that has delimiter enabled\n const nodeWithDelimiter: Node = {\n uuid: 'test-node-uuid',\n actions: [],\n router: {\n type: 'switch',\n operand: '@(field(results.favorite_color, 2, \".\"))',\n cases: [],\n categories: [\n {\n uuid: 'cat-all',\n name: 'All Responses',\n exit_uuid: 'exit-all'\n }\n ],\n default_category_uuid: 'cat-all'\n },\n exits: [{ uuid: 'exit-all', destination_uuid: null }]\n };\n\n const nodeUI = {\n config: {\n operand: {\n value: 'favorite_color',\n name: 'Favorite Color'\n }\n }\n };\n\n // Convert to form data - should show delimiter is enabled\n const formData = split_by_run_result.toFormData!(\n nodeWithDelimiter,\n nodeUI\n );\n expect(formData.delimit_by[0].value).to.equal('.');\n expect(formData.delimit_index[0].value).to.equal('2');\n\n // Now remove the delimiter by selecting \"Don't delimit result\"\n formData.delimit_by = [{ value: '', name: \"Don't delimit result\" }];\n\n // Convert back to node\n const resultNode = split_by_run_result.fromFormData!(\n formData,\n nodeWithDelimiter\n );\n\n // Operand should now be standard without field() function\n expect(resultNode.router!.operand).to.equal('@results.favorite_color');\n\n // Get UI config - should NOT have index or delimiter\n const config = split_by_run_result.toUIConfig!(formData);\n expect(config.index).to.be.undefined;\n expect(config.delimiter).to.be.undefined;\n\n // Re-open the dialog - toFormData should show no delimiter\n const formDataReopened = split_by_run_result.toFormData!(\n resultNode,\n nodeUI\n );\n expect(formDataReopened.delimit_by[0].value).to.equal('');\n expect(formDataReopened.delimit_by[0].name).to.equal(\n \"Don't delimit result\"\n );\n });\n });\n });\n\n describe('toFormData normalizes operand from toUIConfig', () => {\n it('should handle round-trip when operand has only id (no value)', () => {\n // Reproduces the bug: toUIConfig saves { id, name, type } without 'value',\n // then toFormData loads it, and fromFormData must still produce a valid operand.\n const originalNode: Node = {\n uuid: 'test-node-uuid',\n actions: [],\n router: {\n type: 'switch',\n operand: '@results.favorite_color',\n cases: [\n {\n uuid: 'case-1',\n type: 'has_phrase',\n arguments: ['red'],\n category_uuid: 'cat-1'\n }\n ],\n categories: [\n { uuid: 'cat-1', name: 'Red', exit_uuid: 'exit-1' },\n { uuid: 'cat-other', name: 'Other', exit_uuid: 'exit-other' }\n ],\n default_category_uuid: 'cat-other',\n result_name: ''\n },\n exits: [\n { uuid: 'exit-1', destination_uuid: null },\n { uuid: 'exit-other', destination_uuid: null }\n ]\n };\n\n // nodeUI as saved by toUIConfig - note: NO 'value' property, only 'id'\n const nodeUI = {\n config: {\n operand: {\n id: 'favorite_color',\n name: 'Favorite Color',\n type: 'result'\n }\n }\n };\n\n // Step 1: toFormData (opening the editor)\n const formData = split_by_run_result.toFormData!(originalNode, nodeUI);\n\n // The result should have 'value' normalized from 'id'\n expect(formData.result[0].value).to.equal('favorite_color');\n\n // Step 2: fromFormData (saving without re-selecting the result)\n const updatedNode = split_by_run_result.fromFormData!(\n formData,\n originalNode\n );\n\n // The operand must NOT be @results.undefined\n expect(updatedNode.router!.operand).to.equal('@results.favorite_color');\n });\n\n it('should handle round-trip with delimiter when operand has only id', () => {\n const originalNode: Node = {\n uuid: 'test-node-uuid',\n actions: [],\n router: {\n type: 'switch',\n operand: '@(field(results.favorite_color, 2, \".\"))',\n cases: [],\n categories: [\n { uuid: 'cat-other', name: 'Other', exit_uuid: 'exit-other' }\n ],\n default_category_uuid: 'cat-other',\n result_name: ''\n },\n exits: [{ uuid: 'exit-other', destination_uuid: null }]\n };\n\n const nodeUI = {\n config: {\n operand: {\n id: 'favorite_color',\n name: 'Favorite Color',\n type: 'result'\n },\n index: 2,\n delimiter: '.'\n }\n };\n\n const formData = split_by_run_result.toFormData!(originalNode, nodeUI);\n expect(formData.result[0].value).to.equal('favorite_color');\n\n const updatedNode = split_by_run_result.fromFormData!(\n formData,\n originalNode\n );\n expect(updatedNode.router!.operand).to.equal(\n '@(field(results.favorite_color, 2, \".\"))'\n );\n });\n });\n\n describe('backwards compatibility', () => {\n it('should support split_by_run_result_delimited type from old flows', () => {\n // Verify that split_by_run_result_delimited points to the same config as split_by_run_result\n expect(NODE_CONFIG['split_by_run_result_delimited']).to.equal(\n NODE_CONFIG['split_by_run_result']\n );\n expect(NODE_CONFIG['split_by_run_result_delimited']).to.equal(\n split_by_run_result\n );\n\n // Verify we can look up the config with the old type name\n const config = NODE_CONFIG['split_by_run_result_delimited'];\n expect(config).to.not.be.undefined;\n expect(config.name).to.equal('Split by Result');\n });\n\n it('should correctly process old flow with split_by_run_result_delimited type', () => {\n // Simulate a node from an old flow with the delimited type\n const oldNode: Node = {\n uuid: 'old-node-uuid',\n actions: [],\n router: {\n type: 'switch',\n operand: '@(field(results.bloop, 0, \"+\"))',\n cases: [\n {\n uuid: 'case-1',\n type: 'has_any_word',\n arguments: ['red'],\n category_uuid: 'cat-1'\n }\n ],\n categories: [\n { uuid: 'cat-1', name: 'Red', exit_uuid: 'exit-1' },\n { uuid: 'cat-other', name: 'Other', exit_uuid: 'exit-other' }\n ],\n default_category_uuid: 'cat-other'\n },\n exits: [\n { uuid: 'exit-1', destination_uuid: null },\n { uuid: 'exit-other', destination_uuid: null }\n ]\n };\n\n const oldNodeUI = {\n type: 'split_by_run_result_delimited',\n config: {\n operand: {\n id: 'bloop',\n name: 'Bloop',\n type: 'result'\n },\n index: 0,\n delimiter: '+'\n }\n };\n\n // Get config using the old type name - this should work due to backwards compatibility\n const config = NODE_CONFIG[oldNodeUI.type];\n expect(config).to.not.be.undefined;\n\n // Verify we can convert to form data\n const formData = config.toFormData!(oldNode, oldNodeUI);\n expect(formData.result[0].id).to.equal('bloop');\n expect(formData.result[0].name).to.equal('Bloop');\n expect(formData.delimit_by[0].value).to.equal('+');\n expect(formData.delimit_index[0].value).to.equal('0');\n });\n });\n});\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nyaruka/temba-components",
3
- "version": "0.142.0",
3
+ "version": "0.142.1",
4
4
  "description": "Web components to support rapidpro and related projects",
5
5
  "author": "Nyaruka <code@nyaruka.coim>",
6
6
  "main": "dist/index.js",
@@ -54,7 +54,7 @@
54
54
  "lit-html": "^3.1.2",
55
55
  "luxon": "3.5",
56
56
  "remarkable": "^2.0.1",
57
- "serialize-javascript": "^6.0.2",
57
+ "serialize-javascript": "^7.0.3",
58
58
  "tiny-lru": "^11.2.5",
59
59
  "uuid": "^11.1.0",
60
60
  "zustand": "^5.0.3"
package/src/utils.ts CHANGED
@@ -1410,27 +1410,20 @@ export const createRulesRouter = (
1410
1410
  // No operands needed
1411
1411
  arguments_ = [];
1412
1412
  } else if (operatorConfig.operands === 2) {
1413
- // Split value for two operands (e.g., "1 10" for between)
1413
+ // Two operands (e.g., "1 10" for between) - split into separate arguments
1414
1414
  arguments_ = rule.value.split(' ').filter((arg: string) => arg.trim());
1415
1415
  } else {
1416
- // Single operand - but split words for operators that expect multiple words
1416
+ // Single operand - keep as one argument string
1417
1417
  if (rule.value && rule.value.trim()) {
1418
- // Split on spaces and filter out empty strings
1419
- arguments_ = rule.value
1420
- .trim()
1421
- .split(/\s+/)
1422
- .filter((arg: string) => arg.length > 0);
1418
+ arguments_ = [rule.value.trim()];
1423
1419
  } else {
1424
1420
  arguments_ = [];
1425
1421
  }
1426
1422
  }
1427
1423
  } else {
1428
- // Fallback for unknown operators - split on spaces if value exists
1424
+ // Fallback for unknown operators
1429
1425
  if (rule.value && rule.value.trim()) {
1430
- arguments_ = rule.value
1431
- .trim()
1432
- .split(/\s+/)
1433
- .filter((arg: string) => arg.length > 0);
1426
+ arguments_ = [rule.value.trim()];
1434
1427
  } else {
1435
1428
  arguments_ = [];
1436
1429
  }
@@ -328,8 +328,7 @@ describe('split_by_run_result node config', () => {
328
328
  expect(resultNode.router!.cases![0].arguments).to.deep.equal(['red']);
329
329
  expect(resultNode.router!.cases![1].type).to.equal('has_any_word');
330
330
  expect(resultNode.router!.cases![1].arguments).to.deep.equal([
331
- 'blue',
332
- 'azure'
331
+ 'blue azure'
333
332
  ]);
334
333
 
335
334
  // Verify categories