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

Reply via email to