@@ -191,5 +191,75 @@ describe('Toggler', () => {
191191 togglerEl . click ( )
192192 expect ( togglerEl . getAttribute ( 'id' ) ) . toBeNull ( )
193193 } )
194+
195+ it ( 'should toggle class on target element via data-bs-target with ID selector' , ( ) => {
196+ fixtureEl . innerHTML = [
197+ '<button data-bs-toggle="toggler" data-bs-target="#target-element"></button>' ,
198+ '<div id="target-element" data-bs-value="bg-info" data-bs-attribute="class"></div>'
199+ ] . join ( '' )
200+
201+ const triggerEl = fixtureEl . querySelector ( '[data-bs-toggle="toggler"]' )
202+ const targetEl = fixtureEl . querySelector ( '#target-element' )
203+
204+ triggerEl . click ( )
205+ expect ( targetEl . classList . contains ( 'bg-info' ) ) . toBeTrue ( )
206+
207+ triggerEl . click ( )
208+ expect ( targetEl . classList . contains ( 'bg-info' ) ) . toBeFalse ( )
209+ } )
210+
211+ it ( 'should toggle class on multiple target elements via data-bs-target with class selector' , ( ) => {
212+ fixtureEl . innerHTML = [
213+ '<button data-bs-toggle="toggler" data-bs-target=".target-class"></button>' ,
214+ '<div class="target-class" data-bs-value="bg-warning" data-bs-attribute="class"></div>' ,
215+ '<div class="target-class" data-bs-value="bg-info" data-bs-attribute="class"></div>' ,
216+ '<div class="target-class" data-bs-value="bg-danger" data-bs-attribute="class"></div>'
217+ ] . join ( '' )
218+
219+ const triggerEl = fixtureEl . querySelector ( '[data-bs-toggle="toggler"]' )
220+ const targetEls = fixtureEl . querySelectorAll ( '.target-class' )
221+
222+ triggerEl . click ( )
223+ expect ( targetEls [ 0 ] . classList . contains ( 'bg-warning' ) ) . toBeTrue ( )
224+ expect ( targetEls [ 1 ] . classList . contains ( 'bg-info' ) ) . toBeTrue ( )
225+ expect ( targetEls [ 2 ] . classList . contains ( 'bg-danger' ) ) . toBeTrue ( )
226+
227+ triggerEl . click ( )
228+ expect ( targetEls [ 0 ] . classList . contains ( 'bg-warning' ) ) . toBeFalse ( )
229+ expect ( targetEls [ 1 ] . classList . contains ( 'bg-info' ) ) . toBeFalse ( )
230+ expect ( targetEls [ 2 ] . classList . contains ( 'bg-danger' ) ) . toBeFalse ( )
231+ } )
232+
233+ it ( 'should toggle attribute on target element via data-bs-target' , ( ) => {
234+ fixtureEl . innerHTML = [
235+ '<button data-bs-toggle="toggler" data-bs-target="#target-fieldset"></button>' ,
236+ '<fieldset id="target-fieldset" data-bs-value="disabled" data-bs-attribute="disabled"></fieldset>'
237+ ] . join ( '' )
238+
239+ const triggerEl = fixtureEl . querySelector ( '[data-bs-toggle="toggler"]' )
240+ const targetEl = fixtureEl . querySelector ( '#target-fieldset' )
241+
242+ triggerEl . click ( )
243+ expect ( targetEl . getAttribute ( 'disabled' ) ) . toEqual ( 'disabled' )
244+
245+ triggerEl . click ( )
246+ expect ( targetEl . hasAttribute ( 'disabled' ) ) . toBeFalse ( )
247+ } )
248+
249+ it ( 'should toggle target element via href attribute as fallback' , ( ) => {
250+ fixtureEl . innerHTML = [
251+ '<a data-bs-toggle="toggler" href="#target-via-href"></a>' ,
252+ '<div id="target-via-href" data-bs-value="active" data-bs-attribute="class"></div>'
253+ ] . join ( '' )
254+
255+ const triggerEl = fixtureEl . querySelector ( '[data-bs-toggle="toggler"]' )
256+ const targetEl = fixtureEl . querySelector ( '#target-via-href' )
257+
258+ triggerEl . click ( )
259+ expect ( targetEl . classList . contains ( 'active' ) ) . toBeTrue ( )
260+
261+ triggerEl . click ( )
262+ expect ( targetEl . classList . contains ( 'active' ) ) . toBeFalse ( )
263+ } )
194264 } )
195265} )
0 commit comments