@@ -2523,4 +2523,181 @@ describe('hasWorkflowChanged', () => {
25232523 }
25242524 )
25252525 } )
2526+
2527+ describe ( 'Variables (UI-only fields should not trigger change)' , ( ) => {
2528+ it . concurrent ( 'should not detect change when validationError differs' , ( ) => {
2529+ const deployedState = createWorkflowState ( {
2530+ blocks : {
2531+ block1 : createBlock ( 'block1' ) ,
2532+ } ,
2533+ } )
2534+ ; ( deployedState as any ) . variables = {
2535+ var1 : {
2536+ id : 'var1' ,
2537+ workflowId : 'workflow1' ,
2538+ name : 'myVar' ,
2539+ type : 'plain' ,
2540+ value : 'test' ,
2541+ } ,
2542+ }
2543+
2544+ const currentState = createWorkflowState ( {
2545+ blocks : {
2546+ block1 : createBlock ( 'block1' ) ,
2547+ } ,
2548+ } )
2549+ ; ( currentState as any ) . variables = {
2550+ var1 : {
2551+ id : 'var1' ,
2552+ workflowId : 'workflow1' ,
2553+ name : 'myVar' ,
2554+ type : 'plain' ,
2555+ value : 'test' ,
2556+ validationError : undefined ,
2557+ } ,
2558+ }
2559+
2560+ expect ( hasWorkflowChanged ( currentState , deployedState ) ) . toBe ( false )
2561+ } )
2562+
2563+ it . concurrent ( 'should not detect change when validationError has value vs missing' , ( ) => {
2564+ const deployedState = createWorkflowState ( {
2565+ blocks : {
2566+ block1 : createBlock ( 'block1' ) ,
2567+ } ,
2568+ } )
2569+ ; ( deployedState as any ) . variables = {
2570+ var1 : {
2571+ id : 'var1' ,
2572+ workflowId : 'workflow1' ,
2573+ name : 'myVar' ,
2574+ type : 'number' ,
2575+ value : 'invalid' ,
2576+ } ,
2577+ }
2578+
2579+ const currentState = createWorkflowState ( {
2580+ blocks : {
2581+ block1 : createBlock ( 'block1' ) ,
2582+ } ,
2583+ } )
2584+ ; ( currentState as any ) . variables = {
2585+ var1 : {
2586+ id : 'var1' ,
2587+ workflowId : 'workflow1' ,
2588+ name : 'myVar' ,
2589+ type : 'number' ,
2590+ value : 'invalid' ,
2591+ validationError : 'Not a valid number' ,
2592+ } ,
2593+ }
2594+
2595+ expect ( hasWorkflowChanged ( currentState , deployedState ) ) . toBe ( false )
2596+ } )
2597+
2598+ it . concurrent ( 'should detect change when variable value differs' , ( ) => {
2599+ const deployedState = createWorkflowState ( {
2600+ blocks : {
2601+ block1 : createBlock ( 'block1' ) ,
2602+ } ,
2603+ } )
2604+ ; ( deployedState as any ) . variables = {
2605+ var1 : {
2606+ id : 'var1' ,
2607+ workflowId : 'workflow1' ,
2608+ name : 'myVar' ,
2609+ type : 'plain' ,
2610+ value : 'old value' ,
2611+ } ,
2612+ }
2613+
2614+ const currentState = createWorkflowState ( {
2615+ blocks : {
2616+ block1 : createBlock ( 'block1' ) ,
2617+ } ,
2618+ } )
2619+ ; ( currentState as any ) . variables = {
2620+ var1 : {
2621+ id : 'var1' ,
2622+ workflowId : 'workflow1' ,
2623+ name : 'myVar' ,
2624+ type : 'plain' ,
2625+ value : 'new value' ,
2626+ validationError : undefined ,
2627+ } ,
2628+ }
2629+
2630+ expect ( hasWorkflowChanged ( currentState , deployedState ) ) . toBe ( true )
2631+ } )
2632+
2633+ it . concurrent ( 'should detect change when variable is added' , ( ) => {
2634+ const deployedState = createWorkflowState ( {
2635+ blocks : {
2636+ block1 : createBlock ( 'block1' ) ,
2637+ } ,
2638+ } )
2639+ ; ( deployedState as any ) . variables = { }
2640+
2641+ const currentState = createWorkflowState ( {
2642+ blocks : {
2643+ block1 : createBlock ( 'block1' ) ,
2644+ } ,
2645+ } )
2646+ ; ( currentState as any ) . variables = {
2647+ var1 : {
2648+ id : 'var1' ,
2649+ workflowId : 'workflow1' ,
2650+ name : 'myVar' ,
2651+ type : 'plain' ,
2652+ value : 'test' ,
2653+ } ,
2654+ }
2655+
2656+ expect ( hasWorkflowChanged ( currentState , deployedState ) ) . toBe ( true )
2657+ } )
2658+
2659+ it . concurrent ( 'should detect change when variable is removed' , ( ) => {
2660+ const deployedState = createWorkflowState ( {
2661+ blocks : {
2662+ block1 : createBlock ( 'block1' ) ,
2663+ } ,
2664+ } )
2665+ ; ( deployedState as any ) . variables = {
2666+ var1 : {
2667+ id : 'var1' ,
2668+ workflowId : 'workflow1' ,
2669+ name : 'myVar' ,
2670+ type : 'plain' ,
2671+ value : 'test' ,
2672+ } ,
2673+ }
2674+
2675+ const currentState = createWorkflowState ( {
2676+ blocks : {
2677+ block1 : createBlock ( 'block1' ) ,
2678+ } ,
2679+ } )
2680+ ; ( currentState as any ) . variables = { }
2681+
2682+ expect ( hasWorkflowChanged ( currentState , deployedState ) ) . toBe ( true )
2683+ } )
2684+
2685+ it . concurrent ( 'should not detect change when empty array vs empty object' , ( ) => {
2686+ const deployedState = createWorkflowState ( {
2687+ blocks : {
2688+ block1 : createBlock ( 'block1' ) ,
2689+ } ,
2690+ } )
2691+ ; ( deployedState as any ) . variables = [ ]
2692+
2693+ const currentState = createWorkflowState ( {
2694+ blocks : {
2695+ block1 : createBlock ( 'block1' ) ,
2696+ } ,
2697+ } )
2698+ ; ( currentState as any ) . variables = { }
2699+
2700+ expect ( hasWorkflowChanged ( currentState , deployedState ) ) . toBe ( false )
2701+ } )
2702+ } )
25262703} )
0 commit comments