@@ -154,6 +154,158 @@ test('multiple adds to the old value', function (assert) {
154154 assert . deepEqual ( $select . val ( ) , [ 'default' , '2' ] ) ;
155155} ) ;
156156
157+ test ( 'duplicates - single - same id on select triggers change' ,
158+ function ( assert ) {
159+ var $select = $ ( '#qunit-fixture .duplicates' ) ;
160+
161+ var data = new SelectData ( $select , data ) ;
162+ var second = $ ( '#qunit-fixture .duplicates option' ) [ 2 ] ;
163+
164+ var changeTriggered = false ;
165+
166+ assert . equal ( $select . val ( ) , 'one' ) ;
167+
168+ $select . on ( 'change' , function ( ) {
169+ changeTriggered = true ;
170+ } ) ;
171+
172+ data . select ( {
173+ id : 'one' ,
174+ text : 'Uno' ,
175+ element : second
176+ } ) ;
177+
178+ assert . equal (
179+ $select . val ( ) ,
180+ 'one' ,
181+ 'The value never changed'
182+ ) ;
183+
184+ assert . ok (
185+ changeTriggered ,
186+ 'The change event should be triggered'
187+ ) ;
188+
189+ assert . ok (
190+ second . selected ,
191+ 'The second duplicate is selected, not the first'
192+ ) ;
193+ } ) ;
194+
195+ test ( 'duplicates - single - different id on select triggers change' ,
196+ function ( assert ) {
197+ var $select = $ ( '#qunit-fixture .duplicates' ) ;
198+
199+ var data = new SelectData ( $select , data ) ;
200+ var second = $ ( '#qunit-fixture .duplicates option' ) [ 2 ] ;
201+
202+ var changeTriggered = false ;
203+
204+ $select . val ( 'two' ) ;
205+
206+ $select . on ( 'change' , function ( ) {
207+ changeTriggered = true ;
208+ } ) ;
209+
210+ data . select ( {
211+ id : 'one' ,
212+ text : 'Uno' ,
213+ element : second
214+ } ) ;
215+
216+ assert . equal (
217+ $select . val ( ) ,
218+ 'one' ,
219+ 'The value changed to the duplicate id'
220+ ) ;
221+
222+ assert . ok (
223+ changeTriggered ,
224+ 'The change event should be triggered'
225+ ) ;
226+
227+ assert . ok (
228+ second . selected ,
229+ 'The second duplicate is selected, not the first'
230+ ) ;
231+ } ) ;
232+
233+ test ( 'duplicates - multiple - same id on select triggers change' ,
234+ function ( assert ) {
235+ var $select = $ ( '#qunit-fixture .duplicates-multi' ) ;
236+
237+ var data = new SelectData ( $select , data ) ;
238+ var second = $ ( '#qunit-fixture .duplicates-multi option' ) [ 2 ] ;
239+
240+ var changeTriggered = false ;
241+
242+ $select . val ( [ 'one' ] ) ;
243+
244+ $select . on ( 'change' , function ( ) {
245+ changeTriggered = true ;
246+ } ) ;
247+
248+ data . select ( {
249+ id : 'one' ,
250+ text : 'Uno' ,
251+ element : second
252+ } ) ;
253+
254+ assert . deepEqual (
255+ $select . val ( ) ,
256+ [ 'one' , 'one' ] ,
257+ 'The value now has duplicates'
258+ ) ;
259+
260+ assert . ok (
261+ changeTriggered ,
262+ 'The change event should be triggered'
263+ ) ;
264+
265+ assert . ok (
266+ second . selected ,
267+ 'The second duplicate is selected, not the first'
268+ ) ;
269+ } ) ;
270+
271+ test ( 'duplicates - multiple - different id on select triggers change' ,
272+ function ( assert ) {
273+ var $select = $ ( '#qunit-fixture .duplicates-multi' ) ;
274+
275+ var data = new SelectData ( $select , data ) ;
276+ var second = $ ( '#qunit-fixture .duplicates-multi option' ) [ 2 ] ;
277+
278+ var changeTriggered = false ;
279+
280+ $select . val ( [ 'two' ] ) ;
281+
282+ $select . on ( 'change' , function ( ) {
283+ changeTriggered = true ;
284+ } ) ;
285+
286+ data . select ( {
287+ id : 'one' ,
288+ text : 'Uno' ,
289+ element : second
290+ } ) ;
291+
292+ assert . deepEqual (
293+ $select . val ( ) ,
294+ [ 'two' , 'one' ] ,
295+ 'The value has the new id'
296+ ) ;
297+
298+ assert . ok (
299+ changeTriggered ,
300+ 'The change event should be triggered'
301+ ) ;
302+
303+ assert . ok (
304+ second . selected ,
305+ 'The second duplicate is selected, not the first'
306+ ) ;
307+ } ) ;
308+
157309module ( 'Data adapter - Select - query' ) ;
158310
159311test ( 'all options are returned with no term' , function ( assert ) {
@@ -258,3 +410,32 @@ test('empty optgroups are still shown when queried', function (assert) {
258410 ) ;
259411 } ) ;
260412} ) ;
413+
414+ test ( 'multiple options with the same value are returned' , function ( assert ) {
415+ var $select = $ ( '#qunit-fixture .duplicates' ) ;
416+
417+ var data = new SelectData ( $select , options ) ;
418+
419+ data . query ( { } , function ( data ) {
420+ assert . equal (
421+ data . length ,
422+ 3 ,
423+ 'The duplicate option should still be returned when queried'
424+ ) ;
425+
426+ var first = data [ 0 ] ;
427+ var duplicate = data [ 2 ] ;
428+
429+ assert . equal (
430+ first . id ,
431+ duplicate . id ,
432+ 'The duplicates should have the same id'
433+ ) ;
434+
435+ assert . notEqual (
436+ first . text ,
437+ duplicate . text ,
438+ 'The duplicates do not have the same text'
439+ ) ;
440+ } ) ;
441+ } ) ;
0 commit comments