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
34 { name
: 'stickyFilter7', cssClass
: 'filter7class' },
35 { name
: 'stickyFilter8', cssClass
: 'filter8class' }
38 minimalDefaultParams
= {
43 QUnit
.module( 'mediawiki.rcfilters - UriProcessor' );
45 QUnit
.test( 'getVersion', function ( assert
) {
46 var uriProcessor
= new mw
.rcfilters
.UriProcessor( new mw
.rcfilters
.dm
.FiltersViewModel() );
49 uriProcessor
.getVersion( { param1
: 'foo', urlversion
: '2' } ),
51 'Retrieving the version from the URI query'
55 uriProcessor
.getVersion( { param1
: 'foo' } ),
57 'Getting version 1 if no version is specified'
61 QUnit
.test( 'getUpdatedUri', function ( assert
) {
63 filtersModel
= new mw
.rcfilters
.dm
.FiltersViewModel();
65 filtersModel
.initializeFilters( mockFilterStructure
);
66 uriProcessor
= new mw
.rcfilters
.UriProcessor( filtersModel
);
69 ( uriProcessor
.getUpdatedUri( {} ) ).query
,
71 'Empty model state with empty uri state, assumes the given uri is already normalized, and adds urlversion=2'
75 ( uriProcessor
.getUpdatedUri( { foo
: 'bar' } ) ).query
,
76 { urlversion
: '2', foo
: 'bar' },
77 'Empty model state with unrecognized params retains unrecognized params'
81 filtersModel
.toggleFiltersSelected( {
82 group1__filter1
: true, // Param: filter2: '1'
83 group3__filter5
: true // Param: group3: 'filter5'
87 ( uriProcessor
.getUpdatedUri( {} ) ).query
,
88 { urlversion
: '2', filter2
: '1', group3
: 'filter5' },
89 'Model state is reflected in the updated URI'
93 ( uriProcessor
.getUpdatedUri( { foo
: 'bar' } ) ).query
,
94 { urlversion
: '2', filter2
: '1', group3
: 'filter5', foo
: 'bar' },
95 'Model state is reflected in the updated URI with existing uri params'
98 // Update the model with sticky filter
99 filtersModel
.toggleFiltersSelected( {
100 group4__stickyFilter7
: true
104 ( uriProcessor
.getUpdatedUri( {} ) ).query
,
105 { urlversion
: '2', filter2
: '1', group3
: 'filter5' },
106 'Sticky parameters are not reflected in the URI query'
110 QUnit
.test( 'updateModelBasedOnQuery', function ( assert
) {
112 filtersModel
= new mw
.rcfilters
.dm
.FiltersViewModel();
114 filtersModel
.initializeFilters( mockFilterStructure
);
115 uriProcessor
= new mw
.rcfilters
.UriProcessor( filtersModel
);
117 uriProcessor
.updateModelBasedOnQuery( {} );
119 filtersModel
.getCurrentParameterState(),
120 minimalDefaultParams
,
121 'Version 1: Empty url query sets model to defaults'
124 uriProcessor
.updateModelBasedOnQuery( { urlversion
: '2' } );
126 filtersModel
.getCurrentParameterState(),
128 'Version 2: Empty url query sets model to all-false'
131 uriProcessor
.updateModelBasedOnQuery( { filter1
: '1', urlversion
: '2' } );
133 filtersModel
.getCurrentParameterState(),
134 $.extend( true, {}, { filter1
: '1' } ),
135 'Parameters in Uri query set parameter value in the model'
139 QUnit
.test( 'isNewState', function ( assert
) {
141 filtersModel
= new mw
.rcfilters
.dm
.FiltersViewModel(),
149 message
: 'Empty objects are not new state.'
153 curr
: { filter1
: '1' },
154 new: { filter1
: '0' }
157 message
: 'Nulified parameter is a new state'
161 curr
: { filter1
: '1' },
162 new: { filter1
: '1', filter2
: '1' }
165 message
: 'Added parameters are a new state'
169 curr
: { filter1
: '1' },
170 new: { filter1
: '1', filter2
: '0' }
173 message
: 'Added null parameters are not a new state (normalizing equals old state)'
177 curr
: { filter1
: '1' },
178 new: { filter1
: '1', foo
: 'bar' }
181 message
: 'Added unrecognized parameters are a new state'
185 curr
: { filter1
: '1', foo
: 'bar' },
186 new: { filter1
: '1', foo
: 'baz' }
189 message
: 'Changed unrecognized parameters are a new state'
193 filtersModel
.initializeFilters( mockFilterStructure
);
194 uriProcessor
= new mw
.rcfilters
.UriProcessor( filtersModel
);
196 cases
.forEach( function ( testCase
) {
198 uriProcessor
.isNewState( testCase
.states
.curr
, testCase
.states
.new ),
205 QUnit
.test( 'doesQueryContainRecognizedParams', function ( assert
) {
207 filtersModel
= new mw
.rcfilters
.dm
.FiltersViewModel(),
212 message
: 'Empty query is not valid for load.'
215 query
: { highlight
: '1' },
217 message
: 'Highlight state alone is not valid for load'
220 query
: { urlversion
: '2' },
222 message
: 'urlversion=2 state alone is valid for load as an empty state'
225 query
: { filter1
: '1', foo
: 'bar' },
227 message
: 'Existence of recognized parameters makes the query valid for load'
230 query
: { foo
: 'bar', debug
: true },
232 message
: 'Only unrecognized parameters makes the query invalid for load'
236 filtersModel
.initializeFilters( mockFilterStructure
);
237 uriProcessor
= new mw
.rcfilters
.UriProcessor( filtersModel
);
239 cases
.forEach( function ( testCase
) {
241 uriProcessor
.doesQueryContainRecognizedParams( testCase
.query
),
248 QUnit
.test( '_getNormalizedQueryParams', function ( assert
) {
250 filtersModel
= new mw
.rcfilters
.dm
.FiltersViewModel(),
254 result
: $.extend( true, { urlversion
: '2' }, minimalDefaultParams
),
255 message
: 'Empty query returns defaults (urlversion 1).'
258 query
: { urlversion
: '2' },
259 result
: { urlversion
: '2' },
260 message
: 'Empty query returns empty (urlversion 2)'
263 query
: { filter1
: '0' },
264 result
: { urlversion
: '2', filter4
: '1' },
265 message
: 'urlversion 1 returns query that overrides defaults'
268 query
: { filter3
: '1' },
269 result
: { urlversion
: '2', filter1
: '1', filter4
: '1', filter3
: '1' },
270 message
: 'urlversion 1 with an extra param value returns query that is joined with defaults'
274 filtersModel
.initializeFilters( mockFilterStructure
);
275 uriProcessor
= new mw
.rcfilters
.UriProcessor( filtersModel
);
277 cases
.forEach( function ( testCase
) {
279 uriProcessor
._getNormalizedQueryParams( testCase
.query
),
286 }( mediaWiki
, jQuery
) );