Merge "Add 3D filetype for STL files"
[lhc/web/wiklou.git] / tests / qunit / suites / resources / mediawiki.rcfilters / dm.FiltersViewModel.test.js
index 8071d6e..233ec76 100644 (file)
@@ -10,6 +10,9 @@
                        'group2filter1-desc': 'Description of Filter 1 in Group 2',
                        'group2filter2-label': 'xGroup 2: Filter 2',
                        'group2filter2-desc': 'Description of Filter 2 in Group 2'
+               },
+               config: {
+                       wgStructuredChangeFiltersEnableExperimentalViews: true
                }
        } ) );
 
                                        }
                                ]
                        } ],
+                       namespaces = {
+                               0: 'Main',
+                               1: 'Talk',
+                               2: 'User',
+                               3: 'User talk'
+                       },
                        model = new mw.rcfilters.dm.FiltersViewModel();
 
-               model.initializeFilters( definition );
+               model.initializeFilters( definition, namespaces );
 
                assert.ok(
                        model.getItemByName( 'group1__filter1' ) instanceof mw.rcfilters.dm.FilterItem &&
                        model.getItemByName( 'group2__filter2' ) instanceof mw.rcfilters.dm.FilterItem &&
                        model.getItemByName( 'group3__filter1' ) instanceof mw.rcfilters.dm.FilterItem &&
                        model.getItemByName( 'group3__filter2' ) instanceof mw.rcfilters.dm.FilterItem,
+                       model.getItemByName( 'namespace__0' ) instanceof mw.rcfilters.dm.FilterItem,
+                       model.getItemByName( 'namespace__1' ) instanceof mw.rcfilters.dm.FilterItem,
+                       model.getItemByName( 'namespace__2' ) instanceof mw.rcfilters.dm.FilterItem,
+                       model.getItemByName( 'namespace__3' ) instanceof mw.rcfilters.dm.FilterItem,
                        'Filters instantiated and stored correctly'
                );
 
                                group2__filter1: false,
                                group2__filter2: false,
                                group3__filter1: false,
-                               group3__filter2: false
+                               group3__filter2: false,
+                               namespace__0: false,
+                               namespace__1: false,
+                               namespace__2: false,
+                               namespace__3: false
                        },
                        'Initial state of filters'
                );
                                group2__filter1: false,
                                group2__filter2: true,
                                group3__filter1: true,
-                               group3__filter2: false
+                               group3__filter2: false,
+                               namespace__0: false,
+                               namespace__1: false,
+                               namespace__2: false,
+                               namespace__3: false
                        },
                        'Updating filter states correctly'
                );
        } );
 
+       QUnit.test( 'Default filters', function ( assert ) {
+               var definition = [ {
+                               name: 'group1',
+                               title: 'Group 1',
+                               type: 'send_unselected_if_any',
+                               filters: [
+                                       {
+                                               name: 'hidefilter1',
+                                               label: 'Show filter 1',
+                                               description: 'Description of Filter 1 in Group 1',
+                                               default: true
+                                       },
+                                       {
+                                               name: 'hidefilter2',
+                                               label: 'Show filter 2',
+                                               description: 'Description of Filter 2 in Group 1'
+                                       },
+                                       {
+                                               name: 'hidefilter3',
+                                               label: 'Show filter 3',
+                                               description: 'Description of Filter 3 in Group 1',
+                                               default: true
+                                       }
+                               ]
+                       }, {
+                               name: 'group2',
+                               title: 'Group 2',
+                               type: 'send_unselected_if_any',
+                               filters: [
+                                       {
+                                               name: 'hidefilter4',
+                                               label: 'Show filter 4',
+                                               description: 'Description of Filter 1 in Group 2'
+                                       },
+                                       {
+                                               name: 'hidefilter5',
+                                               label: 'Show filter 5',
+                                               description: 'Description of Filter 2 in Group 2',
+                                               default: true
+                                       },
+                                       {
+                                               name: 'hidefilter6',
+                                               label: 'Show filter 6',
+                                               description: 'Description of Filter 3 in Group 2'
+                                       }
+                               ]
+                       }, {
+
+                               name: 'group3',
+                               title: 'Group 3',
+                               type: 'string_options',
+                               separator: ',',
+                               default: 'filter8',
+                               filters: [
+                                       {
+                                               name: 'filter7',
+                                               label: 'Group 3: Filter 1',
+                                               description: 'Description of Filter 1 in Group 3'
+                                       },
+                                       {
+                                               name: 'filter8',
+                                               label: 'Group 3: Filter 2',
+                                               description: 'Description of Filter 2 in Group 3'
+                                       },
+                                       {
+                                               name: 'filter9',
+                                               label: 'Group 3: Filter 3',
+                                               description: 'Description of Filter 3 in Group 3'
+                                       }
+                               ]
+                       } ],
+                       model = new mw.rcfilters.dm.FiltersViewModel();
+
+               model.initializeFilters( definition );
+
+               // Empty query = only default values
+               assert.deepEqual(
+                       model.getDefaultParams(),
+                       {
+                               hidefilter1: '1',
+                               hidefilter2: '0',
+                               hidefilter3: '1',
+                               hidefilter4: '0',
+                               hidefilter5: '1',
+                               hidefilter6: '0',
+                               group3: 'filter8'
+                       },
+                       'Default parameters are stored properly per filter and group'
+               );
+       } );
+
        QUnit.test( 'Finding matching filters', function ( assert ) {
                var matches,
                        definition = [ {
                                        }
                                ]
                        } ],
+                       namespaces = {
+                               0: 'Main',
+                               1: 'Talk',
+                               2: 'User',
+                               3: 'User talk'
+                       },
                        testCases = [
                                {
                                        query: 'group',
                                                group2: [ 'group2__filter1', 'group2__filter2' ]
                                        },
                                        reason: 'Finds filters containing the query string in their group title'
+                               },
+                               {
+                                       query: ':Main',
+                                       expectedMatches: {
+                                               namespace: [ 'namespace__0' ]
+                                       },
+                                       reason: 'Finds namespaces when using : prefix'
+                               },
+                               {
+                                       query: ':group',
+                                       expectedMatches: {},
+                                       reason: 'Finds no results if using namespaces prefix (:) to search for filter title'
                                }
                        ],
                        model = new mw.rcfilters.dm.FiltersViewModel(),
                                return result;
                        };
 
-               model.initializeFilters( definition );
+               model.initializeFilters( definition, namespaces );
 
                testCases.forEach( function ( testCase ) {
                        matches = model.findMatches( testCase.query );
                assert.deepEqual(
                        model.getParametersFromFilters(),
                        {
-                               hidefilter1: 0,
-                               hidefilter2: 0,
-                               hidefilter3: 0,
-                               hidefilter4: 0,
-                               hidefilter5: 0,
-                               hidefilter6: 0,
+                               hidefilter1: '0',
+                               hidefilter2: '0',
+                               hidefilter3: '0',
+                               hidefilter4: '0',
+                               hidefilter5: '0',
+                               hidefilter6: '0',
                                group3: ''
                        },
                        'Unselected filters return all parameters falsey or \'\'.'
                        model.getParametersFromFilters(),
                        {
                                // Group 1 (one selected, the others are true)
-                               hidefilter1: 0,
-                               hidefilter2: 1,
-                               hidefilter3: 1,
+                               hidefilter1: '0',
+                               hidefilter2: '1',
+                               hidefilter3: '1',
                                // Group 2 (nothing is selected, all false)
-                               hidefilter4: 0,
-                               hidefilter5: 0,
-                               hidefilter6: 0,
+                               hidefilter4: '0',
+                               hidefilter5: '0',
+                               hidefilter6: '0',
                                group3: ''
                        },
-                       'One filters in one "send_unselected_if_any" group returns the other parameters truthy.'
+                       'One filter in one "send_unselected_if_any" group returns the other parameters truthy.'
                );
 
                // Select 2 filters
                        model.getParametersFromFilters(),
                        {
                                // Group 1 (two selected, the others are true)
-                               hidefilter1: 0,
-                               hidefilter2: 0,
-                               hidefilter3: 1,
+                               hidefilter1: '0',
+                               hidefilter2: '0',
+                               hidefilter3: '1',
                                // Group 2 (nothing is selected, all false)
-                               hidefilter4: 0,
-                               hidefilter5: 0,
-                               hidefilter6: 0,
+                               hidefilter4: '0',
+                               hidefilter5: '0',
+                               hidefilter6: '0',
                                group3: ''
                        },
                        'Two filters in one "send_unselected_if_any" group returns the other parameters truthy.'
                        model.getParametersFromFilters(),
                        {
                                // Group 1 (all selected, all false)
-                               hidefilter1: 0,
-                               hidefilter2: 0,
-                               hidefilter3: 0,
+                               hidefilter1: '0',
+                               hidefilter2: '0',
+                               hidefilter3: '0',
                                // Group 2 (nothing is selected, all false)
-                               hidefilter4: 0,
-                               hidefilter5: 0,
-                               hidefilter6: 0,
+                               hidefilter4: '0',
+                               hidefilter5: '0',
+                               hidefilter6: '0',
                                group3: ''
                        },
                        'All filters selected in one "send_unselected_if_any" group returns all parameters falsy.'
                        model.getParametersFromFilters(),
                        {
                                // Group 1 (all selected, all)
-                               hidefilter1: 0,
-                               hidefilter2: 0,
-                               hidefilter3: 0,
+                               hidefilter1: '0',
+                               hidefilter2: '0',
+                               hidefilter3: '0',
                                // Group 2 (nothing is selected, all false)
-                               hidefilter4: 0,
-                               hidefilter5: 0,
-                               hidefilter6: 0,
+                               hidefilter4: '0',
+                               hidefilter5: '0',
+                               hidefilter6: '0',
                                group3: 'filter7'
                        },
                        'One filter selected in "string_option" group returns that filter in the value.'
                        model.getParametersFromFilters(),
                        {
                                // Group 1 (all selected, all)
-                               hidefilter1: 0,
-                               hidefilter2: 0,
-                               hidefilter3: 0,
+                               hidefilter1: '0',
+                               hidefilter2: '0',
+                               hidefilter3: '0',
                                // Group 2 (nothing is selected, all false)
-                               hidefilter4: 0,
-                               hidefilter5: 0,
-                               hidefilter6: 0,
+                               hidefilter4: '0',
+                               hidefilter5: '0',
+                               hidefilter6: '0',
                                group3: 'filter7,filter8'
                        },
                        'Two filters selected in "string_option" group returns those filters in the value.'
                        model.getParametersFromFilters(),
                        {
                                // Group 1 (all selected, all)
-                               hidefilter1: 0,
-                               hidefilter2: 0,
-                               hidefilter3: 0,
+                               hidefilter1: '0',
+                               hidefilter2: '0',
+                               hidefilter3: '0',
                                // Group 2 (nothing is selected, all false)
-                               hidefilter4: 0,
-                               hidefilter5: 0,
-                               hidefilter6: 0,
+                               hidefilter4: '0',
+                               hidefilter5: '0',
+                               hidefilter6: '0',
                                group3: 'all'
                        },
                        'All filters selected in "string_option" group returns \'all\'.'
                                        },
                                        expected: {
                                                // Group 1 (two selected, the others are true)
-                                               hidefilter1: 0,
-                                               hidefilter2: 0,
-                                               hidefilter3: 1,
+                                               hidefilter1: '0',
+                                               hidefilter2: '0',
+                                               hidefilter3: '1',
                                                // Group 2 (nothing is selected, all false)
-                                               hidefilter4: 0,
-                                               hidefilter5: 0,
-                                               hidefilter6: 0,
+                                               hidefilter4: '0',
+                                               hidefilter5: '0',
+                                               hidefilter6: '0',
                                                group3: 'filter7,filter8'
                                        },
                                        msg: 'Given an explicit (complete) filter state object, the result is the same as if the object given represented the model state.'
                                },
                                {
                                        // This is mocking case above
-                                       // - 'One filters in one "send_unselected_if_any" group returns the other parameters truthy.'
+                                       // - 'One filter in one "send_unselected_if_any" group returns the other parameters truthy.'
                                        input: {
                                                group1__hidefilter1: 1
                                        },
                                        expected: {
                                                // Group 1 (one selected, the others are true)
-                                               hidefilter1: 0,
-                                               hidefilter2: 1,
-                                               hidefilter3: 1,
+                                               hidefilter1: '0',
+                                               hidefilter2: '1',
+                                               hidefilter3: '1',
                                                // Group 2 (nothing is selected, all false)
-                                               hidefilter4: 0,
-                                               hidefilter5: 0,
-                                               hidefilter6: 0,
+                                               hidefilter4: '0',
+                                               hidefilter5: '0',
+                                               hidefilter6: '0',
                                                group3: ''
                                        },
                                        msg: 'Given an explicit (incomplete) filter state object, the result is the same as if the object give represented the model state.'
+                               },
+                               {
+                                       input: {},
+                                       expected: {
+                                               hidefilter1: '0',
+                                               hidefilter2: '0',
+                                               hidefilter3: '0',
+                                               hidefilter4: '0',
+                                               hidefilter5: '0',
+                                               hidefilter6: '0',
+                                               group3: ''
+                                       },
+                                       msg: 'Given an explicit empty object, the result is all filters set to their falsey unselected value.'
                                }
                        ];
 
                                        }
                                ]
                        } ],
-                       defaultFilterRepresentation = {
-                               // Group 1 and 2, "send_unselected_if_any", the values of the filters are "flipped" from the values of the parameters
+                       baseFilterRepresentation = {
                                group1__hidefilter1: false,
-                               group1__hidefilter2: true,
+                               group1__hidefilter2: false,
                                group1__hidefilter3: false,
-                               group2__hidefilter4: true,
+                               group2__hidefilter4: false,
                                group2__hidefilter5: false,
-                               group2__hidefilter6: true,
-                               // Group 3, "string_options", default values correspond to parameters and filters
+                               group2__hidefilter6: false,
                                group3__filter7: false,
-                               group3__filter8: true,
+                               group3__filter8: false,
                                group3__filter9: false
                        },
                        model = new mw.rcfilters.dm.FiltersViewModel();
                // Empty query = only default values
                assert.deepEqual(
                        model.getFiltersFromParameters( {} ),
-                       defaultFilterRepresentation,
-                       'Empty parameter query results in filters in initial default state'
+                       baseFilterRepresentation,
+                       'Empty parameter query results in an object representing all filters set to false'
                );
 
                assert.deepEqual(
                        model.getFiltersFromParameters( {
                                hidefilter2: '1'
                        } ),
-                       $.extend( {}, defaultFilterRepresentation, {
-                               group1__hidefilter1: false, // The text is "show filter 1"
+                       $.extend( {}, baseFilterRepresentation, {
+                               group1__hidefilter1: true, // The text is "show filter 1"
                                group1__hidefilter2: false, // The text is "show filter 2"
-                               group1__hidefilter3: false // The text is "show filter 3"
+                               group1__hidefilter3: true // The text is "show filter 3"
                        } ),
                        'One truthy parameter in a group whose other parameters are true by default makes the rest of the filters in the group false (unchecked)'
                );
                                hidefilter2: '1',
                                hidefilter3: '1'
                        } ),
-                       $.extend( {}, defaultFilterRepresentation, {
+                       $.extend( {}, baseFilterRepresentation, {
                                group1__hidefilter1: false, // The text is "show filter 1"
                                group1__hidefilter2: false, // The text is "show filter 2"
                                group1__hidefilter3: false // The text is "show filter 3"
                );
 
                // The result here is ignoring the first toggleFiltersSelected call
-               // We should receive default values + hidefilter6 as false
                assert.deepEqual(
                        model.getSelectedState(),
-                       $.extend( {}, defaultFilterRepresentation, {
-                               group2__hidefilter5: false,
+                       $.extend( {}, baseFilterRepresentation, {
+                               group2__hidefilter4: true,
+                               group2__hidefilter5: true,
                                group2__hidefilter6: false
                        } ),
                        'getFiltersFromParameters does not care about previous or existing state.'
                model = new mw.rcfilters.dm.FiltersViewModel();
                model.initializeFilters( definition );
 
-               model.toggleFiltersSelected(
-                       model.getFiltersFromParameters( {
-                               hidefilter1: '0'
-                       } )
-               );
-               model.toggleFiltersSelected(
-                       model.getFiltersFromParameters( {
-                               hidefilter1: '1'
-                       } )
-               );
-
-               // Simulates minor edits being hidden in preferences, then unhidden via URL
-               // override.
-               assert.deepEqual(
-                       model.getSelectedState(),
-                       defaultFilterRepresentation,
-                       'After checking and then unchecking a \'send_unselected_if_any\' filter (without touching other filters in that group), results are default'
-               );
-
                model.toggleFiltersSelected(
                        model.getFiltersFromParameters( {
                                group3: 'filter7'
                );
                assert.deepEqual(
                        model.getSelectedState(),
-                       $.extend( {}, defaultFilterRepresentation, {
+                       $.extend( {}, baseFilterRepresentation, {
                                group3__filter7: true,
                                group3__filter8: false,
                                group3__filter9: false
                );
                assert.deepEqual(
                        model.getSelectedState(),
-                       $.extend( {}, defaultFilterRepresentation, {
+                       $.extend( {}, baseFilterRepresentation, {
                                group3__filter7: true,
                                group3__filter8: true,
                                group3__filter9: false
                );
                assert.deepEqual(
                        model.getSelectedState(),
-                       $.extend( {}, defaultFilterRepresentation, {
+                       $.extend( {}, baseFilterRepresentation, {
                                group3__filter7: true,
                                group3__filter8: true,
                                group3__filter9: true
                );
                assert.deepEqual(
                        model.getSelectedState(),
-                       $.extend( {}, defaultFilterRepresentation, {
+                       $.extend( {}, baseFilterRepresentation, {
                                group3__filter7: true,
                                group3__filter8: true,
                                group3__filter9: true
                );
                assert.deepEqual(
                        model.getSelectedState(),
-                       $.extend( {}, defaultFilterRepresentation, {
+                       $.extend( {}, baseFilterRepresentation, {
                                group3__filter7: true,
                                group3__filter8: false,
                                group3__filter9: true
                );
        } );
 
-       QUnit.test( 'setFiltersToDefaults', function ( assert ) {
-               var definition = [ {
-                               name: 'group1',
-                               title: 'Group 1',
-                               type: 'send_unselected_if_any',
-                               filters: [
-                                       {
-                                               name: 'hidefilter1',
-                                               label: 'Show filter 1',
-                                               description: 'Description of Filter 1 in Group 1',
-                                               default: true
-                                       },
-                                       {
-                                               name: 'hidefilter2',
-                                               label: 'Show filter 2',
-                                               description: 'Description of Filter 2 in Group 1'
-                                       },
-                                       {
-                                               name: 'hidefilter3',
-                                               label: 'Show filter 3',
-                                               description: 'Description of Filter 3 in Group 1',
-                                               default: true
-                                       }
-                               ]
-                       }, {
-                               name: 'group2',
-                               title: 'Group 2',
-                               type: 'send_unselected_if_any',
-                               filters: [
-                                       {
-                                               name: 'hidefilter4',
-                                               label: 'Show filter 4',
-                                               description: 'Description of Filter 1 in Group 2'
-                                       },
-                                       {
-                                               name: 'hidefilter5',
-                                               label: 'Show filter 5',
-                                               description: 'Description of Filter 2 in Group 2',
-                                               default: true
-                                       },
-                                       {
-                                               name: 'hidefilter6',
-                                               label: 'Show filter 6',
-                                               description: 'Description of Filter 3 in Group 2'
-                                       }
-                               ]
-                       } ],
-                       defaultFilterRepresentation = {
-                               // Group 1 and 2, "send_unselected_if_any", the values of the filters are "flipped" from the values of the parameters
-                               group1__hidefilter1: false,
-                               group1__hidefilter2: true,
-                               group1__hidefilter3: false,
-                               group2__hidefilter4: true,
-                               group2__hidefilter5: false,
-                               group2__hidefilter6: true
-                       },
-                       model = new mw.rcfilters.dm.FiltersViewModel();
-
-               model.initializeFilters( definition );
-
-               assert.deepEqual(
-                       model.getSelectedState(),
-                       {
-                               group1__hidefilter1: false,
-                               group1__hidefilter2: false,
-                               group1__hidefilter3: false,
-                               group2__hidefilter4: false,
-                               group2__hidefilter5: false,
-                               group2__hidefilter6: false
-                       },
-                       'Initial state: default filters are not selected (controller selects defaults explicitly).'
-               );
-
-               model.toggleFiltersSelected( {
-                       group1__hidefilter1: false,
-                       group1__hidefilter3: false
-               } );
-
-               model.setFiltersToDefaults();
-
-               assert.deepEqual(
-                       model.getSelectedState(),
-                       defaultFilterRepresentation,
-                       'Changing values of filters and then returning to defaults still results in default filters being selected.'
-               );
-       } );
-
        QUnit.test( 'Filter interaction: subsets', function ( assert ) {
                var definition = [ {
                                name: 'group1',