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'
119 QUnit
.test( 'isNewState', function ( assert
) {
121 filtersModel
= new mw
.rcfilters
.dm
.FiltersViewModel(),
129 message
: 'Empty objects are not new state.'
133 curr
: { filter1
: '1' },
134 new: { filter1
: '0' }
137 message
: 'Nulified parameter is a new state'
141 curr
: { filter1
: '1' },
142 new: { filter1
: '1', filter2
: '1' }
145 message
: 'Added parameters are a new state'
149 curr
: { filter1
: '1' },
150 new: { filter1
: '1', filter2
: '0' }
153 message
: 'Added null parameters are not a new state (normalizing equals old state)'
157 curr
: { filter1
: '1' },
158 new: { filter1
: '1', foo
: 'bar' }
161 message
: 'Added unrecognized parameters are a new state'
165 curr
: { filter1
: '1', foo
: 'bar' },
166 new: { filter1
: '1', foo
: 'baz' }
169 message
: 'Changed unrecognized parameters are a new state'
173 filtersModel
.initializeFilters( mockFilterStructure
);
174 uriProcessor
= new mw
.rcfilters
.UriProcessor( filtersModel
);
176 cases
.forEach( function ( testCase
) {
178 uriProcessor
.isNewState( testCase
.states
.curr
, testCase
.states
.new ),
185 QUnit
.test( 'doesQueryContainRecognizedParams', function ( assert
) {
187 filtersModel
= new mw
.rcfilters
.dm
.FiltersViewModel(),
192 message
: 'Empty query is not valid for load.'
195 query
: { highlight
: '1' },
197 message
: 'Highlight state alone is not valid for load'
200 query
: { urlversion
: '2' },
202 message
: 'urlversion=2 state alone is valid for load as an empty state'
205 query
: { filter1
: '1', foo
: 'bar' },
207 message
: 'Existence of recognized parameters makes the query valid for load'
210 query
: { foo
: 'bar', debug
: true },
212 message
: 'Only unrecognized parameters makes the query invalid for load'
216 filtersModel
.initializeFilters( mockFilterStructure
);
217 uriProcessor
= new mw
.rcfilters
.UriProcessor( filtersModel
);
219 cases
.forEach( function ( testCase
) {
221 uriProcessor
.doesQueryContainRecognizedParams( testCase
.query
),
228 QUnit
.test( '_getNormalizedQueryParams', function ( assert
) {
230 filtersModel
= new mw
.rcfilters
.dm
.FiltersViewModel(),
234 result
: $.extend( true, { urlversion
: '2' }, minimalDefaultParams
),
235 message
: 'Empty query returns defaults (urlversion 1).'
238 query
: { urlversion
: '2' },
239 result
: { urlversion
: '2' },
240 message
: 'Empty query returns empty (urlversion 2)'
243 query
: { filter1
: '0' },
244 result
: { urlversion
: '2', filter4
: '1' },
245 message
: 'urlversion 1 returns query that overrides defaults'
248 query
: { filter3
: '1' },
249 result
: { urlversion
: '2', filter1
: '1', filter4
: '1', filter3
: '1' },
250 message
: 'urlversion 1 with an extra param value returns query that is joined with defaults'
254 filtersModel
.initializeFilters( mockFilterStructure
);
255 uriProcessor
= new mw
.rcfilters
.UriProcessor( filtersModel
);
257 cases
.forEach( function ( testCase
) {
259 uriProcessor
._getNormalizedQueryParams( testCase
.query
),
266 }( mediaWiki
, jQuery
) );