@@ -588,6 +588,16 @@ describe('yii.gridView', function () {
588588 } ) ;
589589
590590 describe ( 'with name, multiple and checkAll options, multiple set to true and' , function ( ) {
591+ var changedSpy ;
592+
593+ before ( function ( ) {
594+ changedSpy = sinon . spy ( ) ;
595+ } ) ;
596+
597+ after ( function ( ) {
598+ changedSpy . reset ( ) ;
599+ } ) ;
600+
591601 withData ( {
592602 'nothing else' : [ { } ] ,
593603 // https://github.com/yiisoft/yii2/pull/11729
@@ -602,44 +612,63 @@ describe('yii.gridView', function () {
602612
603613 assert . equal ( $gridView . yiiGridView ( 'data' ) . selectionColumn , 'selection[]' ) ;
604614
615+ $checkRowCheckboxes
616+ . off ( 'change.yiiGridView' ) // unbind any subscriptions for clean expectations
617+ . on ( 'change.yiiGridView' , changedSpy ) ;
618+
605619 var $checkFirstRowCheckbox = $checkRowCheckboxes . filter ( '[value="1"]' ) ;
606620
607621 // Check all
622+ changedSpy . reset ( ) ;
608623 click ( $checkAllCheckbox ) ;
609624 assert . lengthOf ( $checkRowCheckboxes . filter ( ':checked' ) , 3 ) ;
610625 assert . isTrue ( $checkAllCheckbox . prop ( 'checked' ) ) ;
626+ assert . equal ( changedSpy . callCount , 3 ) ;
611627
612628 // Uncheck all
629+ changedSpy . reset ( ) ;
613630 click ( $checkAllCheckbox ) ;
614631 assert . lengthOf ( $checkRowCheckboxes . filter ( ':checked' ) , 0 ) ;
615632 assert . isFalse ( $checkAllCheckbox . prop ( 'checked' ) ) ;
633+ assert . equal ( changedSpy . callCount , 3 ) ;
616634
617635 // Check all manually
636+ changedSpy . reset ( ) ;
618637 click ( $checkRowCheckboxes ) ;
619638 assert . lengthOf ( $checkRowCheckboxes . filter ( ':checked' ) , 3 ) ;
620639 assert . isTrue ( $checkAllCheckbox . prop ( 'checked' ) ) ;
640+ assert . equal ( changedSpy . callCount , 3 ) ;
621641
622642 // Uncheck all manually
643+ changedSpy . reset ( ) ;
623644 click ( $checkRowCheckboxes ) ;
624645 assert . lengthOf ( $checkRowCheckboxes . filter ( ':checked' ) , 0 ) ;
625646 assert . isFalse ( $checkAllCheckbox . prop ( 'checked' ) ) ;
647+ assert . equal ( changedSpy . callCount , 3 ) ;
626648
627649 // Check first row
650+ changedSpy . reset ( ) ;
628651 click ( $checkFirstRowCheckbox ) ;
629652 assert . isTrue ( $checkFirstRowCheckbox . prop ( 'checked' ) ) ;
630653 assert . lengthOf ( $checkRowCheckboxes . filter ( ':checked' ) , 1 ) ;
631654 assert . isFalse ( $checkAllCheckbox . prop ( 'checked' ) ) ;
655+ assert . equal ( changedSpy . callCount , 1 ) ;
632656
633657 // Then check all
658+ changedSpy . reset ( ) ;
634659 click ( $checkAllCheckbox ) ;
635660 assert . lengthOf ( $checkRowCheckboxes . filter ( ':checked' ) , 3 ) ;
636661 assert . isTrue ( $checkAllCheckbox . prop ( 'checked' ) ) ;
662+ // "change" should be called 3 times, 1 time per each row, no matter what state it has
663+ assert . equal ( changedSpy . callCount , 3 ) ;
637664
638665 // Uncheck first row
666+ changedSpy . reset ( ) ;
639667 click ( $checkFirstRowCheckbox ) ;
640668 assert . isFalse ( $checkFirstRowCheckbox . prop ( 'checked' ) ) ;
641669 assert . lengthOf ( $checkRowCheckboxes . filter ( ':checked' ) , 2 ) ;
642670 assert . isFalse ( $checkAllCheckbox . prop ( 'checked' ) ) ;
671+ assert . equal ( changedSpy . callCount , 1 ) ;
643672 } ) ;
644673 } ) ;
645674 } ) ;
0 commit comments