1 /* eslint-disable camelcase */
2 /* eslint no-underscore-dangle: "off" */
4 var mockFilterStructure
= [ {
7 type
: 'send_unselected_if_any',
9 { name
: 'filter1', cssClass
: 'filter1class', default: true },
10 { name
: 'filter2', cssClass
: 'filter2class' }
15 type
: 'send_unselected_if_any',
17 { name
: 'filter3', cssClass
: 'filter3class' },
18 { name
: 'filter4', cssClass
: 'filter4class', default: true }
23 type
: 'string_options',
25 { name
: 'filter5', cssClass
: 'filter5class' },
26 { name
: 'filter6' } // Not supporting highlights
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( 'getUpdatedUri', function ( assert
) {
54 filtersModel
= new mw
.rcfilters
.dm
.FiltersViewModel();
56 filtersModel
.initializeFilters( mockFilterStructure
);
57 uriProcessor
= new mw
.rcfilters
.UriProcessor( filtersModel
);
60 ( uriProcessor
.getUpdatedUri( {} ) ).query
,
62 'Empty model state with empty uri state, assumes the given uri is already normalized, and adds urlversion=2'
66 ( uriProcessor
.getUpdatedUri( { foo
: 'bar' } ) ).query
,
67 { urlversion
: '2', foo
: 'bar' },
68 'Empty model state with unrecognized params retains unrecognized params'
72 filtersModel
.toggleFiltersSelected( {
73 group1__filter1
: true, // Param: filter2: '1'
74 group3__filter5
: true // Param: group3: 'filter5'
78 ( uriProcessor
.getUpdatedUri( {} ) ).query
,
79 { urlversion
: '2', filter2
: '1', group3
: 'filter5' },
80 'Model state is reflected in the updated URI'
84 ( uriProcessor
.getUpdatedUri( { foo
: 'bar' } ) ).query
,
85 { urlversion
: '2', filter2
: '1', group3
: 'filter5', foo
: 'bar' },
86 'Model state is reflected in the updated URI with existing uri params'
90 QUnit
.test( 'updateModelBasedOnQuery', function ( assert
) {
92 filtersModel
= new mw
.rcfilters
.dm
.FiltersViewModel();
94 filtersModel
.initializeFilters( mockFilterStructure
);
95 uriProcessor
= new mw
.rcfilters
.UriProcessor( filtersModel
);
97 uriProcessor
.updateModelBasedOnQuery( {} );
99 filtersModel
.getCurrentParameterState(),
100 minimalDefaultParams
,
101 'Version 1: Empty url query sets model to defaults'
104 uriProcessor
.updateModelBasedOnQuery( { urlversion
: '2' } );
106 filtersModel
.getCurrentParameterState(),
108 'Version 2: Empty url query sets model to all-false'
111 uriProcessor
.updateModelBasedOnQuery( { filter1
: '1', urlversion
: '2' } );
113 filtersModel
.getCurrentParameterState(),
114 $.extend( true, {}, { filter1
: '1' } ),
115 'Parameters in Uri query set parameter value in the model'
118 uriProcessor
.updateModelBasedOnQuery( { highlight
: '1', group1__filter1_color
: 'c1', urlversion
: '2' } );
120 filtersModel
.getCurrentParameterState(),
123 group1__filter1_color
: 'c1'
125 'Highlight parameters in Uri query set highlight state in the model'
129 QUnit
.test( 'isNewState', function ( assert
) {
131 filtersModel
= new mw
.rcfilters
.dm
.FiltersViewModel(),
139 message
: 'Empty objects are not new state.'
143 curr
: { filter1
: '1' },
144 new: { filter1
: '0' }
147 message
: 'Nulified parameter is a new state'
151 curr
: { filter1
: '1' },
152 new: { filter1
: '1', filter2
: '1' }
155 message
: 'Added parameters are a new state'
159 curr
: { filter1
: '1' },
160 new: { filter1
: '1', filter2
: '0' }
163 message
: 'Added null parameters are not a new state (normalizing equals old state)'
167 curr
: { filter1
: '1' },
168 new: { filter1
: '1', foo
: 'bar' }
171 message
: 'Added unrecognized parameters are a new state'
175 curr
: { filter1
: '1', foo
: 'bar' },
176 new: { filter1
: '1', foo
: 'baz' }
179 message
: 'Changed unrecognized parameters are a new state'
183 filtersModel
.initializeFilters( mockFilterStructure
);
184 uriProcessor
= new mw
.rcfilters
.UriProcessor( filtersModel
);
186 cases
.forEach( function ( testCase
) {
188 uriProcessor
.isNewState( testCase
.states
.curr
, testCase
.states
.new ),
195 QUnit
.test( 'doesQueryContainRecognizedParams', function ( assert
) {
197 filtersModel
= new mw
.rcfilters
.dm
.FiltersViewModel(),
202 message
: 'Empty query is not valid for load.'
205 query
: { highlight
: '1' },
207 message
: 'Highlight state alone is not valid for load'
210 query
: { urlversion
: '2' },
212 message
: 'urlversion=2 state alone is valid for load as an empty state'
215 query
: { filter1
: '1', foo
: 'bar' },
217 message
: 'Existence of recognized parameters makes the query valid for load'
220 query
: { foo
: 'bar', debug
: true },
222 message
: 'Only unrecognized parameters makes the query invalid for load'
226 filtersModel
.initializeFilters( mockFilterStructure
);
227 uriProcessor
= new mw
.rcfilters
.UriProcessor( filtersModel
);
229 cases
.forEach( function ( testCase
) {
231 uriProcessor
.doesQueryContainRecognizedParams( testCase
.query
),
238 QUnit
.test( '_getNormalizedQueryParams', function ( assert
) {
240 filtersModel
= new mw
.rcfilters
.dm
.FiltersViewModel(),
244 result
: $.extend( true, { urlversion
: '2' }, minimalDefaultParams
),
245 message
: 'Empty query returns defaults (urlversion 1).'
248 query
: { urlversion
: '2' },
249 result
: { urlversion
: '2' },
250 message
: 'Empty query returns empty (urlversion 2)'
253 query
: { filter1
: '0' },
254 result
: { urlversion
: '2', filter4
: '1' },
255 message
: 'urlversion 1 returns query that overrides defaults'
258 query
: { filter3
: '1' },
259 result
: { urlversion
: '2', filter1
: '1', filter4
: '1', filter3
: '1' },
260 message
: 'urlversion 1 with an extra param value returns query that is joined with defaults'
264 filtersModel
.initializeFilters( mockFilterStructure
);
265 uriProcessor
= new mw
.rcfilters
.UriProcessor( filtersModel
);
267 cases
.forEach( function ( testCase
) {
269 uriProcessor
._getNormalizedQueryParams( testCase
.query
),
276 }( mediaWiki
, jQuery
) );