X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=tests%2Fqunit%2Fsuites%2Fresources%2Fmediawiki.rcfilters%2Fdm.FiltersViewModel.test.js;h=233ec761eefa892638668270e8722a10058864d2;hb=f7e1770fb832aa77bf4e16ce8cc815f2b24dd10d;hp=8071d6e864a6e6a9188a83ed45fa5b5f7ed7ce47;hpb=870c78b9947e516aca1c38c3bca59421fc770336;p=lhc%2Fweb%2Fwiklou.git diff --git a/tests/qunit/suites/resources/mediawiki.rcfilters/dm.FiltersViewModel.test.js b/tests/qunit/suites/resources/mediawiki.rcfilters/dm.FiltersViewModel.test.js index 8071d6e864..233ec761ee 100644 --- a/tests/qunit/suites/resources/mediawiki.rcfilters/dm.FiltersViewModel.test.js +++ b/tests/qunit/suites/resources/mediawiki.rcfilters/dm.FiltersViewModel.test.js @@ -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 } } ) ); @@ -63,9 +66,15 @@ } ] } ], + 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 && @@ -74,6 +83,10 @@ 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' ); @@ -85,7 +98,11 @@ 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' ); @@ -103,12 +120,107 @@ 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 = [ { @@ -144,6 +256,12 @@ } ] } ], + namespaces = { + 0: 'Main', + 1: 'Talk', + 2: 'User', + 3: 'User talk' + }, testCases = [ { query: 'group', @@ -168,6 +286,18 @@ 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(), @@ -181,7 +311,7 @@ return result; }; - model.initializeFilters( definition ); + model.initializeFilters( definition, namespaces ); testCases.forEach( function ( testCase ) { matches = model.findMatches( testCase.query ); @@ -273,12 +403,12 @@ 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 \'\'.' @@ -298,16 +428,16 @@ 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 @@ -324,13 +454,13 @@ 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.' @@ -350,13 +480,13 @@ 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.' @@ -373,13 +503,13 @@ 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.' @@ -396,13 +526,13 @@ 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.' @@ -419,13 +549,13 @@ 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\'.' @@ -483,35 +613,48 @@ }, 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.' } ]; @@ -608,17 +751,15 @@ } ] } ], - 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(); @@ -628,18 +769,18 @@ // 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)' ); @@ -650,7 +791,7 @@ 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" @@ -680,11 +821,11 @@ ); // 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.' @@ -694,25 +835,6 @@ 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' @@ -720,7 +842,7 @@ ); assert.deepEqual( model.getSelectedState(), - $.extend( {}, defaultFilterRepresentation, { + $.extend( {}, baseFilterRepresentation, { group3__filter7: true, group3__filter8: false, group3__filter9: false @@ -735,7 +857,7 @@ ); assert.deepEqual( model.getSelectedState(), - $.extend( {}, defaultFilterRepresentation, { + $.extend( {}, baseFilterRepresentation, { group3__filter7: true, group3__filter8: true, group3__filter9: false @@ -750,7 +872,7 @@ ); assert.deepEqual( model.getSelectedState(), - $.extend( {}, defaultFilterRepresentation, { + $.extend( {}, baseFilterRepresentation, { group3__filter7: true, group3__filter8: true, group3__filter9: true @@ -765,7 +887,7 @@ ); assert.deepEqual( model.getSelectedState(), - $.extend( {}, defaultFilterRepresentation, { + $.extend( {}, baseFilterRepresentation, { group3__filter7: true, group3__filter8: true, group3__filter9: true @@ -780,7 +902,7 @@ ); assert.deepEqual( model.getSelectedState(), - $.extend( {}, defaultFilterRepresentation, { + $.extend( {}, baseFilterRepresentation, { group3__filter7: true, group3__filter8: false, group3__filter9: true @@ -835,93 +957,6 @@ ); } ); - 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',