@@ -503,5 +503,192 @@ describe('VueFire', function () {
503
503
} )
504
504
} )
505
505
} )
506
+
507
+ it ( 'binds to a primitive' , function ( done ) {
508
+ var vm = new Vue ( {
509
+ firebase : {
510
+ items : {
511
+ source : firebaseRef . child ( 'items' ) ,
512
+ asObject : true
513
+ }
514
+ } ,
515
+ template : '<div>{{ items | json }}</div>'
516
+ } ) . $mount ( )
517
+ firebaseRef . child ( 'items' ) . set ( 'foo' , function ( ) {
518
+ expect ( vm . items ) . to . deep . equal ( {
519
+ '.key' : 'items' ,
520
+ '.value' : 'foo'
521
+ } )
522
+ Vue . nextTick ( function ( ) {
523
+ expect ( vm . $el . textContent ) . to . contain ( JSON . stringify ( vm . items , null , 2 ) )
524
+ done ( )
525
+ } )
526
+ } )
527
+ } )
528
+
529
+ it ( 'binds to Firebase reference with no data' , function ( done ) {
530
+ var vm = new Vue ( {
531
+ firebase : {
532
+ items : {
533
+ source : firebaseRef . child ( 'items' ) ,
534
+ asObject : true
535
+ }
536
+ } ,
537
+ template : '<div>{{ items | json }}</div>'
538
+ } ) . $mount ( )
539
+ firebaseRef . child ( 'items' ) . set ( null , function ( ) {
540
+ expect ( vm . items ) . to . deep . equal ( {
541
+ '.key' : 'items' ,
542
+ '.value' : null
543
+ } )
544
+ Vue . nextTick ( function ( ) {
545
+ expect ( vm . $el . textContent ) . to . contain ( JSON . stringify ( vm . items , null , 2 ) )
546
+ done ( )
547
+ } )
548
+ } )
549
+ } )
550
+
551
+ it ( 'sets the key as null when bound to the root of the database' , function ( done ) {
552
+ var rootRef = firebaseRef . root ( )
553
+ var vm = new Vue ( {
554
+ firebase : {
555
+ items : {
556
+ source : rootRef ,
557
+ asObject : true
558
+ }
559
+ } ,
560
+ template : '<div>{{ items | json }}</div>'
561
+ } ) . $mount ( )
562
+ rootRef . set ( 'foo' , function ( ) {
563
+ expect ( vm . items ) . to . deep . equal ( {
564
+ '.key' : null ,
565
+ '.value' : 'foo'
566
+ } )
567
+ Vue . nextTick ( function ( ) {
568
+ expect ( vm . $el . textContent ) . to . contain ( JSON . stringify ( vm . items , null , 2 ) )
569
+ done ( )
570
+ } )
571
+ } )
572
+ } )
573
+
574
+ it ( 'binds with limit queries' , function ( done ) {
575
+ var vm = new Vue ( {
576
+ firebase : {
577
+ items : {
578
+ source : firebaseRef . child ( 'items' ) . limitToLast ( 2 ) ,
579
+ asObject : true
580
+ }
581
+ } ,
582
+ template : '<div>{{ items | json }}</div>'
583
+ } ) . $mount ( )
584
+ firebaseRef . child ( 'items' ) . set ( {
585
+ first : { index : 0 } ,
586
+ second : { index : 1 } ,
587
+ third : { index : 2 }
588
+ } , function ( ) {
589
+ expect ( vm . items ) . to . deep . equal ( {
590
+ '.key' : 'items' ,
591
+ second : { index : 1 } ,
592
+ third : { index : 2 }
593
+ } )
594
+ Vue . nextTick ( function ( ) {
595
+ expect ( vm . $el . textContent ) . to . contain ( JSON . stringify ( vm . items , null , 2 ) )
596
+ done ( )
597
+ } )
598
+ } )
599
+ } )
600
+
601
+ it ( 'binds multiple Firebase references to state variables at the same time' , function ( done ) {
602
+ var vm = new Vue ( {
603
+ firebase : {
604
+ bindVar0 : {
605
+ source : firebaseRef . child ( 'items0' ) ,
606
+ asObject : true
607
+ } ,
608
+ bindVar1 : {
609
+ source : firebaseRef . child ( 'items1' ) ,
610
+ asObject : true
611
+ }
612
+ } ,
613
+ template : '<div>{{ bindVar0 | json }} {{ bindVar1 | json }}</div>'
614
+ } ) . $mount ( )
615
+
616
+ var items0 = {
617
+ first : { index : 0 } ,
618
+ second : { index : 1 } ,
619
+ third : { index : 2 }
620
+ }
621
+
622
+ var items1 = {
623
+ bar : {
624
+ foo : 'baz'
625
+ } ,
626
+ baz : true ,
627
+ foo : 100
628
+ }
629
+
630
+ firebaseRef . set ( {
631
+ items0 : items0 ,
632
+ items1 : items1
633
+ } , function ( ) {
634
+ items0 [ '.key' ] = 'items0'
635
+ expect ( vm . bindVar0 ) . to . deep . equal ( items0 )
636
+ items1 [ '.key' ] = 'items1'
637
+ expect ( vm . bindVar1 ) . to . deep . equal ( items1 )
638
+ Vue . nextTick ( function ( ) {
639
+ expect ( vm . $el . textContent ) . to . contain ( JSON . stringify ( vm . bindVar0 , null , 2 ) )
640
+ expect ( vm . $el . textContent ) . to . contain ( JSON . stringify ( vm . bindVar1 , null , 2 ) )
641
+ done ( )
642
+ } )
643
+ } )
644
+ } )
645
+
646
+ it ( 'binds a mixture of arrays and objects to state variables at the same time' , function ( done ) {
647
+ var vm = new Vue ( {
648
+ firebase : {
649
+ bindVar0 : {
650
+ source : firebaseRef . child ( 'items0' ) ,
651
+ asObject : true
652
+ } ,
653
+ bindVar1 : {
654
+ source : firebaseRef . child ( 'items1' ) ,
655
+ asObject : false
656
+ }
657
+ } ,
658
+ template : '<div>{{ bindVar0 | json }} {{ bindVar1 | json }}</div>'
659
+ } ) . $mount ( )
660
+
661
+ var items0 = {
662
+ first : { index : 0 } ,
663
+ second : { index : 1 } ,
664
+ third : { index : 2 }
665
+ }
666
+
667
+ var items1 = {
668
+ bar : {
669
+ foo : 'baz'
670
+ } ,
671
+ baz : true ,
672
+ foo : 100
673
+ }
674
+
675
+ firebaseRef . set ( {
676
+ items0 : items0 ,
677
+ items1 : items1
678
+ } , function ( ) {
679
+ items0 [ '.key' ] = 'items0'
680
+ expect ( vm . bindVar0 ) . to . deep . equal ( items0 )
681
+ expect ( vm . bindVar1 ) . to . deep . equal ( [
682
+ { '.key' : 'bar' , foo : 'baz' } ,
683
+ { '.key' : 'baz' , '.value' : true } ,
684
+ { '.key' : 'foo' , '.value' : 100 }
685
+ ] )
686
+ Vue . nextTick ( function ( ) {
687
+ expect ( vm . $el . textContent ) . to . contain ( JSON . stringify ( vm . bindVar0 , null , 2 ) )
688
+ expect ( vm . $el . textContent ) . to . contain ( JSON . stringify ( vm . bindVar1 , null , 2 ) )
689
+ done ( )
690
+ } )
691
+ } )
692
+ } )
506
693
} )
507
694
} )
0 commit comments