@@ -276,6 +276,67 @@ describe("multi-select options", () => {
276276 } ) ;
277277} ) ;
278278
279+ describe ( "option-deselected event" , ( ) => {
280+ it ( "should emit option-deselected when removing a tag via click in multi-select" , async ( ) => {
281+ const wrapper = mount ( VueSelect , { props : { modelValue : [ ] , isMulti : true , options } } ) ;
282+
283+ await openMenu ( wrapper ) ;
284+ await wrapper . get ( "div[role='option']" ) . trigger ( "click" ) ;
285+
286+ expect ( wrapper . emitted ( "optionDeselected" ) ) . toBeUndefined ( ) ;
287+
288+ await wrapper . get ( ".multi-value-remove" ) . trigger ( "click" ) ;
289+
290+ const emittedEvents = wrapper . emitted ( "optionDeselected" ) ;
291+ expect ( emittedEvents ) . toBeDefined ( ) ;
292+ expect ( emittedEvents ?. [ 0 ] ?. [ 0 ] ) . toEqual ( options [ 0 ] ) ;
293+ } ) ;
294+
295+ it ( "should emit option-deselected when removing a tag via backspace in multi-select" , async ( ) => {
296+ const wrapper = mount ( VueSelect , { props : { modelValue : [ ] , isMulti : true , options } } ) ;
297+
298+ await openMenu ( wrapper ) ;
299+ await wrapper . get ( "div[role='option']" ) . trigger ( "click" ) ;
300+
301+ expect ( wrapper . emitted ( "optionDeselected" ) ) . toBeUndefined ( ) ;
302+
303+ await wrapper . get ( "input" ) . trigger ( "mousedown" ) ;
304+ await dispatchEvent ( wrapper , new KeyboardEvent ( "keydown" , { key : "Backspace" } ) ) ;
305+
306+ const emittedEvents = wrapper . emitted ( "optionDeselected" ) ;
307+ expect ( emittedEvents ) . toBeDefined ( ) ;
308+ expect ( emittedEvents ?. [ 0 ] ?. [ 0 ] ) . toEqual ( options [ 0 ] ) ;
309+ } ) ;
310+
311+ it ( "should emit option-deselected when removing via backspace in single-select" , async ( ) => {
312+ const wrapper = mount ( VueSelect , { props : { modelValue : null , options } } ) ;
313+
314+ await openMenu ( wrapper ) ;
315+ await wrapper . get ( "div[role='option']" ) . trigger ( "click" ) ;
316+
317+ expect ( wrapper . emitted ( "optionDeselected" ) ) . toBeUndefined ( ) ;
318+
319+ await wrapper . get ( "input" ) . trigger ( "mousedown" ) ;
320+ await dispatchEvent ( wrapper , new KeyboardEvent ( "keydown" , { key : "Backspace" } ) ) ;
321+
322+ const emittedEvents = wrapper . emitted ( "optionDeselected" ) ;
323+ expect ( emittedEvents ) . toBeDefined ( ) ;
324+ expect ( emittedEvents ?. [ 0 ] ?. [ 0 ] ) . toEqual ( options [ 0 ] ) ;
325+ } ) ;
326+
327+ it ( "should emit option-deselected with null when clearing all options in multi-select" , async ( ) => {
328+ const wrapper = mount ( VueSelect , { props : { modelValue : [ ] , isMulti : true , options, isClearable : true } } ) ;
329+
330+ await openMenu ( wrapper ) ;
331+ await wrapper . get ( "div[role='option']" ) . trigger ( "click" ) ;
332+ await wrapper . get ( ".clear-button" ) . trigger ( "click" ) ;
333+
334+ const emittedEvents = wrapper . emitted ( "optionDeselected" ) ;
335+ expect ( emittedEvents ) . toBeDefined ( ) ;
336+ expect ( emittedEvents ?. [ 0 ] ?. [ 0 ] ) . toBeNull ( ) ;
337+ } ) ;
338+ } ) ;
339+
279340describe ( "clear button" , ( ) => {
280341 it ( "should display the clear button when an option is selected" , async ( ) => {
281342 const wrapper = mount ( VueSelect , { props : { modelValue : null , options, isClearable : true } } ) ;
0 commit comments