@@ -2,6 +2,7 @@ import { describe, it, expect, vi } from "vitest";
22import { mount } from "@vue/test-utils" ;
33import { nextTick } from "vue" ;
44import InkDropdown from "./inkDropdown.vue" ;
5+ import InkButton from "../inkButton/inkButton.vue" ;
56import type { DropdownOption } from "./inkDropdown" ;
67
78describe ( "InkDropdown" , ( ) => {
@@ -175,4 +176,75 @@ describe("InkDropdown", () => {
175176
176177 expect ( refresher ) . toHaveBeenCalled ( ) ;
177178 } ) ;
179+
180+ describe ( "stepping" , ( ) => {
181+ const options = [
182+ { label : "Opt 1" , value : "v1" } ,
183+ { label : "Opt 2" , value : "v2" } ,
184+ { label : "Opt 3" , value : "v3" } ,
185+ ] ;
186+
187+ it ( "loops forward correctly" , async ( ) => {
188+ const wrapper = mount ( InkDropdown , {
189+ props : {
190+ modelValue : "v1" ,
191+ options,
192+ enableStepping : true ,
193+ } ,
194+ } ) ;
195+
196+ const nextBtn = wrapper . findAllComponents ( InkButton ) . at ( 1 ) ;
197+ await nextBtn ?. trigger ( "click" ) ;
198+ expect ( wrapper . emitted ( "update:modelValue" ) ?. [ 0 ] ) . toEqual ( [ "v2" ] ) ;
199+
200+ await wrapper . setProps ( { modelValue : "v3" } ) ;
201+ await nextBtn ?. trigger ( "click" ) ;
202+ expect ( wrapper . emitted ( "update:modelValue" ) ?. [ 1 ] ) . toEqual ( [ "v1" ] ) ;
203+ } ) ;
204+
205+ it ( "loops backward correctly" , async ( ) => {
206+ const wrapper = mount ( InkDropdown , {
207+ props : {
208+ modelValue : "v1" ,
209+ options,
210+ enableStepping : true ,
211+ } ,
212+ } ) ;
213+
214+ const prevBtn = wrapper . findAllComponents ( InkButton ) . at ( 0 ) ;
215+ await prevBtn ?. trigger ( "click" ) ;
216+ expect ( wrapper . emitted ( "update:modelValue" ) ?. [ 0 ] ) . toEqual ( [ "v3" ] ) ;
217+
218+ await wrapper . setProps ( { modelValue : "v2" } ) ;
219+ await prevBtn ?. trigger ( "click" ) ;
220+ expect ( wrapper . emitted ( "update:modelValue" ) ?. [ 1 ] ) . toEqual ( [ "v1" ] ) ;
221+ } ) ;
222+
223+ it ( "is disabled when editable is false" , ( ) => {
224+ const wrapper = mount ( InkDropdown , {
225+ props : {
226+ options,
227+ enableStepping : true ,
228+ editable : false ,
229+ } ,
230+ } ) ;
231+
232+ const buttons = wrapper . findAllComponents ( InkButton ) ;
233+ expect ( buttons . at ( 0 ) ?. find ( "button" ) . element . disabled ) . toBe ( true ) ;
234+ expect ( buttons . at ( 1 ) ?. find ( "button" ) . element . disabled ) . toBe ( true ) ;
235+ } ) ;
236+
237+ it ( "is disabled when options are empty" , ( ) => {
238+ const wrapper = mount ( InkDropdown , {
239+ props : {
240+ options : [ ] ,
241+ enableStepping : true ,
242+ } ,
243+ } ) ;
244+
245+ const buttons = wrapper . findAllComponents ( InkButton ) ;
246+ expect ( buttons . at ( 0 ) ?. find ( "button" ) . element . disabled ) . toBe ( true ) ;
247+ expect ( buttons . at ( 1 ) ?. find ( "button" ) . element . disabled ) . toBe ( true ) ;
248+ } ) ;
249+ } ) ;
178250} ) ;
0 commit comments