@@ -89,6 +89,49 @@ describe('decorator', () => {
8989 expect ( bar . mock . calls [ 1 ] [ 0 ] . value ) . toBe ( 'bazbar' )
9090 } )
9191
92+ it ( 'should update one field when another changes, using array of field names' , ( ) => {
93+ const form = createForm ( { onSubmit : onSubmitMock } )
94+ const spy = jest . fn ( )
95+ const foo = jest . fn ( )
96+ const bar = jest . fn ( )
97+ form . subscribe ( spy , { values : true } )
98+ form . registerField ( 'foo' , foo , { value : true } )
99+ form . registerField ( 'bar' , bar , { value : true } )
100+ const decorator = createDecorator ( {
101+ field : [ 'cat' , 'dog' , 'rat' , 'foo' , 'hog' ] ,
102+ updates : {
103+ bar : fooValue => `${ fooValue } bar`
104+ }
105+ } )
106+ const unsubscribe = decorator ( form )
107+ expect ( typeof unsubscribe ) . toBe ( 'function' )
108+
109+ expect ( spy ) . toHaveBeenCalled ( )
110+ expect ( spy ) . toHaveBeenCalledTimes ( 1 )
111+ expect ( spy . mock . calls [ 0 ] [ 0 ] . values ) . toEqual ( { } )
112+
113+ expect ( foo ) . toHaveBeenCalled ( )
114+ expect ( foo ) . toHaveBeenCalledTimes ( 1 )
115+ expect ( foo . mock . calls [ 0 ] [ 0 ] . value ) . toBeUndefined ( )
116+
117+ expect ( bar ) . toHaveBeenCalled ( )
118+ expect ( bar ) . toHaveBeenCalledTimes ( 1 )
119+ expect ( bar . mock . calls [ 0 ] [ 0 ] . value ) . toBeUndefined ( )
120+
121+ // change foo (should trigger calculation on bar)
122+ form . change ( 'foo' , 'baz' )
123+
124+ expect ( spy ) . toHaveBeenCalledTimes ( 3 )
125+ expect ( spy . mock . calls [ 1 ] [ 0 ] . values ) . toEqual ( { foo : 'baz' } )
126+ expect ( spy . mock . calls [ 2 ] [ 0 ] . values ) . toEqual ( { foo : 'baz' , bar : 'bazbar' } )
127+
128+ expect ( foo ) . toHaveBeenCalledTimes ( 2 )
129+ expect ( foo . mock . calls [ 1 ] [ 0 ] . value ) . toBe ( 'baz' )
130+
131+ expect ( bar ) . toHaveBeenCalledTimes ( 2 )
132+ expect ( bar . mock . calls [ 1 ] [ 0 ] . value ) . toBe ( 'bazbar' )
133+ } )
134+
92135 it ( 'should cease when unsubscribed' , ( ) => {
93136 const form = createForm ( { onSubmit : onSubmitMock } )
94137 const spy = jest . fn ( )
0 commit comments