Skip to content

Commit 8385ae9

Browse files
committed
Test for custom ID
1 parent 3530be9 commit 8385ae9

5 files changed

Lines changed: 210 additions & 0 deletions

test/bootstrap_checkbox_test.rb

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -209,6 +209,26 @@ class BootstrapCheckboxTest < ActionView::TestCase
209209
assert_equivalent_html expected, actual
210210
end
211211

212+
test "check_box renders error when asked with specified id:" do
213+
@user.errors.add(:terms, "You must accept the terms.")
214+
expected = <<~HTML
215+
<form accept-charset="UTF-8" action="/users" class="new_user" id="new_user" method="post">
216+
<div class="form-check mb-3">
217+
<input #{autocomplete_attr} name="user[terms]" type="hidden" value="0" />
218+
<input class="form-check-input is-invalid" id="custom-id" aria-labelledby="custom-id_feedback" name="user[terms]" type="checkbox" value="1" />
219+
<label class="form-check-label" for="custom-id">
220+
I agree to the terms
221+
</label>
222+
<div class="invalid-feedback" id="custom-id_feedback">You must accept the terms.</div>
223+
</div>
224+
</form>
225+
HTML
226+
actual = bootstrap_form_for(@user) do |f|
227+
f.check_box(:terms, label: "I agree to the terms", error_message: true, id: "custom-id")
228+
end
229+
assert_equivalent_html expected, actual
230+
end
231+
212232
test "check box with custom wrapper class" do
213233
expected = <<~HTML
214234
<div class="form-check mb-3 custom-class">

test/bootstrap_fields_test.rb

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,20 @@ class BootstrapFieldsTest < ActionView::TestCase
101101
assert_equivalent_html expected, bootstrap_form_for(@user) { |f| f.file_field(:misc) }
102102
end
103103

104+
test "file fields are wrapped correctly with error with specified id:" do
105+
@user.errors.add(:misc, "error for test")
106+
expected = <<~HTML
107+
<form accept-charset="UTF-8" action="/users" class="new_user" enctype="multipart/form-data" id="new_user" method="post">
108+
<div class="mb-3">
109+
<label class="form-label" for="custom-id">Misc</label>
110+
<input class="form-control is-invalid" id="custom-id" aria-labelledby="custom-id_feedback" name="user[misc]" type="file"/>
111+
<div class="invalid-feedback" id="custom-id_feedback">error for test</div>
112+
</div>
113+
</form>
114+
HTML
115+
assert_equivalent_html expected, bootstrap_form_for(@user) { |f| f.file_field(:misc, id: "custom-id") }
116+
end
117+
104118
test "errors are correctly displayed for belongs_to association fields" do
105119
@address.valid?
106120

@@ -116,6 +130,21 @@ class BootstrapFieldsTest < ActionView::TestCase
116130
assert_equivalent_html expected, bootstrap_form_for(@address, url: users_path) { |f| f.text_field(:user_id) }
117131
end
118132

133+
test "errors are correctly displayed for belongs_to association fields with specified id:" do
134+
@address.valid?
135+
136+
expected = <<~HTML
137+
<form accept-charset="UTF-8" action="/users" class="new_address" id="new_address" method="post">
138+
<div class="mb-3">
139+
<label class="form-label required" for="custom-id">User</label>
140+
<input class="form-control is-invalid" id="custom-id" aria-labelledby="custom-id_feedback" name="address[user_id]" required="required" type="text"/>
141+
<div class="invalid-feedback" id="custom-id_feedback">must exist</div>
142+
</div>
143+
</form>
144+
HTML
145+
assert_equivalent_html expected, bootstrap_form_for(@address, url: users_path) { |f| f.text_field(:user_id, id: "custom-id") }
146+
end
147+
119148
test "hidden fields are supported" do
120149
expected = <<~HTML
121150
<input #{autocomplete_attr_55336} id="user_misc" name="user[misc]" type="hidden" />

test/bootstrap_form_test.rb

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -466,6 +466,21 @@ def warn(message, ...)
466466
assert_equivalent_html expected, bootstrap_form_for(@user, label_errors: true) { |f| f.text_field :email }
467467
end
468468

469+
test "errors display correctly and inline_errors are turned off by default when label_errors is true with specified id:" do
470+
@user.email = nil
471+
assert @user.invalid?
472+
473+
expected = <<~HTML
474+
<form accept-charset="UTF-8" action="/users" class="new_user" id="new_user" method="post">
475+
<div class="mb-3">
476+
<label class="form-label required text-danger" for="custom-id" id="custom-id_feedback">Email can't be blank, is too short (minimum is 5 characters)</label>
477+
<input required="required" class="form-control is-invalid" id="custom-id" aria-labelledby="custom-id_feedback" name="user[email]" type="text" />
478+
</div>
479+
</form>
480+
HTML
481+
assert_equivalent_html expected, bootstrap_form_for(@user, label_errors: true) { |f| f.text_field :email, id: "custom-id" }
482+
end
483+
469484
test "errors display correctly and inline_errors can also be on when label_errors is true" do
470485
@user.email = nil
471486
assert @user.invalid?
@@ -482,6 +497,24 @@ def warn(message, ...)
482497
assert_equivalent_html expected, bootstrap_form_for(@user, label_errors: true, inline_errors: true) { |f| f.text_field :email }
483498
end
484499

500+
test "errors display correctly and inline_errors can also be on when label_errors is true with specified id:" do
501+
@user.email = nil
502+
assert @user.invalid?
503+
504+
expected = <<~HTML
505+
<form accept-charset="UTF-8" action="/users" class="new_user" id="new_user" method="post">
506+
<div class="mb-3">
507+
<label class="form-label required text-danger" for="custom-id" id="custom-id_feedback">Email can't be blank, is too short (minimum is 5 characters)</label>
508+
<input required="required" class="form-control is-invalid" id="custom-id" aria-labelledby="custom-id_feedback" name="user[email]" type="text" />
509+
<div class="invalid-feedback" id="custom-id_feedback">can't be blank, is too short (minimum is 5 characters)</span>
510+
</div>
511+
</form>
512+
HTML
513+
assert_equivalent_html expected, bootstrap_form_for(@user, label_errors: true, inline_errors: true) { |f|
514+
f.text_field :email, id: "custom-id"
515+
}
516+
end
517+
485518
test "label error messages use humanized attribute names" do
486519
I18n.backend.store_translations(:en, activerecord: { attributes: { user: { email: "Your e-mail address" } } })
487520

@@ -502,6 +535,28 @@ def warn(message, ...)
502535
I18n.backend.store_translations(:en, activerecord: { attributes: { user: { email: nil } } })
503536
end
504537

538+
test "label error messages use humanized attribute names with specified id:" do
539+
I18n.backend.store_translations(:en, activerecord: { attributes: { user: { email: "Your e-mail address" } } })
540+
541+
@user.email = nil
542+
assert @user.invalid?
543+
544+
expected = <<~HTML
545+
<form accept-charset="UTF-8" action="/users" class="new_user" id="new_user" method="post">
546+
<div class="mb-3">
547+
<label class="form-label required text-danger" for="custom-id"id="custom-id_feedback">Your e-mail address can't be blank, is too short (minimum is 5 characters)</label>
548+
<input required="required" class="form-control is-invalid" id="custom-id" aria-labelledby="custom-id_feedback" name="user[email]" type="text" />
549+
<div class="invalid-feedback" id="custom-id_feedback">can't be blank, is too short (minimum is 5 characters)</div>
550+
</div>
551+
</form>
552+
HTML
553+
assert_equivalent_html expected, bootstrap_form_for(@user, label_errors: true, inline_errors: true) { |f|
554+
f.text_field :email, id: "custom-id"
555+
}
556+
ensure
557+
I18n.backend.store_translations(:en, activerecord: { attributes: { user: { email: nil } } })
558+
end
559+
505560
test "alert message is wrapped correctly" do
506561
@user.email = nil
507562
assert @user.invalid?

test/bootstrap_radio_button_test.rb

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,25 @@ class BootstrapRadioButtonTest < ActionView::TestCase
4949
assert_equivalent_html expected, actual
5050
end
5151

52+
test "radio_button with error is wrapped correctly with specified id:" do
53+
@user.errors.add(:misc, "error for test")
54+
expected = <<~HTML
55+
<form accept-charset="UTF-8" action="/users" class="new_user" id="new_user" method="post">
56+
<div class="form-check">
57+
<input class="form-check-input is-invalid" id="custom-id" aria-labelledby="custom-id_feedback" name="user[misc]" type="radio" value="1" />
58+
<label class="form-check-label" for="custom-id">
59+
This is a radio button
60+
</label>
61+
<div class="invalid-feedback" id="custom-id_feedback">error for test</div>
62+
</div>
63+
</form>
64+
HTML
65+
actual = bootstrap_form_for(@user) do |f|
66+
f.radio_button(:misc, "1", label: "This is a radio button", error_message: true, id: "custom-id")
67+
end
68+
assert_equivalent_html expected, actual
69+
end
70+
5271
test "radio_button disabled label is set correctly" do
5372
expected = <<~HTML
5473
<div class="form-check disabled">

test/bootstrap_selects_test.rb

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -435,6 +435,32 @@ def options_range(start: 1, stop: 31, selected: nil, months: false)
435435
end
436436
end
437437

438+
test "date selects are wrapped correctly with error with specified id:" do
439+
@user.errors.add(:misc, "error for test")
440+
travel_to(Time.utc(2012, 2, 3)) do
441+
expected = <<~HTML
442+
<form accept-charset="UTF-8" action="/users" class="new_user" id="new_user" method="post">
443+
<div class="mb-3">
444+
<label class="form-label" for="user_misc">Misc</label>
445+
<div class="rails-bootstrap-forms-date-select">
446+
<select class="form-select is-invalid" id="user_misc_1i" aria-labelledby="user_misc_feedback" name="user[misc(1i)]">
447+
#{options_range(start: 2007, stop: 2017, selected: 2012)}
448+
</select>
449+
<select class="form-select is-invalid" id="user_misc_2i" aria-labelledby="user_misc_feedback" name="user[misc(2i)]">
450+
#{options_range(start: 1, stop: 12, selected: 2, months: true)}
451+
</select>
452+
<select class="form-select is-invalid" id="user_misc_3i" aria-labelledby="user_misc_feedback" name="user[misc(3i)]">
453+
#{options_range(start: 1, stop: 31, selected: 3)}
454+
</select>
455+
<div class="invalid-feedback" id="user_misc_feedback">error for test</div>
456+
</div>
457+
</div>
458+
</form>
459+
HTML
460+
assert_equivalent_html expected, bootstrap_form_for(@user) { |f| f.date_select(:misc, id: "custom-id") }
461+
end
462+
end
463+
438464
test "date selects with options are wrapped correctly" do
439465
travel_to(Time.utc(2012, 2, 3)) do
440466
expected = <<~HTML
@@ -536,6 +562,33 @@ def options_range(start: 1, stop: 31, selected: nil, months: false)
536562
end
537563
end
538564

565+
test "time selects are wrapped correctly with error with specified id:" do
566+
@user.errors.add(:misc, "error for test")
567+
travel_to(Time.utc(2012, 2, 3, 12, 0, 0)) do
568+
expected = <<~HTML
569+
<form accept-charset="UTF-8" action="/users" class="new_user" id="new_user" method="post">
570+
<div class="mb-3">
571+
<label class="form-label" for="user_misc">Misc</label>
572+
<div class="rails-bootstrap-forms-time-select">
573+
<input #{autocomplete_attr_time_selects} id="user_misc_1i" name="user[misc(1i)]" type="hidden" value="2012" />
574+
<input #{autocomplete_attr_time_selects} id="user_misc_2i" name="user[misc(2i)]" type="hidden" value="2" />
575+
<input #{autocomplete_attr_time_selects} id="user_misc_3i" name="user[misc(3i)]" type="hidden" value="3" />
576+
<select class="form-select is-invalid" id="user_misc_4i" aria-labelledby="user_misc_feedback" name="user[misc(4i)]">
577+
#{options_range(start: '00', stop: '23', selected: '12')}
578+
</select>
579+
:
580+
<select class="form-select is-invalid" id="user_misc_5i" aria-labelledby="user_misc_feedback" name="user[misc(5i)]">
581+
#{options_range(start: '00', stop: '59', selected: '00')}
582+
</select>
583+
<div class="invalid-feedback" id="user_misc_feedback">error for test</div>
584+
</div>
585+
</div>
586+
</form>
587+
HTML
588+
assert_equivalent_html expected, bootstrap_form_for(@user) { |f| f.time_select(:misc, id: "custom-id") }
589+
end
590+
end
591+
539592
test "time selects with options are wrapped correctly" do
540593
travel_to(Time.utc(2012, 2, 3, 12, 0, 0)) do
541594
expected = <<~HTML
@@ -650,6 +703,40 @@ def options_range(start: 1, stop: 31, selected: nil, months: false)
650703
end
651704
end
652705

706+
test "datetime selects are wrapped correctly with error with specified id:" do
707+
@user.errors.add(:misc, "error for test")
708+
travel_to(Time.utc(2012, 2, 3, 12, 0, 0)) do
709+
expected = <<~HTML
710+
<form accept-charset="UTF-8" action="/users" class="new_user" id="new_user" method="post">
711+
<div class="mb-3">
712+
<label class="form-label" for="user_misc">Misc</label>
713+
<div class="rails-bootstrap-forms-datetime-select">
714+
<select class="form-select is-invalid" id="user_misc_1i" aria-labelledby="user_misc_feedback" name="user[misc(1i)]">
715+
#{options_range(start: 2007, stop: 2017, selected: 2012)}
716+
</select>
717+
<select class="form-select is-invalid" id="user_misc_2i" aria-labelledby="user_misc_feedback" name="user[misc(2i)]">
718+
#{options_range(start: 1, stop: 12, selected: 2, months: true)}
719+
</select>
720+
<select class="form-select is-invalid" id="user_misc_3i" aria-labelledby="user_misc_feedback" name="user[misc(3i)]">
721+
#{options_range(start: 1, stop: 31, selected: 3)}
722+
</select>
723+
&mdash;
724+
<select class="form-select is-invalid" id="user_misc_4i" aria-labelledby="user_misc_feedback" name="user[misc(4i)]">
725+
#{options_range(start: '00', stop: '23', selected: '12')}
726+
</select>
727+
:
728+
<select class="form-select is-invalid" id="user_misc_5i" aria-labelledby="user_misc_feedback" name="user[misc(5i)]">
729+
#{options_range(start: '00', stop: '59', selected: '00')}
730+
</select>
731+
<div class="invalid-feedback" id="user_misc_feedback">error for test</div>
732+
</div>
733+
</div>
734+
</form>
735+
HTML
736+
assert_equivalent_html expected, bootstrap_form_for(@user) { |f| f.datetime_select(:misc, id: "custom-id") }
737+
end
738+
end
739+
653740
test "datetime selects with options are wrapped correctly" do
654741
travel_to(Time.utc(2012, 2, 3, 12, 0, 0)) do
655742
expected = <<~HTML

0 commit comments

Comments
 (0)