@@ -262,4 +262,92 @@ action:
262262 expect ( callback ) . toHaveBeenLastCalledWith ( 1 ) ;
263263 } ) ;
264264 } ) ;
265+
266+ describe ( 'update metadata interactions' , ( ) => {
267+ beforeEach ( ( ) => {
268+ plugin . file . create ( '' , 'test' , 'md' ) ;
269+ } ) ;
270+
271+ test . each ( [ 'foo' , 'memory^foo' , 'globalMemory^foo' ] ) ( 'view field created after' , async value => {
272+ const bindTarget = plugin . api . parseBindTarget ( value , 'test.md' ) ;
273+
274+ plugin . api . setMetadata ( bindTarget , 123 ) ;
275+
276+ expect ( plugin . api . getMetadata ( bindTarget ) ) . toBe ( 123 ) ;
277+
278+ const viewField = plugin . api . createViewFieldMountable ( 'test.md' , {
279+ declaration : `VIEW[{${ value } }]` ,
280+ renderChildType : RenderChildType . INLINE ,
281+ } ) ;
282+
283+ viewField . mount ( document . body ) ;
284+
285+ await new Promise ( resolve => setTimeout ( resolve , 0 ) ) ;
286+
287+ expect ( viewField . viewField ?. getTargetEl ( ) ?. textContent ) . toBe ( '123' ) ;
288+ } ) ;
289+
290+ test . each ( [ 'foo' , 'memory^foo' , 'globalMemory^foo' ] ) ( 'input field created after' , async value => {
291+ const bindTarget = plugin . api . parseBindTarget ( value , 'test.md' ) ;
292+
293+ plugin . api . setMetadata ( bindTarget , 123 ) ;
294+
295+ expect ( plugin . api . getMetadata ( bindTarget ) ) . toBe ( 123 ) ;
296+
297+ const inputField = plugin . api . createInputFieldMountable ( 'test.md' , {
298+ declaration : `INPUT[number:${ value } ]` ,
299+ renderChildType : RenderChildType . INLINE ,
300+ } ) ;
301+
302+ inputField . mount ( document . body ) ;
303+
304+ await new Promise ( resolve => setTimeout ( resolve , 0 ) ) ;
305+
306+ expect ( inputField . inputField ?. getValue ( ) ) . toBe ( 123 ) ;
307+ } ) ;
308+
309+ test . each ( [ 'foo' , 'memory^foo' , 'globalMemory^foo' ] ) ( 'view field created before' , async value => {
310+ const bindTarget = plugin . api . parseBindTarget ( value , 'test.md' ) ;
311+
312+ const viewField = plugin . api . createViewFieldMountable ( 'test.md' , {
313+ declaration : `VIEW[{${ value } }]` ,
314+ renderChildType : RenderChildType . INLINE ,
315+ } ) ;
316+
317+ viewField . mount ( document . body ) ;
318+
319+ await new Promise ( resolve => setTimeout ( resolve , 0 ) ) ;
320+
321+ plugin . api . setMetadata ( bindTarget , 123 ) ;
322+
323+ expect ( plugin . api . getMetadata ( bindTarget ) ) . toBe ( 123 ) ;
324+
325+ await new Promise ( resolve => setTimeout ( resolve , 0 ) ) ;
326+
327+ expect ( viewField . viewField ?. getTargetEl ( ) ?. textContent ) . toBe ( '123' ) ;
328+ } ) ;
329+
330+ test . each ( [ 'foo' , 'memory^foo' , 'globalMemory^foo' ] ) ( 'input field created before' , async value => {
331+ const bindTarget = plugin . api . parseBindTarget ( value , 'test.md' ) ;
332+
333+ const inputField = plugin . api . createInputFieldMountable ( 'test.md' , {
334+ declaration : `INPUT[number:${ value } ]` ,
335+ renderChildType : RenderChildType . INLINE ,
336+ } ) ;
337+
338+ inputField . mount ( document . body ) ;
339+
340+ await new Promise ( resolve => setTimeout ( resolve , 0 ) ) ;
341+
342+ plugin . api . setMetadata ( bindTarget , 123 ) ;
343+
344+ expect ( plugin . api . getMetadata ( bindTarget ) ) . toBe ( 123 ) ;
345+
346+ await new Promise ( resolve => setTimeout ( resolve , 0 ) ) ;
347+
348+ console . log ( plugin . metadataManager . getSource ( 'globalMemory' ) ) ;
349+
350+ expect ( inputField . inputField ?. getValue ( ) ) . toBe ( 123 ) ;
351+ } ) ;
352+ } ) ;
265353} ) ;
0 commit comments