@@ -368,13 +368,13 @@ class BootstrapCollectionCheckboxesTest < ActionView::TestCase
368368 < div role ="group " aria-labelledby ="user_misc " class ="mb-3 ">
369369 < div id ="user_misc " class ="form-label "> Misc</ div >
370370 < div class ="form-check ">
371- < input class ="form-check-input is-invalid " id ="user_misc_1 " name ="user[misc][] " type ="checkbox " value ="1 " />
371+ < input class ="form-check-input is-invalid " id ="user_misc_1 " aria-labelledby =" user_misc_feedback " name ="user[misc][] " type ="checkbox " value ="1 " />
372372 < label class ="form-check-label " for ="user_misc_1 "> Foo</ label >
373373 </ div >
374374 < div class ="form-check ">
375- < input class ="form-check-input is-invalid " id ="user_misc_2 " name ="user[misc][] " type ="checkbox " value ="2 " />
375+ < input class ="form-check-input is-invalid " id ="user_misc_2 " aria-labelledby =" user_misc_feedback " name ="user[misc][] " type ="checkbox " value ="2 " />
376376 < label class ="form-check-label " for ="user_misc_2 "> Bar</ label >
377- < div class ="invalid-feedback "> a box must be checked</ div >
377+ < div class ="invalid-feedback " id =" user_misc_feedback " > a box must be checked</ div >
378378 </ div >
379379 </ div >
380380 </ form>
@@ -387,6 +387,35 @@ class BootstrapCollectionCheckboxesTest < ActionView::TestCase
387387 assert_equivalent_html expected , actual
388388 end
389389
390+ test "collection_check_boxes renders error after last check box with specified id:" do
391+ collection = [ Address . new ( id : 1 , street : "Foo" ) , Address . new ( id : 2 , street : "Bar" ) ]
392+ @user . errors . add ( :misc , "a box must be checked" )
393+
394+ expected = <<~HTML
395+ < form accept-charset ="UTF-8 " action ="/users " class ="new_user " id ="new_user " method ="post ">
396+ < input #{ autocomplete_attr_55336 } id="user_misc" name="user[misc][]" type="hidden" value="" />
397+ < div role ="group " aria-labelledby ="user_misc " class ="mb-3 ">
398+ < div id ="user_misc " class ="form-label "> Misc</ div >
399+ < div class ="form-check ">
400+ < input class ="form-check-input is-invalid " id ="user_misc_1 " aria-labelledby ="user_misc_feedback " name ="user[misc][] " type ="checkbox " value ="1 " />
401+ < label class ="form-check-label " for ="user_misc_1 "> Foo</ label >
402+ </ div >
403+ < div class ="form-check ">
404+ < input class ="form-check-input is-invalid " id ="user_misc_2 " aria-labelledby ="user_misc_feedback " name ="user[misc][] " type ="checkbox " value ="2 " />
405+ < label class ="form-check-label " for ="user_misc_2 "> Bar</ label >
406+ < div class ="invalid-feedback " id ="user_misc_feedback "> a box must be checked</ div >
407+ </ div >
408+ </ div >
409+ </ form>
410+ HTML
411+
412+ actual = bootstrap_form_for ( @user ) do |f |
413+ f . collection_check_boxes ( :misc , collection , :id , :street , { id : "custom-id" } )
414+ end
415+
416+ assert_equivalent_html expected , actual
417+ end
418+
390419 test "collection_check_boxes renders data attributes" do
391420 collection = [
392421 [ "1" , "Foo" , { "data-city" : "east" } ] ,
@@ -418,13 +447,13 @@ class BootstrapCollectionCheckboxesTest < ActionView::TestCase
418447 < div role ="group " aria-labelledby ="user_misc " class ="mb-3 ">
419448 < div id ="user_misc " class ="form-label "> Misc</ div >
420449 < div class ="form-check ">
421- < input checked ="checked " class ="form-check-input is-invalid " id ="user_misc_1 " name ="user[misc][] " type ="checkbox " value ="1 " />
450+ < input checked ="checked " class ="form-check-input is-invalid " id ="user_misc_1 " aria-labelledby =" user_misc_feedback " name ="user[misc][] " type ="checkbox " value ="1 " />
422451 < label class ="form-check-label " for ="user_misc_1 "> Foo</ label >
423452 </ div >
424453 < div class ="form-check ">
425- < input checked ="checked " class ="form-check-input is-invalid " id ="user_misc_2 " name ="user[misc][] " type ="checkbox " value ="2 " />
454+ < input checked ="checked " class ="form-check-input is-invalid " id ="user_misc_2 " aria-labelledby =" user_misc_feedback " name ="user[misc][] " type ="checkbox " value ="2 " />
426455 < label class ="form-check-label " for ="user_misc_2 "> Bar</ label >
427- < div class ="invalid-feedback "> error for test</ div >
456+ < div class ="invalid-feedback " id =" user_misc_feedback " > error for test</ div >
428457 </ div >
429458 </ div >
430459 </ form>
@@ -435,6 +464,33 @@ class BootstrapCollectionCheckboxesTest < ActionView::TestCase
435464 end
436465 assert_equivalent_html expected , actual
437466 end
467+
468+ test "collection_check_boxes renders multiple check boxes with error correctly with specified id:" do
469+ @user . errors . add ( :misc , "error for test" )
470+ collection = [ Address . new ( id : 1 , street : "Foo" ) , Address . new ( id : 2 , street : "Bar" ) ]
471+ expected = <<~HTML
472+ < form accept-charset ="UTF-8 " action ="/users " class ="new_user " id ="new_user " method ="post ">
473+ < input #{ autocomplete_attr_55336 } id="user_misc" name="user[misc][]" type="hidden" value="" />
474+ < div role ="group " aria-labelledby ="user_misc " class ="mb-3 ">
475+ < div id ="user_misc " class ="form-label "> Misc</ div >
476+ < div class ="form-check ">
477+ < input checked ="checked " class ="form-check-input is-invalid " id ="user_misc_1 " aria-labelledby ="user_misc_feedback " name ="user[misc][] " type ="checkbox " value ="1 " />
478+ < label class ="form-check-label " for ="user_misc_1 "> Foo</ label >
479+ </ div >
480+ < div class ="form-check ">
481+ < input checked ="checked " class ="form-check-input is-invalid " id ="user_misc_2 " aria-labelledby ="user_misc_feedback " name ="user[misc][] " type ="checkbox " value ="2 " />
482+ < label class ="form-check-label " for ="user_misc_2 "> Bar</ label >
483+ < div class ="invalid-feedback " id ="user_misc_feedback "> error for test</ div >
484+ </ div >
485+ </ div >
486+ </ form>
487+ HTML
488+
489+ actual = bootstrap_form_for ( @user ) do |f |
490+ f . collection_check_boxes ( :misc , collection , :id , :street , checked : collection , id : "custom-id" )
491+ end
492+ assert_equivalent_html expected , actual
493+ end
438494end
439495
440496class BootstrapLegacyCollectionCheckboxesTest < ActionView ::TestCase
@@ -803,13 +859,13 @@ class BootstrapLegacyCollectionCheckboxesTest < ActionView::TestCase
803859 < div class ="mb-3 ">
804860 < label class ="form-label " for ="user_misc "> Misc</ label >
805861 < div class ="form-check ">
806- < input class ="form-check-input is-invalid " id ="user_misc_1 " name ="user[misc][] " type ="checkbox " value ="1 " />
862+ < input class ="form-check-input is-invalid " id ="user_misc_1 " aria-labelledby =" user_misc_feedback " name ="user[misc][] " type ="checkbox " value ="1 " />
807863 < label class ="form-check-label " for ="user_misc_1 "> Foo</ label >
808864 </ div >
809865 < div class ="form-check ">
810- < input class ="form-check-input is-invalid " id ="user_misc_2 " name ="user[misc][] " type ="checkbox " value ="2 " />
866+ < input class ="form-check-input is-invalid " id ="user_misc_2 " aria-labelledby =" user_misc_feedback " name ="user[misc][] " type ="checkbox " value ="2 " />
811867 < label class ="form-check-label " for ="user_misc_2 "> Bar</ label >
812- < div class ="invalid-feedback "> a box must be checked</ div >
868+ < div class ="invalid-feedback " id =" user_misc_feedback " > a box must be checked</ div >
813869 </ div >
814870 </ div >
815871 </ form>
@@ -822,6 +878,35 @@ class BootstrapLegacyCollectionCheckboxesTest < ActionView::TestCase
822878 assert_equivalent_html expected , actual
823879 end
824880
881+ test "collection_check_boxes renders error after last check box with specified id:" do
882+ collection = [ Address . new ( id : 1 , street : "Foo" ) , Address . new ( id : 2 , street : "Bar" ) ]
883+ @user . errors . add ( :misc , "a box must be checked" )
884+
885+ expected = <<~HTML
886+ < form accept-charset ="UTF-8 " action ="/users " class ="new_user " id ="new_user " method ="post ">
887+ < input #{ autocomplete_attr_55336 } id="user_misc" name="user[misc][]" type="hidden" value="" />
888+ < div class ="mb-3 ">
889+ < label class ="form-label " for ="user_misc "> Misc</ label >
890+ < div class ="form-check ">
891+ < input class ="form-check-input is-invalid " id ="user_misc_1 " aria-labelledby ="user_misc_feedback " name ="user[misc][] " type ="checkbox " value ="1 " />
892+ < label class ="form-check-label " for ="user_misc_1 "> Foo</ label >
893+ </ div >
894+ < div class ="form-check ">
895+ < input class ="form-check-input is-invalid " id ="user_misc_2 " aria-labelledby ="user_misc_feedback " name ="user[misc][] " type ="checkbox " value ="2 " />
896+ < label class ="form-check-label " for ="user_misc_2 "> Bar</ label >
897+ < div class ="invalid-feedback " id ="user_misc_feedback "> a box must be checked</ div >
898+ </ div >
899+ </ div >
900+ </ form>
901+ HTML
902+
903+ actual = bootstrap_form_for ( @user ) do |f |
904+ f . collection_check_boxes ( :misc , collection , :id , :street , { id : "custom-id" } )
905+ end
906+
907+ assert_equivalent_html expected , actual
908+ end
909+
825910 test "collection_check_boxes renders data attributes" do
826911 collection = [
827912 [ "1" , "Foo" , { "data-city" : "east" } ] ,
@@ -853,13 +938,13 @@ class BootstrapLegacyCollectionCheckboxesTest < ActionView::TestCase
853938 < div class ="mb-3 ">
854939 < label class ="form-label " for ="user_misc "> Misc</ label >
855940 < div class ="form-check ">
856- < input checked ="checked " class ="form-check-input is-invalid " id ="user_misc_1 " name ="user[misc][] " type ="checkbox " value ="1 " />
941+ < input checked ="checked " class ="form-check-input is-invalid " id ="user_misc_1 " aria-labelledby =" user_misc_feedback " name ="user[misc][] " type ="checkbox " value ="1 " />
857942 < label class ="form-check-label " for ="user_misc_1 "> Foo</ label >
858943 </ div >
859944 < div class ="form-check ">
860- < input checked ="checked " class ="form-check-input is-invalid " id ="user_misc_2 " name ="user[misc][] " type ="checkbox " value ="2 " />
945+ < input checked ="checked " class ="form-check-input is-invalid " id ="user_misc_2 " aria-labelledby =" user_misc_feedback " name ="user[misc][] " type ="checkbox " value ="2 " />
861946 < label class ="form-check-label " for ="user_misc_2 "> Bar</ label >
862- < div class ="invalid-feedback "> error for test</ div >
947+ < div class ="invalid-feedback " id =" user_misc_feedback " > error for test</ div >
863948 </ div >
864949 </ div >
865950 </ form>
@@ -870,4 +955,31 @@ class BootstrapLegacyCollectionCheckboxesTest < ActionView::TestCase
870955 end
871956 assert_equivalent_html expected , actual
872957 end
958+
959+ test "collection_check_boxes renders multiple check boxes with error correctly with specified id:" do
960+ @user . errors . add ( :misc , "error for test" )
961+ collection = [ Address . new ( id : 1 , street : "Foo" ) , Address . new ( id : 2 , street : "Bar" ) ]
962+ expected = <<~HTML
963+ < form accept-charset ="UTF-8 " action ="/users " class ="new_user " id ="new_user " method ="post ">
964+ < input #{ autocomplete_attr_55336 } id="user_misc" name="user[misc][]" type="hidden" value="" />
965+ < div class ="mb-3 ">
966+ < label class ="form-label " for ="user_misc "> Misc</ label >
967+ < div class ="form-check ">
968+ < input checked ="checked " class ="form-check-input is-invalid " id ="user_misc_1 " aria-labelledby ="user_misc_feedback " name ="user[misc][] " type ="checkbox " value ="1 " />
969+ < label class ="form-check-label " for ="user_misc_1 "> Foo</ label >
970+ </ div >
971+ < div class ="form-check ">
972+ < input checked ="checked " class ="form-check-input is-invalid " id ="user_misc_2 " aria-labelledby ="user_misc_feedback " name ="user[misc][] " type ="checkbox " value ="2 " />
973+ < label class ="form-check-label " for ="user_misc_2 "> Bar</ label >
974+ < div class ="invalid-feedback " id ="user_misc_feedback "> error for test</ div >
975+ </ div >
976+ </ div >
977+ </ form>
978+ HTML
979+
980+ actual = bootstrap_form_for ( @user ) do |f |
981+ f . collection_check_boxes ( :misc , collection , :id , :street , checked : collection , id : "custom-id" )
982+ end
983+ assert_equivalent_html expected , actual
984+ end
873985end
0 commit comments