);
} );
+ 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 = [ {
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.'
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: ''
},
- 'One filters in one "send_unselected_if_any" group returns the other parameters truthy.'
+ 'Two filters in one "send_unselected_if_any" group returns the other parameters truthy.'
);
// Select 3 filters
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\'.'
} );
+ QUnit.test( 'getParametersFromFilters (custom object)', function ( assert ) {
+ var originalState,
+ model = new mw.rcfilters.dm.FiltersViewModel(),
+ definition = [ {
+ name: 'group1',
+ title: 'Group 1',
+ type: 'send_unselected_if_any',
+ filters: [
+ { name: 'hidefilter1', label: 'Hide filter 1', description: '' },
+ { name: 'hidefilter2', label: 'Hide filter 2', description: '' },
+ { name: 'hidefilter3', label: 'Hide filter 3', description: '' }
+ ]
+ }, {
+ name: 'group2',
+ title: 'Group 2',
+ type: 'send_unselected_if_any',
+ filters: [
+ { name: 'hidefilter4', label: 'Hide filter 4', description: '' },
+ { name: 'hidefilter5', label: 'Hide filter 5', description: '' },
+ { name: 'hidefilter6', label: 'Hide filter 6', description: '' }
+ ]
+ }, {
+ name: 'group3',
+ title: 'Group 3',
+ type: 'string_options',
+ separator: ',',
+ filters: [
+ { name: 'filter7', label: 'Hide filter 7', description: '' },
+ { name: 'filter8', label: 'Hide filter 8', description: '' },
+ { name: 'filter9', label: 'Hide filter 9', description: '' }
+ ]
+ } ],
+ cases = [
+ {
+ // This is mocking the cases above, both
+ // - 'Two filters in one "send_unselected_if_any" group returns the other parameters truthy.'
+ // - 'Two filters selected in "string_option" group returns those filters in the value.'
+ input: {
+ group1__hidefilter1: true,
+ group1__hidefilter2: true,
+ group1__hidefilter3: false,
+ group2__hidefilter4: false,
+ group2__hidefilter5: false,
+ group2__hidefilter6: false,
+ group3__filter7: true,
+ group3__filter8: true,
+ group3__filter9: false
+ },
+ expected: {
+ // Group 1 (two selected, the others are true)
+ hidefilter1: '0',
+ hidefilter2: '0',
+ hidefilter3: '1',
+ // Group 2 (nothing is selected, all false)
+ 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.'
+ input: {
+ group1__hidefilter1: 1
+ },
+ expected: {
+ // Group 1 (one selected, the others are true)
+ hidefilter1: '0',
+ hidefilter2: '1',
+ hidefilter3: '1',
+ // Group 2 (nothing is selected, all false)
+ 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.'
+ }
+ ];
+
+ model.initializeFilters( definition );
+ // Store original state
+ originalState = model.getSelectedState();
+
+ // Test each case
+ cases.forEach( function ( test ) {
+ assert.deepEqual(
+ model.getParametersFromFilters( test.input ),
+ test.expected,
+ test.msg
+ );
+ } );
+
+ // After doing the above tests, make sure the actual state
+ // of the filter stayed the same
+ assert.deepEqual(
+ model.getSelectedState(),
+ originalState,
+ 'Running the method with external definition to parse does not actually change the state of the model'
+ );
+ } );
+
QUnit.test( 'getFiltersFromParameters', function ( assert ) {
var definition = [ {
name: 'group1',
title: 'Group 3',
type: 'string_options',
separator: ',',
+ default: 'filter8',
filters: [
{
name: 'filter7',
{
name: 'filter8',
label: 'Group 3: Filter 2',
- description: 'Description of Filter 2 in Group 3',
- default: true
+ description: 'Description of Filter 2 in Group 3'
},
{
name: 'filter9',
}
]
} ],
- 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, {
- group3__filter7: false,
- group3__filter8: false,
- group3__filter9: false
+ $.extend( {}, baseFilterRepresentation, {
+ group3__filter7: true,
+ group3__filter8: true,
+ group3__filter9: true
} ),
- 'A \'string_options\' parameter containing all values, results in all filters of the group as unchecked.'
+ 'A \'string_options\' parameter containing all values, results in all filters of the group as checked.'
);
model.toggleFiltersSelected(
);
assert.deepEqual(
model.getSelectedState(),
- $.extend( {}, defaultFilterRepresentation, {
- group3__filter7: false,
- group3__filter8: false,
- group3__filter9: false
+ $.extend( {}, baseFilterRepresentation, {
+ group3__filter7: true,
+ group3__filter8: true,
+ group3__filter9: true
} ),
- 'A \'string_options\' parameter containing the value \'all\', results in all filters of the group as unchecked.'
+ 'A \'string_options\' parameter containing the value \'all\', results in all filters of the group as checked.'
);
model.toggleFiltersSelected(
);
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',