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
} );
+ 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',
assert.deepEqual(
model.getSelectedState(),
$.extend( {}, defaultFilterRepresentation, {
- group3__filter7: false,
- group3__filter8: false,
- group3__filter9: false
+ 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
+ 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(
);
} );
- 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',