1 /* eslint-disable camelcase */
2 /* eslint no-underscore-dangle: "off" */
4 var mockFilterStructure
= [ {
7 type
: 'send_unselected_if_any',
9 { name
: 'filter1', default: true },
15 type
: 'send_unselected_if_any',
18 { name
: 'filter4', default: true }
23 type
: 'string_options',
29 minimalDefaultParams
= {
34 QUnit
.module( 'mediawiki.rcfilters - UriProcessor' );
36 QUnit
.test( 'getVersion', function ( assert
) {
37 var uriProcessor
= new mw
.rcfilters
.UriProcessor( new mw
.rcfilters
.dm
.FiltersViewModel() );
40 uriProcessor
.getVersion( { param1
: 'foo', urlversion
: '2' } ),
42 'Retrieving the version from the URI query'
46 uriProcessor
.getVersion( { param1
: 'foo' } ),
48 'Getting version 1 if no version is specified'
52 QUnit
.test( 'updateModelBasedOnQuery & getUriParametersFromModel', function ( assert
) {
54 filtersModel
= new mw
.rcfilters
.dm
.FiltersViewModel(),
62 group1__filter1_color
: null,
63 group1__filter2_color
: null,
64 group2__filter3_color
: null,
65 group2__filter4_color
: null,
66 group3__filter5_color
: null,
67 group3__filter6_color
: null
70 filtersModel
.initializeFilters( mockFilterStructure
);
71 uriProcessor
= new mw
.rcfilters
.UriProcessor( filtersModel
);
73 uriProcessor
.updateModelBasedOnQuery( {} );
75 uriProcessor
.getUriParametersFromModel(),
76 $.extend( true, {}, baseParams
, minimalDefaultParams
),
77 'Version 1: Empty url query sets model to defaults'
80 uriProcessor
.updateModelBasedOnQuery( { urlversion
: '2' } );
82 uriProcessor
.getUriParametersFromModel(),
84 'Version 2: Empty url query sets model to all-false'
87 uriProcessor
.updateModelBasedOnQuery( { filter1
: '1', urlversion
: '2' } );
89 uriProcessor
.getUriParametersFromModel(),
90 $.extend( true, {}, baseParams
, { filter1
: '1' } ),
91 'Parameters in Uri query set parameter value in the model'
94 uriProcessor
.updateModelBasedOnQuery( { highlight
: '1', group1__filter1_color
: 'c1', urlversion
: '2' } );
96 uriProcessor
.getUriParametersFromModel(),
97 $.extend( true, {}, baseParams
, {
99 group1__filter1_color
: 'c1'
101 'Highlight parameters in Uri query set highlight state in the model'
105 QUnit
.test( 'isNewState', function ( assert
) {
107 filtersModel
= new mw
.rcfilters
.dm
.FiltersViewModel(),
115 message
: 'Empty objects are not new state.'
119 curr
: { filter1
: '1' },
120 new: { filter1
: '0' }
123 message
: 'Nulified parameter is a new state'
127 curr
: { filter1
: '1' },
128 new: { filter1
: '1', filter2
: '1' }
131 message
: 'Added parameters are a new state'
135 curr
: { filter1
: '1' },
136 new: { filter1
: '1', filter2
: '0' }
139 message
: 'Added null parameters are not a new state (normalizing equals old state)'
143 curr
: { filter1
: '1' },
144 new: { filter1
: '1', foo
: 'bar' }
147 message
: 'Added unrecognized parameters are a new state'
151 curr
: { filter1
: '1', foo
: 'bar' },
152 new: { filter1
: '1', foo
: 'baz' }
155 message
: 'Changed unrecognized parameters are a new state'
159 filtersModel
.initializeFilters( mockFilterStructure
);
160 uriProcessor
= new mw
.rcfilters
.UriProcessor( filtersModel
);
162 cases
.forEach( function ( testCase
) {
164 uriProcessor
.isNewState( testCase
.states
.curr
, testCase
.states
.new ),
171 QUnit
.test( 'doesQueryContainRecognizedParams', function ( assert
) {
173 filtersModel
= new mw
.rcfilters
.dm
.FiltersViewModel(),
178 message
: 'Empty query is not valid for load.'
181 query
: { highlight
: '1' },
183 message
: 'Highlight state alone is not valid for load'
186 query
: { urlversion
: '2' },
188 message
: 'urlversion=2 state alone is valid for load as an empty state'
191 query
: { filter1
: '1', foo
: 'bar' },
193 message
: 'Existence of recognized parameters makes the query valid for load'
196 query
: { foo
: 'bar', debug
: true },
198 message
: 'Only unrecognized parameters makes the query invalid for load'
202 filtersModel
.initializeFilters( mockFilterStructure
);
203 uriProcessor
= new mw
.rcfilters
.UriProcessor( filtersModel
);
205 cases
.forEach( function ( testCase
) {
207 uriProcessor
.doesQueryContainRecognizedParams( testCase
.query
),
214 QUnit
.test( '_getNormalizedQueryParams', function ( assert
) {
216 filtersModel
= new mw
.rcfilters
.dm
.FiltersViewModel(),
220 result
: $.extend( true, { urlversion
: '2' }, minimalDefaultParams
),
221 message
: 'Empty query returns defaults (urlversion 1).'
224 query
: { urlversion
: '2' },
225 result
: { urlversion
: '2' },
226 message
: 'Empty query returns empty (urlversion 2)'
229 query
: { filter1
: '0' },
230 result
: { urlversion
: '2', filter4
: '1' },
231 message
: 'urlversion 1 returns query that overrides defaults'
234 query
: { filter3
: '1' },
235 result
: { urlversion
: '2', filter1
: '1', filter4
: '1', filter3
: '1' },
236 message
: 'urlversion 1 with an extra param value returns query that is joined with defaults'
240 filtersModel
.initializeFilters( mockFilterStructure
);
241 uriProcessor
= new mw
.rcfilters
.UriProcessor( filtersModel
);
243 cases
.forEach( function ( testCase
) {
245 uriProcessor
._getNormalizedQueryParams( testCase
.query
),
252 }( mediaWiki
, jQuery
) );