( function ( mw, $ ) {
- QUnit.module( 'mediawiki.rcfilters - FiltersViewModel' );
+ QUnit.module( 'mediawiki.rcfilters - FiltersViewModel', QUnit.newMwEnvironment( {
+ messages: {
+ 'group1filter1-label': 'Group 1: Filter 1',
+ 'group1filter1-desc': 'Description of Filter 1 in Group 1',
+ 'group1filter2-label': 'Group 1: Filter 2',
+ 'group1filter2-desc': 'Description of Filter 2 in Group 1',
+ 'group2filter1-label': 'Group 2: Filter 1',
+ 'group2filter1-desc': 'Description of Filter 1 in Group 2',
+ 'group2filter2-label': 'xGroup 2: Filter 2',
+ 'group2filter2-desc': 'Description of Filter 2 in Group 2'
+ }
+ } ) );
QUnit.test( 'Setting up filters', function ( assert ) {
- var definition = {
- group1: {
- title: 'Group 1',
- type: 'send_unselected_if_any',
- filters: [
- {
- name: 'group1filter1',
- label: 'Group 1: Filter 1',
- description: 'Description of Filter 1 in Group 1'
- },
- {
- name: 'group1filter2',
- label: 'Group 1: Filter 2',
- description: 'Description of Filter 2 in Group 1'
- }
- ]
- },
- group2: {
- title: 'Group 2',
- type: 'send_unselected_if_any',
- filters: [
- {
- name: 'group2filter1',
- label: 'Group 2: Filter 1',
- description: 'Description of Filter 1 in Group 2'
- },
- {
- name: 'group2filter2',
- label: 'Group 2: Filter 2',
- description: 'Description of Filter 2 in Group 2'
- }
- ]
- },
- group3: {
- title: 'Group 3',
- type: 'string_options',
- filters: [
- {
- name: 'group3filter1',
- label: 'Group 3: Filter 1',
- description: 'Description of Filter 1 in Group 3'
- },
- {
- name: 'group3filter2',
- label: 'Group 3: Filter 2',
- description: 'Description of Filter 2 in Group 3'
- }
- ]
- }
- },
+ var definition = [ {
+ name: 'group1',
+ title: 'Group 1',
+ type: 'send_unselected_if_any',
+ filters: [
+ {
+ name: 'group1filter1',
+ label: 'Group 1: Filter 1',
+ description: 'Description of Filter 1 in Group 1'
+ },
+ {
+ name: 'group1filter2',
+ label: 'Group 1: Filter 2',
+ description: 'Description of Filter 2 in Group 1'
+ }
+ ]
+ }, {
+ name: 'group2',
+ title: 'Group 2',
+ type: 'send_unselected_if_any',
+ filters: [
+ {
+ name: 'group2filter1',
+ label: 'Group 2: Filter 1',
+ description: 'Description of Filter 1 in Group 2'
+ },
+ {
+ name: 'group2filter2',
+ label: 'Group 2: Filter 2',
+ description: 'Description of Filter 2 in Group 2'
+ }
+ ]
+ }, {
+ name: 'group3',
+ title: 'Group 3',
+ type: 'string_options',
+ filters: [
+ {
+ name: 'group3filter1',
+ label: 'Group 3: Filter 1',
+ description: 'Description of Filter 1 in Group 3'
+ },
+ {
+ name: 'group3filter2',
+ label: 'Group 3: Filter 2',
+ description: 'Description of Filter 2 in Group 3'
+ }
+ ]
+ } ],
model = new mw.rcfilters.dm.FiltersViewModel();
model.initializeFilters( definition );
'Initial state of filters'
);
- model.updateFilters( {
+ model.toggleFiltersSelected( {
group1filter1: true,
group2filter2: true,
group3filter1: true
QUnit.test( 'Finding matching filters', function ( assert ) {
var matches,
- definition = {
- group1: {
- title: 'Group 1 title',
- type: 'send_unselected_if_any',
- filters: [
- {
- name: 'group1filter1',
- label: 'Group 1: Filter 1',
- description: 'Description of Filter 1 in Group 1'
- },
- {
- name: 'group1filter2',
- label: 'Group 1: Filter 2',
- description: 'Description of Filter 2 in Group 1'
- }
- ]
- },
- group2: {
- title: 'Group 2 title',
- type: 'send_unselected_if_any',
- filters: [
- {
- name: 'group2filter1',
- label: 'Group 2: Filter 1',
- description: 'Description of Filter 1 in Group 2'
- },
- {
- name: 'group2filter2',
- label: 'xGroup 2: Filter 2',
- description: 'Description of Filter 2 in Group 2'
- }
- ]
- }
- },
+ definition = [ {
+ name: 'group1',
+ title: 'Group 1 title',
+ type: 'send_unselected_if_any',
+ filters: [
+ {
+ name: 'group1filter1',
+ label: 'group1filter1-label',
+ description: 'group1filter1-desc'
+ },
+ {
+ name: 'group1filter2',
+ label: 'group1filter2-label',
+ description: 'group1filter2-desc'
+ }
+ ]
+ }, {
+ name: 'group2',
+ title: 'Group 2 title',
+ type: 'send_unselected_if_any',
+ filters: [
+ {
+ name: 'group2filter1',
+ label: 'group2filter1-label',
+ description: 'group2filter1-desc'
+ },
+ {
+ name: 'group2filter2',
+ label: 'group2filter2-label',
+ description: 'group2filter2-desc'
+ }
+ ]
+ } ],
testCases = [
{
query: 'group',
} );
QUnit.test( 'getParametersFromFilters', function ( assert ) {
- var definition = {
- group1: {
- title: 'Group 1',
- type: 'send_unselected_if_any',
- filters: [
- {
- name: 'hidefilter1',
- label: 'Group 1: Filter 1',
- description: 'Description of Filter 1 in Group 1'
- },
- {
- name: 'hidefilter2',
- label: 'Group 1: Filter 2',
- description: 'Description of Filter 2 in Group 1'
- },
- {
- name: 'hidefilter3',
- label: 'Group 1: Filter 3',
- description: 'Description of Filter 3 in Group 1'
- }
- ]
- },
- group2: {
- title: 'Group 2',
- type: 'send_unselected_if_any',
- filters: [
- {
- name: 'hidefilter4',
- label: 'Group 2: Filter 1',
- description: 'Description of Filter 1 in Group 2'
- },
- {
- name: 'hidefilter5',
- label: 'Group 2: Filter 2',
- description: 'Description of Filter 2 in Group 2'
- },
- {
- name: 'hidefilter6',
- label: 'Group 2: Filter 3',
- description: 'Description of Filter 3 in Group 2'
- }
- ]
- },
- group3: {
- title: 'Group 3',
- type: 'string_options',
- separator: ',',
- 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'
- }
- ]
- }
- },
+ var definition = [ {
+ name: 'group1',
+ title: 'Group 1',
+ type: 'send_unselected_if_any',
+ filters: [
+ {
+ name: 'hidefilter1',
+ label: 'Group 1: Filter 1',
+ description: 'Description of Filter 1 in Group 1'
+ },
+ {
+ name: 'hidefilter2',
+ label: 'Group 1: Filter 2',
+ description: 'Description of Filter 2 in Group 1'
+ },
+ {
+ name: 'hidefilter3',
+ label: 'Group 1: Filter 3',
+ description: 'Description of Filter 3 in Group 1'
+ }
+ ]
+ }, {
+ name: 'group2',
+ title: 'Group 2',
+ type: 'send_unselected_if_any',
+ filters: [
+ {
+ name: 'hidefilter4',
+ label: 'Group 2: Filter 1',
+ description: 'Description of Filter 1 in Group 2'
+ },
+ {
+ name: 'hidefilter5',
+ label: 'Group 2: Filter 2',
+ description: 'Description of Filter 2 in Group 2'
+ },
+ {
+ name: 'hidefilter6',
+ label: 'Group 2: Filter 3',
+ description: 'Description of Filter 3 in Group 2'
+ }
+ ]
+ }, {
+ name: 'group3',
+ title: 'Group 3',
+ type: 'string_options',
+ separator: ',',
+ 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 );
hidefilter4: 0,
hidefilter5: 0,
hidefilter6: 0,
- group3: 'all'
+ group3: ''
},
- 'Unselected filters return all parameters falsey or \'all\'.'
+ 'Unselected filters return all parameters falsey or \'\'.'
);
// Select 1 filter
- model.updateFilters( {
+ model.toggleFiltersSelected( {
hidefilter1: true,
hidefilter2: false,
hidefilter3: false,
hidefilter4: 0,
hidefilter5: 0,
hidefilter6: 0,
- group3: 'all'
+ group3: ''
},
'One filters in one "send_unselected_if_any" group returns the other parameters truthy.'
);
// Select 2 filters
- model.updateFilters( {
+ model.toggleFiltersSelected( {
hidefilter1: true,
hidefilter2: true,
hidefilter3: false,
hidefilter4: 0,
hidefilter5: 0,
hidefilter6: 0,
- group3: 'all'
+ group3: ''
},
'One filters in one "send_unselected_if_any" group returns the other parameters truthy.'
);
// Select 3 filters
- model.updateFilters( {
+ model.toggleFiltersSelected( {
hidefilter1: true,
hidefilter2: true,
hidefilter3: true,
hidefilter4: 0,
hidefilter5: 0,
hidefilter6: 0,
- group3: 'all'
+ group3: ''
},
'All filters selected in one "send_unselected_if_any" group returns all parameters falsy.'
);
// Select 1 filter from string_options
- model.updateFilters( {
+ model.toggleFiltersSelected( {
filter7: true,
filter8: false,
filter9: false
);
// Select 2 filters from string_options
- model.updateFilters( {
+ model.toggleFiltersSelected( {
filter7: true,
filter8: true,
filter9: false
);
// Select 3 filters from string_options
- model.updateFilters( {
+ model.toggleFiltersSelected( {
filter7: true,
filter8: true,
filter9: true
} );
QUnit.test( 'getFiltersFromParameters', function ( assert ) {
- var definition = {
- 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
- }
- ]
- },
- 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'
- }
- ]
- },
- group3: {
- title: 'Group 3',
- type: 'string_options',
- separator: ',',
- 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',
- default: true
- },
- {
- name: 'filter9',
- label: 'Group 3: Filter 3',
- description: 'Description of Filter 3 in Group 3'
- }
- ]
- }
- },
+ 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: ',',
+ 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',
+ default: true
+ },
+ {
+ name: 'filter9',
+ label: 'Group 3: Filter 3',
+ description: 'Description of Filter 3 in Group 3'
+ }
+ ]
+ } ],
defaultFilterRepresentation = {
// Group 1 and 2, "send_unselected_if_any", the values of the filters are "flipped" from the values of the parameters
hidefilter1: false,
// This test is demonstrating wrong usage of the method;
// We should be aware that getFiltersFromParameters is stateless,
// so each call gives us a filter state that only reflects the query given.
- // This means that the two calls to updateFilters() below collide.
+ // This means that the two calls to toggleFiltersSelected() below collide.
// The result of the first is overridden by the result of the second,
// since both get a full state object from getFiltersFromParameters that **only** relates
// to the input it receives.
- model.updateFilters(
+ model.toggleFiltersSelected(
model.getFiltersFromParameters( {
hidefilter1: '1'
} )
);
- model.updateFilters(
+ model.toggleFiltersSelected(
model.getFiltersFromParameters( {
hidefilter6: '1'
} )
);
- // The result here is ignoring the first updateFilters call
+ // The result here is ignoring the first toggleFiltersSelected call
// We should receive default values + hidefilter6 as false
assert.deepEqual(
model.getSelectedState(),
model = new mw.rcfilters.dm.FiltersViewModel();
model.initializeFilters( definition );
- model.updateFilters(
+ model.toggleFiltersSelected(
model.getFiltersFromParameters( {
hidefilter1: '0'
} )
);
- model.updateFilters(
+ model.toggleFiltersSelected(
model.getFiltersFromParameters( {
hidefilter1: '1'
} )
'After checking and then unchecking a \'send_unselected_if_any\' filter (without touching other filters in that group), results are default'
);
- model.updateFilters(
+ model.toggleFiltersSelected(
model.getFiltersFromParameters( {
group3: 'filter7'
} )
'A \'string_options\' parameter containing 1 value, results in the corresponding filter as checked'
);
- model.updateFilters(
+ model.toggleFiltersSelected(
model.getFiltersFromParameters( {
group3: 'filter7,filter8'
} )
'A \'string_options\' parameter containing 2 values, results in both corresponding filters as checked'
);
- model.updateFilters(
+ model.toggleFiltersSelected(
model.getFiltersFromParameters( {
group3: 'filter7,filter8,filter9'
} )
'A \'string_options\' parameter containing all values, results in all filters of the group as unchecked.'
);
- model.updateFilters(
+ model.toggleFiltersSelected(
model.getFiltersFromParameters( {
group3: 'filter7,all,filter9'
} )
'A \'string_options\' parameter containing the value \'all\', results in all filters of the group as unchecked.'
);
- model.updateFilters(
+ model.toggleFiltersSelected(
model.getFiltersFromParameters( {
group3: 'filter7,foo,filter9'
} )
} );
QUnit.test( 'sanitizeStringOptionGroup', function ( assert ) {
- var definition = {
- group1: {
- title: 'Group 1',
- type: 'string_options',
- filters: [
- {
- name: 'filter1',
- label: 'Show filter 1',
- description: 'Description of Filter 1 in Group 1'
- },
- {
- name: 'filter2',
- label: 'Show filter 2',
- description: 'Description of Filter 2 in Group 1'
- },
- {
- name: 'filter3',
- label: 'Show filter 3',
- description: 'Description of Filter 3 in Group 1'
- }
- ]
- }
- },
+ var definition = [ {
+ name: 'group1',
+ title: 'Group 1',
+ type: 'string_options',
+ filters: [
+ {
+ name: 'filter1',
+ label: 'Show filter 1',
+ description: 'Description of Filter 1 in Group 1'
+ },
+ {
+ name: 'filter2',
+ label: 'Show filter 2',
+ description: 'Description of Filter 2 in Group 1'
+ },
+ {
+ name: 'filter3',
+ label: 'Show filter 3',
+ description: 'Description of Filter 3 in Group 1'
+ }
+ ]
+ } ],
model = new mw.rcfilters.dm.FiltersViewModel();
model.initializeFilters( definition );
} );
QUnit.test( 'setFiltersToDefaults', function ( assert ) {
- var definition = {
- 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
- }
- ]
- },
- 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'
- }
- ]
- }
- },
+ 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
hidefilter1: false,
'Initial state: default filters are not selected (controller selects defaults explicitly).'
);
- model.updateFilters( {
+ model.toggleFiltersSelected( {
hidefilter1: false,
hidefilter3: false
} );
} );
QUnit.test( 'Filter interaction: subsets', function ( assert ) {
- var definition = {
- group1: {
- title: 'Group 1',
- type: 'string_options',
- filters: [
- {
- name: 'filter1',
- label: 'Show filter 1',
- description: 'Description of Filter 1 in Group 1',
- subset: [ 'filter2', 'filter5' ]
- },
- {
- name: 'filter2',
- label: 'Show filter 2',
- description: 'Description of Filter 2 in Group 1'
- },
- {
- name: 'filter3',
- label: 'Show filter 3',
- description: 'Description of Filter 3 in Group 1'
- }
- ]
- },
- group2: {
- title: 'Group 2',
- type: 'send_unselected_if_any',
- filters: [
- {
- name: 'filter4',
- label: 'Show filter 4',
- description: 'Description of Filter 1 in Group 2',
- subset: [ 'filter3', 'filter5' ]
- },
- {
- name: 'filter5',
- label: 'Show filter 5',
- description: 'Description of Filter 2 in Group 2'
- },
- {
- name: 'filter6',
- label: 'Show filter 6',
- description: 'Description of Filter 3 in Group 2'
- }
- ]
- }
- },
+ var definition = [ {
+ name: 'group1',
+ title: 'Group 1',
+ type: 'string_options',
+ filters: [
+ {
+ name: 'filter1',
+ label: 'Show filter 1',
+ description: 'Description of Filter 1 in Group 1',
+ subset: [
+ {
+ group: 'group1',
+ filter: 'filter2'
+ },
+ {
+ group: 'group1',
+ filter: 'filter3'
+ }
+ ]
+ },
+ {
+ name: 'filter2',
+ label: 'Show filter 2',
+ description: 'Description of Filter 2 in Group 1',
+ subset: [
+ {
+ group: 'group1',
+ filter: 'filter3'
+ }
+ ]
+ },
+ {
+ name: 'filter3',
+ label: 'Show filter 3',
+ description: 'Description of Filter 3 in Group 1'
+ }
+ ]
+ } ],
baseFullState = {
filter1: { selected: false, conflicted: false, included: false },
filter2: { selected: false, conflicted: false, included: false },
- filter3: { selected: false, conflicted: false, included: false },
- filter4: { selected: false, conflicted: false, included: false },
- filter5: { selected: false, conflicted: false, included: false },
- filter6: { selected: false, conflicted: false, included: false }
+ filter3: { selected: false, conflicted: false, included: false }
},
model = new mw.rcfilters.dm.FiltersViewModel();
model.initializeFilters( definition );
// Select a filter that has subset with another filter
- model.updateFilters( {
+ model.toggleFiltersSelected( {
filter1: true
} );
$.extend( true, {}, baseFullState, {
filter1: { selected: true },
filter2: { included: true },
- filter5: { included: true }
+ filter3: { included: true }
} ),
'Filters with subsets are represented in the model.'
);
// Select another filter that has a subset with the same previous filter
- model.updateFilters( {
- filter4: true
+ model.toggleFiltersSelected( {
+ filter2: true
} );
- model.reassessFilterInteractions( model.getItemByName( 'filter4' ) );
+ model.reassessFilterInteractions( model.getItemByName( 'filter2' ) );
assert.deepEqual(
model.getFullState(),
$.extend( true, {}, baseFullState, {
filter1: { selected: true },
- filter2: { included: true },
- filter3: { included: true },
- filter4: { selected: true },
- filter5: { included: true }
+ filter2: { selected: true, included: true },
+ filter3: { included: true }
} ),
'Filters that have multiple subsets are represented.'
);
// Remove one filter (but leave the other) that affects filter2
- model.updateFilters( {
+ model.toggleFiltersSelected( {
filter1: false
} );
model.reassessFilterInteractions( model.getItemByName( 'filter1' ) );
assert.deepEqual(
model.getFullState(),
$.extend( true, {}, baseFullState, {
- filter2: { included: false },
- filter3: { included: true },
- filter4: { selected: true },
- filter5: { included: true }
+ filter2: { selected: true, included: false },
+ filter3: { included: true }
} ),
'Removing a filter only un-includes its subset if there is no other filter affecting.'
);
- model.updateFilters( {
- filter4: false
+ model.toggleFiltersSelected( {
+ filter2: false
} );
- model.reassessFilterInteractions( model.getItemByName( 'filter4' ) );
+ model.reassessFilterInteractions( model.getItemByName( 'filter2' ) );
assert.deepEqual(
model.getFullState(),
baseFullState,
} );
QUnit.test( 'Filter interaction: full coverage', function ( assert ) {
- var definition = {
- group1: {
- title: 'Group 1',
- type: 'string_options',
- fullCoverage: false,
- filters: [
- { name: 'filter1' },
- { name: 'filter2' },
- { name: 'filter3' }
- ]
- },
- group2: {
- title: 'Group 2',
- type: 'send_unselected_if_any',
- fullCoverage: true,
- filters: [
- { name: 'filter4' },
- { name: 'filter5' },
- { name: 'filter6' }
- ]
- }
- },
+ var definition = [ {
+ name: 'group1',
+ title: 'Group 1',
+ type: 'string_options',
+ fullCoverage: false,
+ filters: [
+ { name: 'filter1', label: '1', description: '1' },
+ { name: 'filter2', label: '2', description: '2' },
+ { name: 'filter3', label: '3', description: '3' }
+ ]
+ }, {
+ name: 'group2',
+ title: 'Group 2',
+ type: 'send_unselected_if_any',
+ fullCoverage: true,
+ filters: [
+ { name: 'filter4', label: '4', description: '4' },
+ { name: 'filter5', label: '5', description: '5' },
+ { name: 'filter6', label: '6', description: '6' }
+ ]
+ } ],
model = new mw.rcfilters.dm.FiltersViewModel(),
isCapsuleItemMuted = function ( filterName ) {
var itemModel = model.getItemByName( filterName ),
);
// Select most (but not all) items in each group
- model.updateFilters( {
+ model.toggleFiltersSelected( {
filter1: true,
filter2: true,
filter4: true,
);
// Select all items in 'fullCoverage' group (group2)
- model.updateFilters( {
+ model.toggleFiltersSelected( {
filter6: true
} );
);
// Select all items in non 'fullCoverage' group (group1)
- model.updateFilters( {
+ model.toggleFiltersSelected( {
filter3: true
} );
);
// Uncheck an item from each group
- model.updateFilters( {
+ model.toggleFiltersSelected( {
filter3: false,
filter5: false
} );
} );
QUnit.test( 'Filter interaction: conflicts', function ( assert ) {
- var definition = {
- group1: {
- title: 'Group 1',
- type: 'string_options',
- filters: [
- {
- name: 'filter1',
- conflicts: [ 'filter2', 'filter4' ]
- },
- {
- name: 'filter2',
- conflicts: [ 'filter6' ]
- },
- {
- name: 'filter3'
- }
- ]
- },
- group2: {
- title: 'Group 2',
- type: 'send_unselected_if_any',
- filters: [
- {
- name: 'filter4'
- },
- {
- name: 'filter5',
- conflicts: [ 'filter3' ]
- },
- {
- name: 'filter6'
- }
- ]
- }
- },
+ var definition = [ {
+ name: 'group1',
+ title: 'Group 1',
+ type: 'string_options',
+ filters: [
+ {
+ name: 'filter1',
+ label: '1',
+ description: '1',
+ conflicts: [ 'filter2', 'filter4' ]
+ },
+ {
+ name: 'filter2',
+ label: '2',
+ description: '2',
+ conflicts: [ 'filter6' ]
+ },
+ {
+ name: 'filter3',
+ label: '3',
+ description: '3'
+ }
+ ]
+ }, {
+ name: 'group2',
+ title: 'Group 2',
+ type: 'send_unselected_if_any',
+ filters: [
+ {
+ name: 'filter4',
+ label: '1',
+ description: '1'
+ },
+ {
+ name: 'filter5',
+ label: '5',
+ description: '5',
+ conflicts: [ 'filter3' ]
+ },
+ {
+ name: 'filter6',
+ label: '6',
+ description: '6'
+ }
+ ]
+ } ],
baseFullState = {
filter1: { selected: false, conflicted: false, included: false },
filter2: { selected: false, conflicted: false, included: false },
);
// Select a filter that has a conflict with another
- model.updateFilters( {
+ model.toggleFiltersSelected( {
filter1: true // conflicts: filter2, filter4
} );
);
// Select one of the conflicts (both filters are now conflicted and selected)
- model.updateFilters( {
+ model.toggleFiltersSelected( {
filter4: true // conflicts: filter 1
} );
model.reassessFilterInteractions( model.getItemByName( 'filter4' ) );
// Select another filter from filter4 group, meaning:
// now filter1 no longer conflicts with filter4
- model.updateFilters( {
+ model.toggleFiltersSelected( {
filter6: true // conflicts: filter2
} );
model.reassessFilterInteractions( model.getItemByName( 'filter6' ) );
} );
QUnit.test( 'Filter highlights', function ( assert ) {
- var definition = {
- group1: {
- title: 'Group 1',
- type: 'string_options',
- filters: [
- { name: 'filter1', class: 'class1' },
- { name: 'filter2', class: 'class2' },
- { name: 'filter3', class: 'class3' },
- { name: 'filter4', class: 'class4' },
- { name: 'filter5', class: 'class5' },
- { name: 'filter6' }
- ]
- }
- },
+ var definition = [ {
+ name: 'group1',
+ title: 'Group 1',
+ type: 'string_options',
+ filters: [
+ { name: 'filter1', cssClass: 'class1', label: '1', description: '1' },
+ { name: 'filter2', cssClass: 'class2', label: '2', description: '2' },
+ { name: 'filter3', cssClass: 'class3', label: '3', description: '3' },
+ { name: 'filter4', cssClass: 'class4', label: '4', description: '4' },
+ { name: 'filter5', cssClass: 'class5', label: '5', description: '5' },
+ { name: 'filter6', label: '6', description: '6' }
+ ]
+ } ],
model = new mw.rcfilters.dm.FiltersViewModel();
model.initializeFilters( definition );