Merge "resources: Strip '$' and 'mw' from file closures"
[lhc/web/wiklou.git] / tests / qunit / suites / resources / mediawiki.rcfilters / dm.FiltersViewModel.test.js
index a700e30..2c2ce87 100644 (file)
@@ -1,5 +1,5 @@
 /* eslint-disable camelcase */
-( function ( mw, $ ) {
+( function () {
        var filterDefinition = [ {
                        name: 'group1',
                        type: 'send_unselected_if_any',
@@ -38,7 +38,6 @@
                        name: 'group2',
                        type: 'send_unselected_if_any',
                        fullCoverage: true,
-                       excludedFromSavedQueries: true,
                        conflicts: [ { group: 'group1', filter: 'filter1' } ],
                        filters: [
                                { name: 'filter4', label: 'group2filter4-label', description: 'group2filter4-desc', cssClass: 'filter4class' },
@@ -61,6 +60,7 @@
                }, {
                        name: 'group4',
                        type: 'single_option',
+                       hidden: true,
                        default: 'option2',
                        filters: [
                                // NOTE: The entire group has no highlight supported
@@ -79,7 +79,7 @@
                }, {
                        name: 'group6',
                        type: 'boolean',
-                       isSticky: true,
+                       sticky: true,
                        filters: [
                                { name: 'group6option1', label: 'group6option1-label', description: 'group6option1-desc', cssClass: 'group6opt1class' },
                                { name: 'group6option2', label: 'group6option2-label', description: 'group6option2-desc', default: true, cssClass: 'group6opt2class' },
@@ -88,7 +88,7 @@
                }, {
                        name: 'group7',
                        type: 'single_option',
-                       isSticky: true,
+                       sticky: true,
                        default: 'group7option2',
                        filters: [
                                { name: 'group7option1', label: 'group7option1-label', description: 'group7option1-desc', cssClass: 'group7opt1class' },
                                { name: 'group7option3', label: 'group7option3-label', description: 'group7option3-desc', cssClass: 'group7opt3class' }
                        ]
                } ],
+               shortFilterDefinition = [ {
+                       name: 'group1',
+                       type: 'send_unselected_if_any',
+                       filters: [ { name: 'filter1' }, { name: 'filter2' } ]
+               }, {
+                       name: 'group2',
+                       type: 'boolean',
+                       hidden: true,
+                       filters: [ { name: 'filter3' }, { name: 'filter4' } ]
+               }, {
+                       name: 'group3',
+                       type: 'string_options',
+                       sticky: true,
+                       default: 'filter6',
+                       filters: [ { name: 'filter5' }, { name: 'filter6' }, { name: 'filter7' } ]
+               } ],
                viewsDefinition = {
                        namespaces: {
                                label: 'Namespaces',
                        group3: 'filter8',
                        group4: 'option2',
                        group5: 'option1',
-                       group6option1: '0',
-                       group6option2: '1',
-                       group6option3: '1',
-                       group7: 'group7option2',
                        namespace: ''
                },
                baseParamRepresentation = {
                assert.deepEqual(
                        model.getDefaultParams(),
                        defaultParameters,
-                       'Default parameters are stored properly per filter and group'
-               );
-
-               // Change sticky filter
-               model.toggleFiltersSelected( {
-                       group7__group7option1: true
-               } );
-
-               // Make sure defaults have changed
-               assert.deepEqual(
-                       model.getDefaultParams(),
-                       $.extend( true, {}, defaultParameters, {
-                               group7: 'group7option1'
-                       } ),
-                       'Default parameters are stored properly per filter and group'
+                       'Default parameters are stored properly per filter and group (sticky groups are ignored)'
                );
        } );
 
                                {
                                        input: {
                                                filter1: '1', // Regular (do not strip)
-                                               group6option1: '1', // Sticky
-                                               filter4: '1', // Excluded
-                                               filter5: '0' // Excluded
+                                               group6option1: '1' // Sticky
                                        },
                                        result: { filter1: '1' },
-                                       msg: 'Valid input strips all sticky and excluded params regardless of value'
+                                       msg: 'Valid input strips all sticky params regardless of value'
                                }
                        ];
 
 
                cases.forEach( function ( test ) {
                        assert.deepEqual(
-                               model.removeExcludedParams( test.input ),
+                               model.removeStickyParams( test.input ),
                                test.result,
                                test.msg
                        );
 
                model.initializeFilters( definition );
 
-               assert.ok(
-                       !model.isHighlightEnabled(),
+               assert.strictEqual(
+                       model.isHighlightEnabled(),
+                       false,
                        'Initially, highlight is disabled.'
                );
 
                model.toggleHighlight( true );
-               assert.ok(
+               assert.strictEqual(
                        model.isHighlightEnabled(),
+                       true,
                        'Highlight is enabled on toggle.'
                );
 
                        'Highlighted items are highlighted.'
                );
 
-               assert.equal(
+               assert.strictEqual(
                        model.getItemByName( 'group1__filter1' ).getHighlightColor(),
                        'color1',
                        'Item highlight color is set.'
                );
 
                model.setHighlightColor( 'group1__filter1', 'color1changed' );
-               assert.equal(
+               assert.strictEqual(
                        model.getItemByName( 'group1__filter1' ).getHighlightColor(),
                        'color1changed',
                        'Item highlight color is changed on setHighlightColor.'
                        'Items without a specified class identifier are not highlighted.'
                );
        } );
-}( mediaWiki, jQuery ) );
+
+       QUnit.test( 'emptyAllFilters', function ( assert ) {
+               var model = new mw.rcfilters.dm.FiltersViewModel();
+
+               model.initializeFilters( shortFilterDefinition, null );
+
+               model.toggleFiltersSelected( {
+                       group1__filter1: true,
+                       group2__filter4: true, // hidden
+                       group3__filter5: true // sticky
+               } );
+
+               model.emptyAllFilters();
+
+               assert.deepEqual(
+                       model.getSelectedState( true ),
+                       {
+                               group3__filter5: true,
+                               group3__filter6: true
+                       },
+                       'Emptying filters does not affect sticky filters'
+               );
+       } );
+
+       QUnit.test( 'areVisibleFiltersEmpty', function ( assert ) {
+               var model = new mw.rcfilters.dm.FiltersViewModel();
+               model.initializeFilters( shortFilterDefinition, null );
+
+               model.emptyAllFilters();
+               assert.strictEqual( model.areVisibleFiltersEmpty(), true );
+
+               model.toggleFiltersSelected( {
+                       group3__filter5: true // sticky
+               } );
+               assert.strictEqual( model.areVisibleFiltersEmpty(), true );
+
+               model.toggleFiltersSelected( {
+                       group1__filter1: true
+               } );
+               assert.strictEqual( model.areVisibleFiltersEmpty(), false );
+       } );
+}() );