@@ -57,4 +57,185 @@ describe("ODatepicker", () => {
5757 const updateValue = updates [ 0 ] [ 0 ] ;
5858 expect ( updateValue ) . toBeNull ( ) ;
5959 } ) ;
60+
61+ test ( "react accordingly when an date is selected with multiple prop" , async ( ) => {
62+ const wrapper = mount ( ODatepicker , {
63+ props : { modelValue : [ new Date ( ) ] , multiple : true } ,
64+ } ) ;
65+
66+ // check pre selected date
67+ const cells = wrapper . findAll ( ".o-dpck__table__cell" ) ;
68+ let selectedCells = cells . filter ( ( c ) =>
69+ c . classes ( "o-dpck__table__cell--selected" ) ,
70+ ) ;
71+ // check only one date is selected
72+ expect ( selectedCells . length ) . toBe ( 1 ) ;
73+
74+ // check nothing got emitted yet
75+ let emit = wrapper . emitted ( "update:modelValue" ) ;
76+ expect ( emit ) . toBeUndefined ( ) ;
77+
78+ // select another date
79+ const cellToSelect1 = cells . find (
80+ ( c ) =>
81+ c . classes ( "o-dpck__table__cell--selectable" ) &&
82+ ! c . classes ( "o-dpck__table__cell--selected" ) ,
83+ ) ;
84+ await cellToSelect1 . trigger ( "click" ) ;
85+
86+ // check modelValue got updated
87+ emit = wrapper . emitted ( "update:modelValue" ) ;
88+ expect ( emit ) . toHaveLength ( 1 ) ;
89+ expect ( emit [ 0 ] [ 0 ] ) . toHaveLength ( 2 ) ;
90+
91+ // check two dates are selected
92+ selectedCells = cells . filter ( ( c ) =>
93+ c . classes ( "o-dpck__table__cell--selected" ) ,
94+ ) ;
95+ expect ( selectedCells . length ) . toBe ( 2 ) ;
96+
97+ // select another date
98+ const cellToSelect2 = cells . find (
99+ ( c ) =>
100+ c . classes ( "o-dpck__table__cell--selectable" ) &&
101+ ! c . classes ( "o-dpck__table__cell--selected" ) ,
102+ ) ;
103+ await cellToSelect2 . trigger ( "click" ) ;
104+
105+ // check modelValue got updated
106+ emit = wrapper . emitted ( "update:modelValue" ) ;
107+ expect ( emit ) . toHaveLength ( 2 ) ;
108+ expect ( emit [ 1 ] [ 0 ] ) . toHaveLength ( 3 ) ;
109+
110+ // check three dates are selected
111+ selectedCells = cells . filter ( ( c ) =>
112+ c . classes ( "o-dpck__table__cell--selected" ) ,
113+ ) ;
114+ expect ( selectedCells . length ) . toBe ( 3 ) ;
115+
116+ // deselect preveus selected date
117+ await cellToSelect1 . trigger ( "click" ) ;
118+
119+ // check modelValue got updated
120+ emit = wrapper . emitted ( "update:modelValue" ) ;
121+ expect ( emit ) . toHaveLength ( 3 ) ;
122+ expect ( emit [ 2 ] [ 0 ] ) . toHaveLength ( 2 ) ;
123+
124+ // check two dates are selected
125+ selectedCells = cells . filter ( ( c ) =>
126+ c . classes ( "o-dpck__table__cell--selected" ) ,
127+ ) ;
128+ expect ( selectedCells . length ) . toBe ( 2 ) ;
129+ } ) ;
130+
131+ test ( "react accordingly when an date is selected with range prop" , async ( ) => {
132+ const wrapper = mount ( ODatepicker , {
133+ props : { modelValue : [ ] , range : true } ,
134+ } ) ;
135+
136+ // check pre selected date
137+ const cells = wrapper . findAll ( ".o-dpck__table__cell" ) ;
138+ let selectedCells = cells . filter ( ( c ) =>
139+ c . classes ( "o-dpck__table__cell--selected" ) ,
140+ ) ;
141+ // check nothing is selected yet
142+ expect ( selectedCells . length ) . toBe ( 0 ) ;
143+
144+ // check nothing got emitted yet
145+ let emit = wrapper . emitted ( "update:modelValue" ) ;
146+ expect ( emit ) . toBeUndefined ( ) ;
147+
148+ // select first date
149+ let cellToSelect = cells . find (
150+ ( c ) =>
151+ c . classes ( "o-dpck__table__cell--selectable" ) &&
152+ ! c . classes ( "o-dpck__table__cell--selected" ) ,
153+ ) ;
154+ await cellToSelect . trigger ( "click" ) ;
155+
156+ // check nothing got emitted yet
157+ emit = wrapper . emitted ( "update:modelValue" ) ;
158+ expect ( emit ) . toBeUndefined ( ) ;
159+
160+ // check one date is selected
161+ selectedCells = cells . filter ( ( c ) =>
162+ c . classes ( "o-dpck__table__cell--first-hovered" ) ,
163+ ) ;
164+ expect ( selectedCells . length ) . toBe ( 1 ) ;
165+
166+ // select second date
167+ cellToSelect = cells . find (
168+ ( c ) =>
169+ c . classes ( "o-dpck__table__cell--selectable" ) &&
170+ ! c . classes ( "o-dpck__table__cell--selected" ) ,
171+ ) ;
172+ await cellToSelect . trigger ( "click" ) ;
173+
174+ // check modelValue got updated
175+ emit = wrapper . emitted ( "update:modelValue" ) ;
176+ expect ( emit ) . toHaveLength ( 1 ) ;
177+ expect ( emit [ 0 ] [ 0 ] ) . toHaveLength ( 2 ) ;
178+
179+ // check two dates are selected
180+ selectedCells = cells . filter ( ( c ) =>
181+ c . classes ( "o-dpck__table__cell--selected" ) ,
182+ ) ;
183+ expect ( selectedCells . length ) . not . toBe ( 0 ) ;
184+
185+ // check one date is selected
186+ selectedCells = cells . filter ( ( c ) =>
187+ c . classes ( "o-dpck__table__cell--first-selected" ) ,
188+ ) ;
189+ expect ( selectedCells . length ) . toBe ( 1 ) ;
190+
191+ // check one date is selected
192+ selectedCells = cells . filter ( ( c ) =>
193+ c . classes ( "o-dpck__table__cell--last-selected" ) ,
194+ ) ;
195+ expect ( selectedCells . length ) . toBe ( 1 ) ;
196+
197+ // select another first date
198+ cellToSelect = cells . find (
199+ ( c ) =>
200+ c . classes ( "o-dpck__table__cell--selectable" ) &&
201+ ! c . classes ( "o-dpck__table__cell--selected" ) ,
202+ ) ;
203+ // select another date
204+ await cellToSelect . trigger ( "click" ) ;
205+
206+ // check nothing got emitted yet
207+ emit = wrapper . emitted ( "update:modelValue" ) ;
208+ expect ( emit ) . toHaveLength ( 1 ) ;
209+
210+ // select second date
211+ cellToSelect = cells . find (
212+ ( c ) =>
213+ c . classes ( "o-dpck__table__cell--selectable" ) &&
214+ ! c . classes ( "o-dpck__table__cell--selected" ) ,
215+ ) ;
216+ await cellToSelect . trigger ( "click" ) ;
217+
218+ // check two dates are selected
219+ selectedCells = cells . filter ( ( c ) =>
220+ c . classes ( "o-dpck__table__cell--selected" ) ,
221+ ) ;
222+ expect ( selectedCells . length ) . not . toBe ( 0 ) ;
223+
224+ // check one date is selected
225+ selectedCells = cells . filter ( ( c ) =>
226+ c . classes ( "o-dpck__table__cell--first-selected" ) ,
227+ ) ;
228+ expect ( selectedCells . length ) . toBe ( 1 ) ;
229+
230+ // check one date is selected
231+ selectedCells = cells . filter ( ( c ) =>
232+ c . classes ( "o-dpck__table__cell--last-selected" ) ,
233+ ) ;
234+ expect ( selectedCells . length ) . toBe ( 1 ) ;
235+
236+ // check modelValue got updated
237+ emit = wrapper . emitted ( "update:modelValue" ) ;
238+ expect ( emit ) . toHaveLength ( 2 ) ;
239+ expect ( emit [ 1 ] [ 0 ] ) . toHaveLength ( 2 ) ;
240+ } ) ;
60241} ) ;
0 commit comments