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(),
63 group1__filter1_color
: null,
64 group1__filter2_color
: null,
65 group2__filter3_color
: null,
66 group2__filter4_color
: null,
67 group3__filter5_color
: null,
68 group3__filter6_color
: null
71 filtersModel
.initializeFilters( mockFilterStructure
);
72 uriProcessor
= new mw
.rcfilters
.UriProcessor( filtersModel
);
74 uriProcessor
.updateModelBasedOnQuery( {} );
76 uriProcessor
.getUriParametersFromModel(),
77 $.extend( true, {}, baseParams
, minimalDefaultParams
),
78 'Version 1: Empty url query sets model to defaults'
81 uriProcessor
.updateModelBasedOnQuery( { urlversion
: '2' } );
83 uriProcessor
.getUriParametersFromModel(),
85 'Version 2: Empty url query sets model to all-false'
88 uriProcessor
.updateModelBasedOnQuery( { filter1
: '1', urlversion
: '2' } );
90 uriProcessor
.getUriParametersFromModel(),
91 $.extend( true, {}, baseParams
, { filter1
: '1' } ),
92 'Parameters in Uri query set parameter value in the model'
95 uriProcessor
.updateModelBasedOnQuery( { highlight
: '1', group1__filter1_color
: 'c1', urlversion
: '2' } );
97 uriProcessor
.getUriParametersFromModel(),
98 $.extend( true, {}, baseParams
, {
100 group1__filter1_color
: 'c1'
102 'Highlight parameters in Uri query set highlight state in the model'
105 uriProcessor
.updateModelBasedOnQuery( { invert
: '1', urlversion
: '2' } );
107 uriProcessor
.getUriParametersFromModel(),
108 $.extend( true, {}, baseParams
, {
111 'Invert parameter in Uri query set invert state in the model'
115 QUnit
.test( 'isNewState', function ( assert
) {
117 filtersModel
= new mw
.rcfilters
.dm
.FiltersViewModel(),
125 message
: 'Empty objects are not new state.'
129 curr
: { filter1
: '1' },
130 new: { filter1
: '0' }
133 message
: 'Nulified parameter is a new state'
137 curr
: { filter1
: '1' },
138 new: { filter1
: '1', filter2
: '1' }
141 message
: 'Added parameters are a new state'
145 curr
: { filter1
: '1' },
146 new: { filter1
: '1', filter2
: '0' }
149 message
: 'Added null parameters are not a new state (normalizing equals old state)'
153 curr
: { filter1
: '1' },
154 new: { filter1
: '1', foo
: 'bar' }
157 message
: 'Added unrecognized parameters are a new state'
161 curr
: { filter1
: '1', foo
: 'bar' },
162 new: { filter1
: '1', foo
: 'baz' }
165 message
: 'Changed unrecognized parameters are a new state'
169 filtersModel
.initializeFilters( mockFilterStructure
);
170 uriProcessor
= new mw
.rcfilters
.UriProcessor( filtersModel
);
172 cases
.forEach( function ( testCase
) {
174 uriProcessor
.isNewState( testCase
.states
.curr
, testCase
.states
.new ),
181 QUnit
.test( 'doesQueryContainRecognizedParams', function ( assert
) {
183 filtersModel
= new mw
.rcfilters
.dm
.FiltersViewModel(),
188 message
: 'Empty query is not valid for load.'
191 query
: { highlight
: '1' },
193 message
: 'Highlight state alone is not valid for load'
196 query
: { urlversion
: '2' },
198 message
: 'urlversion=2 state alone is valid for load as an empty state'
201 query
: { filter1
: '1', foo
: 'bar' },
203 message
: 'Existence of recognized parameters makes the query valid for load'
206 query
: { foo
: 'bar', debug
: true },
208 message
: 'Only unrecognized parameters makes the query invalid for load'
212 filtersModel
.initializeFilters( mockFilterStructure
);
213 uriProcessor
= new mw
.rcfilters
.UriProcessor( filtersModel
);
215 cases
.forEach( function ( testCase
) {
217 uriProcessor
.doesQueryContainRecognizedParams( testCase
.query
),
224 QUnit
.test( '_getNormalizedQueryParams', function ( assert
) {
226 filtersModel
= new mw
.rcfilters
.dm
.FiltersViewModel(),
230 result
: $.extend( true, { urlversion
: '2' }, minimalDefaultParams
),
231 message
: 'Empty query returns defaults (urlversion 1).'
234 query
: { urlversion
: '2' },
235 result
: { urlversion
: '2' },
236 message
: 'Empty query returns empty (urlversion 2)'
239 query
: { filter1
: '0' },
240 result
: { urlversion
: '2', filter4
: '1' },
241 message
: 'urlversion 1 returns query that overrides defaults'
244 query
: { filter3
: '1' },
245 result
: { urlversion
: '2', filter1
: '1', filter4
: '1', filter3
: '1' },
246 message
: 'urlversion 1 with an extra param value returns query that is joined with defaults'
250 filtersModel
.initializeFilters( mockFilterStructure
);
251 uriProcessor
= new mw
.rcfilters
.UriProcessor( filtersModel
);
253 cases
.forEach( function ( testCase
) {
255 uriProcessor
._getNormalizedQueryParams( testCase
.query
),
262 }( mediaWiki
, jQuery
) );