-
Notifications
You must be signed in to change notification settings - Fork 1.3k
/
boolean_input_test.rb
140 lines (117 loc) · 5.49 KB
/
boolean_input_test.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
# encoding: UTF-8
require 'test_helper'
class BooleanInputTest < ActionView::TestCase
test 'input should generate a checkbox by default for boolean attributes' do
with_input_for @user, :active, :boolean
assert_select 'input[type=checkbox].boolean#user_active'
assert_select 'label.boolean.optional', 'Active'
end
test 'input does not generate the label with the checkbox when label option is false' do
with_input_for @user, :active, :boolean, label: false
assert_select 'input[type=checkbox].boolean#user_active'
assert_no_select 'label'
end
test 'input uses custom checked value' do
@user.action = 'on'
with_input_for @user, :action, :boolean, checked_value: 'on', unchecked_value: 'off'
assert_select 'input[type=checkbox][value=on][checked=checked]'
end
test 'input uses custom unchecked value' do
@user.action = 'off'
with_input_for @user, :action, :boolean, checked_value: 'on', unchecked_value: 'off'
assert_select 'input[type=checkbox][value=on]'
assert_no_select 'input[checked=checked][value=on]'
end
test 'input generates hidden input with custom unchecked value' do
with_input_for @user, :action, :boolean, checked_value: 'on', unchecked_value: 'off'
assert_select 'input[type=hidden][value=off]'
end
test 'input uses inline boolean style by default' do
with_input_for @user, :active, :boolean
assert_select 'input.boolean + label.boolean.optional'
assert_no_select 'label > input'
end
test 'input allows changing default boolean style config to nested, generating a default label and a manual hidden field for checkbox' do
swap SimpleForm, boolean_style: :nested do
with_input_for @user, :active, :boolean
assert_select 'label[for=user_active]', 'Active'
assert_select 'label.boolean > input.boolean'
assert_no_select 'input[type=checkbox] + label'
end
end
test 'input boolean with nested allows :inline_label' do
swap SimpleForm, boolean_style: :nested do
with_input_for @user, :active, :boolean, label: false, inline_label: 'I am so inline.'
assert_select 'label.checkbox', text: 'I am so inline.'
end
end
test 'input boolean with nested style creates an inline label using the default label text when inline_label option set to true' do
swap SimpleForm, boolean_style: :nested do
with_input_for @user, :active, :boolean, label: false, inline_label: true
assert_select 'label.checkbox', text: 'Active'
end
end
test 'input boolean with nested generates a manual hidden field for checkbox outside the label, to recreate Rails functionality with valid html5' do
swap SimpleForm, boolean_style: :nested do
with_input_for @user, :active, :boolean
assert_select "input[type=hidden][name='user[active]'] + label.boolean > input.boolean"
assert_no_select 'input[type=checkbox] + label'
end
end
test 'input boolean with nested generates a disabled hidden field for checkbox outside the label, if the field is disabled' do
swap SimpleForm, boolean_style: :nested do
with_input_for @user, :active, :boolean, disabled: true
assert_select "input[type=hidden][name='user[active]'][disabled] + label.boolean > input.boolean[disabled]"
end
end
test 'input accepts changing boolean style to nested through given options' do
with_input_for @user, :active, :boolean, boolean_style: :nested
assert_select 'label[for=user_active]', 'Active'
assert_select 'label.boolean > input.boolean'
assert_no_select 'input[type=checkbox] + label'
end
test 'input accepts changing boolean style to inline through given options, when default is nested' do
swap SimpleForm, boolean_style: :nested do
with_input_for @user, :active, :boolean, boolean_style: :inline
assert_select 'label[for=user_active]', 'Active'
assert_select 'input.boolean + label.boolean'
assert_no_select 'label > input'
end
end
test 'input with nested style allows disabling label' do
swap SimpleForm, boolean_style: :nested do
with_input_for @user, :active, :boolean, label: false
assert_select 'input.boolean'
assert_no_select 'label.boolean'
end
end
test 'input with nested style allows customizing input_html' do
swap SimpleForm, boolean_style: :nested do
with_input_for @user, :active, :boolean, input_html: { name: 'active_user' }
assert_select "input[type=hidden][name=active_user] + label.boolean > input.boolean[name=active_user]"
end
end
test 'input boolean works using :input only in wrapper config (no label_input)' do
swap_wrapper do
with_input_for @user, :active, :boolean
assert_select 'label.boolean + input[type=hidden] + input.boolean'
assert_no_select 'label.checkbox'
end
end
test 'input boolean with nested style works using :input only in wrapper config (no label_input), adding the extra "checkbox" label wrapper' do
swap_wrapper do
swap SimpleForm, boolean_style: :nested do
with_input_for @user, :active, :boolean
assert_select 'label.boolean + input[type=hidden] + label.checkbox > input.boolean'
end
end
end
test 'input boolean with nested style works using :label_input in wrapper config, adding "checkbox" class to label' do
swap_wrapper :default, self.custom_wrapper_without_top_level do
swap SimpleForm, boolean_style: :nested do
with_input_for @user, :active, :boolean
assert_select 'input[type=hidden] + label.boolean.checkbox > input.boolean'
end
end
end
end