@@ -4,6 +4,7 @@ import { ReactFlowProvider } from '@xyflow/react';
44import { Diagram } from '@/components/diagram' ;
55import { EMPLOYEES_NODE } from '@/mocks/datasets/nodes' ;
66import { EMPLOYEES_TO_EMPLOYEES_EDGE } from '@/mocks/datasets/edges' ;
7+ import { NodeProps } from '@/types' ;
78
89describe ( 'Diagram' , ( ) => {
910 it ( 'Should render diagram' , ( ) => {
@@ -19,4 +20,59 @@ describe('Diagram', () => {
1920 expect ( screen . getByTestId ( 'rf__minimap' ) ) . toBeInTheDocument ( ) ;
2021 expect ( screen . getByTestId ( 'rf__node-employees' ) ) . toBeInTheDocument ( ) ;
2122 } ) ;
23+
24+ it ( 'Should correctly add / remove fields in the node on update' , ( ) => {
25+ const nodeWithFields : NodeProps = {
26+ id : 'node-1' ,
27+ title : 'Node 1' ,
28+ position : { x : 0 , y : 0 } ,
29+ type : 'collection' ,
30+ fields : [ { name : 'field-a' } , { name : 'field-b' } , { name : 'field-c' } ] ,
31+ } ;
32+
33+ // Render all fields first
34+ const { rerender } = render (
35+ < ReactFlowProvider >
36+ < Diagram nodes = { [ nodeWithFields ] } edges = { [ ] } />
37+ </ ReactFlowProvider > ,
38+ ) ;
39+
40+ expect ( screen . getByText ( 'field-a' ) ) . toBeInTheDocument ( ) ;
41+ expect ( screen . getByText ( 'field-b' ) ) . toBeInTheDocument ( ) ;
42+ expect ( screen . getByText ( 'field-c' ) ) . toBeInTheDocument ( ) ;
43+
44+ // Add a field in the middle of the list
45+ const nodeWithFieldAdded = {
46+ ...nodeWithFields ,
47+ fields : [ nodeWithFields . fields [ 0 ] , { name : 'field-after-a' } , nodeWithFields . fields [ 1 ] , nodeWithFields . fields [ 2 ] ] ,
48+ } ;
49+
50+ rerender (
51+ < ReactFlowProvider >
52+ < Diagram nodes = { [ nodeWithFieldAdded ] } edges = { [ ] } />
53+ </ ReactFlowProvider > ,
54+ ) ;
55+
56+ expect ( screen . getByText ( 'field-a' ) ) . toBeInTheDocument ( ) ;
57+ expect ( screen . getByText ( 'field-after-a' ) ) . toBeInTheDocument ( ) ;
58+ expect ( screen . getByText ( 'field-b' ) ) . toBeInTheDocument ( ) ;
59+ expect ( screen . getByText ( 'field-c' ) ) . toBeInTheDocument ( ) ;
60+
61+ // Remove the field from the middle of the list
62+ const nodeWithFieldRemoved = {
63+ ...nodeWithFields ,
64+ fields : [ nodeWithFields . fields [ 0 ] , nodeWithFields . fields [ 2 ] ] ,
65+ } ;
66+
67+ rerender (
68+ < ReactFlowProvider >
69+ < Diagram nodes = { [ nodeWithFieldRemoved ] } edges = { [ ] } />
70+ </ ReactFlowProvider > ,
71+ ) ;
72+
73+ expect ( screen . getByText ( 'field-a' ) ) . toBeInTheDocument ( ) ;
74+ expect ( screen . getByText ( 'field-c' ) ) . toBeInTheDocument ( ) ;
75+ expect ( ( ) => screen . getByText ( 'field-after-a' ) ) . toThrow ( ) ;
76+ expect ( ( ) => screen . getByText ( 'field-b' ) ) . toThrow ( ) ;
77+ } ) ;
2278} ) ;
0 commit comments