Mooeypoo has uploaded a new change for review. https://gerrit.wikimedia.org/r/322222
Change subject: Merge branch 'master' of ssh://gerrit.wikimedia.org:29418/mediawiki/core into review/mooeypoo/mw-recentchanges-filters ...................................................................... Merge branch 'master' of ssh://gerrit.wikimedia.org:29418/mediawiki/core into review/mooeypoo/mw-recentchanges-filters Change-Id: I2bef24481460a0ea20f38635f0098de854590eb5 --- M tests/qunit/QUnitTestResources.php A tests/qunit/suites/resources/mediawiki.rcfilters/mediawiki.rcfilters.dm.FiltersViewModel.test.js 2 files changed, 365 insertions(+), 0 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/mediawiki/core refs/changes/22/322222/1 diff --git a/tests/qunit/QUnitTestResources.php b/tests/qunit/QUnitTestResources.php index e30088d..2f8372c 100644 --- a/tests/qunit/QUnitTestResources.php +++ b/tests/qunit/QUnitTestResources.php @@ -93,6 +93,7 @@ 'tests/qunit/suites/resources/mediawiki.api/mediawiki.api.watch.test.js', 'tests/qunit/suites/resources/mediawiki.api/mediawiki.ForeignApi.test.js', 'tests/qunit/suites/resources/mediawiki.special/mediawiki.special.recentchanges.test.js', + 'tests/qunit/suites/resources/mediawiki.rcfilters/mediawiki.rcfilters.dm.FiltersViewModel.test.js', 'tests/qunit/suites/resources/mediawiki/mediawiki.language.test.js', 'tests/qunit/suites/resources/mediawiki/mediawiki.cldr.test.js', 'tests/qunit/suites/resources/mediawiki/mediawiki.cookie.test.js', @@ -136,6 +137,7 @@ 'mediawiki.util', 'mediawiki.viewport', 'mediawiki.special.recentchanges', + 'mediawiki.rcfilters.filters', 'mediawiki.language', 'mediawiki.cldr', 'mediawiki.cookie', diff --git a/tests/qunit/suites/resources/mediawiki.rcfilters/mediawiki.rcfilters.dm.FiltersViewModel.test.js b/tests/qunit/suites/resources/mediawiki.rcfilters/mediawiki.rcfilters.dm.FiltersViewModel.test.js new file mode 100644 index 0000000..98b9d3f --- /dev/null +++ b/tests/qunit/suites/resources/mediawiki.rcfilters/mediawiki.rcfilters.dm.FiltersViewModel.test.js @@ -0,0 +1,363 @@ +( function ( mw, $ ) { + QUnit.module( 'mediawiki.rcfilters - FiltersViewModel' ); + + 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' + } + ] + } + }, + model = new mw.rcfilters.dm.FiltersViewModel(); + + model.setFilters( definition ); + + assert.ok( + model.getItemByName( 'group1filter1' ) instanceof mw.rcfilters.dm.FilterItem && + model.getItemByName( 'group1filter2' ) instanceof mw.rcfilters.dm.FilterItem && + model.getItemByName( 'group2filter1' ) instanceof mw.rcfilters.dm.FilterItem && + model.getItemByName( 'group2filter2' ) instanceof mw.rcfilters.dm.FilterItem, + 'Filters instantiated and stored correctly' + ); + } ); + + QUnit.test( 'Finding matching 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' + } + ] + } + }, + model = new mw.rcfilters.dm.FiltersViewModel(); + + model.setFilters( definition ); + + matches = model.findMatches( 'group 1' ); + assert.equal( + matches.group1.length, + 2, + 'findMatches finds correct group with correct number of results' + ); + + assert.deepEqual( + matches.group1.map( function ( item ) { return item.getName() } ), + [ 'group1filter1', 'group1filter2' ], + 'findMatches finds the correct items within a single group' + ); + + matches = model.findMatches( 'filter 1' ); + assert.ok( + matches.group1.length === 1 && matches.group2.length === 1, + 'findMatches finds correct number of results in multiple groups' + ); + + assert.deepEqual( + [ + matches.group1.map( function ( item ) { return item.getName() } ), + matches.group2.map( function ( item ) { return item.getName() } ) + ], + [ + [ 'group1filter1' ], + [ 'group2filter1' ] + ], + 'findMatches finds the correct items within multiple groups' + ); + + matches = model.findMatches( 'foo' ); + assert.ok( + $.isEmptyObject( matches ), + 'findMatches returns an empty object when no results found' + ); + } ); + + QUnit.test( 'getFiltersToParameters', 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' + } + ] + } + }, + model = new mw.rcfilters.dm.FiltersViewModel(); + + model.setFilters( definition ); + + // Starting with all filters unselected + assert.deepEqual( + model.getFiltersToParameters(), + { + hidefilter1: false, + hidefilter2: false, + hidefilter3: false, + hidefilter4: false, + hidefilter5: false, + hidefilter6: false + }, + 'Unselected filters return all parameter falsey.' + ); + + // Select 1 filter + model.updateFilters( { + hidefilter1: true, + hidefilter2: false, + hidefilter3: false, + hidefilter4: false, + hidefilter5: false, + hidefilter6: false + } ); + // Only one filter in one group + assert.deepEqual( + model.getFiltersToParameters(), + { + // Group 1 (one selected, the others are true) + hidefilter1: false, + hidefilter2: true, + hidefilter3: true, + // Group 2 (nothing is selected, all false) + hidefilter4: false, + hidefilter5: false, + hidefilter6: false + }, + 'One filters in one "send_unselected_if_any" group returns the other parameters truthy.' + ); + + // Select 2 filters + model.updateFilters( { + hidefilter1: true, + hidefilter2: true, + hidefilter3: false, + hidefilter4: false, + hidefilter5: false, + hidefilter6: false + } ); + // Two selected filters in one group + assert.deepEqual( + model.getFiltersToParameters(), + { + // Group 1 (two selected, the others are true) + hidefilter1: false, + hidefilter2: false, + hidefilter3: true, + // Group 2 (nothing is selected, all false) + hidefilter4: false, + hidefilter5: false, + hidefilter6: false + }, + 'One filters in one "send_unselected_if_any" group returns the other parameters truthy.' + ); + + // Select 3 filters + model.updateFilters( { + hidefilter1: true, + hidefilter2: true, + hidefilter3: true, + hidefilter4: false, + hidefilter5: false, + hidefilter6: false + } ); + // All filters of the group are selected == this is the same as not selecting any + assert.deepEqual( + model.getFiltersToParameters(), + { + // Group 1 (all selected, all) + hidefilter1: false, + hidefilter2: false, + hidefilter3: false, + // Group 2 (nothing is selected, all false) + hidefilter4: false, + hidefilter5: false, + hidefilter6: false + }, + 'All filters selected in one "send_unselected_if_any" group returns all parameters falsy.' + ); + } ); + + QUnit.test( 'getParametersToFilters', 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' + }, + { + 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' + } + ] + }, + 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' + }, + { + name: 'hidefilter6', + label: 'Show filter 6', + description: 'Description of Filter 3 in Group 2' + } + ] + } + }, + model = new mw.rcfilters.dm.FiltersViewModel(); + + model.setFilters( definition ); + + // Empty query = empty filter definition + assert.deepEqual( + model.getParametersToFilters( {} ), + {}, + 'Empty parameter query results in empty filter change' + ); + + assert.deepEqual( + model.getParametersToFilters( { + hidefilter1: true + } ), + { + hidefilter1: false, // The text is "show filter 1" + hidefilter2: true, // The text is "show filter 2" + hidefilter3: true // The text is "show filter 3" + }, + 'One falsey parameter in a group makes the rest of the filters in the group truthy (checkd) in the interface' + ); + + assert.deepEqual( + model.getParametersToFilters( { + hidefilter1: true, + hidefilter2: true + } ), + { + hidefilter1: false, // The text is "show filter 1" + hidefilter2: false, // The text is "show filter 2" + hidefilter3: true // The text is "show filter 3" + }, + 'Two falsey parameters in a group makes the rest of the filters in the group truthy (checkd) in the interface' + ); + + assert.deepEqual( + model.getParametersToFilters( { + hidefilter1: true, + hidefilter2: true, + hidefilter3: true + } ), + { + hidefilter1: false, // The text is "show filter 1" + hidefilter2: false, // The text is "show filter 2" + hidefilter3: false // The text is "show filter 3" + }, + 'All parementers in the same group false is equivalent to none are truthy (checked) in the interface' + ); + } ); +}( mediaWiki, jQuery ) ); -- To view, visit https://gerrit.wikimedia.org/r/322222 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I2bef24481460a0ea20f38635f0098de854590eb5 Gerrit-PatchSet: 1 Gerrit-Project: mediawiki/core Gerrit-Branch: master Gerrit-Owner: Mooeypoo <mor...@gmail.com> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits