-
Notifications
You must be signed in to change notification settings - Fork 351
/
Copy pathbootstrap_other_components_test.rb
202 lines (171 loc) · 7.81 KB
/
bootstrap_other_components_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
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
require_relative "test_helper"
class BootstrapOtherComponentsTest < ActionView::TestCase
include BootstrapForm::ActionViewExtensions::FormHelper
setup :setup_test_fixture
test "static control" do
output = @horizontal_builder.static_control :email, extra: "extra arg"
expected = <<~HTML
<div class="mb-3 row">
<label class="col-form-label col-sm-2 required" for="user_email">Email</label>
<div class="col-sm-10">
<input required="required" class="form-control-plaintext" id="user_email" extra="extra arg" name="user[email]" readonly="readonly" type="text" value="[email protected]"/>
</div>
</div>
HTML
assert_equivalent_html expected, output
end
test "static control can have custom_id" do
output = @horizontal_builder.static_control :email, id: "custom_id"
expected = <<~HTML
<div class="mb-3 row">
<label class="col-form-label col-sm-2 required" for="custom_id">Email</label>
<div class="col-sm-10">
<input required="required" class="form-control-plaintext" id="custom_id" name="user[email]" readonly="readonly" type="text" value="[email protected]"/>
</div>
</div>
HTML
assert_equivalent_html expected, output
end
test "static control doesn't require an actual attribute" do
output = @horizontal_builder.static_control nil, label: "My Label", value: "this is a test"
expected = <<~HTML
<div class="mb-3 row">
<label class="col-form-label col-sm-2" for="user_">My Label</label>
<div class="col-sm-10">
<input class="form-control-plaintext" id="user_" name="user[]" readonly="readonly" type="text" value="this is a test"/>
</div>
</div>
HTML
assert_equivalent_html expected, output
end
test "static control doesn't require a name" do
output = @horizontal_builder.static_control label: "Custom Label", value: "Custom Control"
expected = <<~HTML
<div class="mb-3 row">
<label class="col-form-label col-sm-2" for="user_">Custom Label</label>
<div class="col-sm-10">
<input class="form-control-plaintext" id="user_" name="user[]" readonly="readonly" type="text" value="Custom Control"/>
</div>
</div>
HTML
assert_equivalent_html expected, output
end
test "static control support a nil value" do
output = @horizontal_builder.static_control label: "Custom Label", value: nil
expected = <<~HTML
<div class="mb-3 row">
<label class="col-form-label col-sm-2" for="user_">Custom Label</label>
<div class="col-sm-10">
<input class="form-control-plaintext" id="user_" name="user[]" readonly="readonly" type="text"/>
</div>
</div>
HTML
assert_equivalent_html expected, output
end
test "static control won't overwrite a control_class that is passed by the user" do
output = @horizontal_builder.static_control :email, control_class: "test_class"
expected = <<~HTML
<div class="mb-3 row">
<label class="col-form-label col-sm-2 required" for="user_email">Email</label>
<div class="col-sm-10">
<input required="required" class="test_class form-control-plaintext" id="user_email" name="user[email]" readonly="readonly" type="text" value="[email protected]"/>
</div>
</div>
HTML
assert_equivalent_html expected, output
end
test "custom control doesn't wrap given block in a p tag" do
output = @horizontal_builder.custom_control :email, extra: "extra arg" do
"this is a test"
end
expected = <<~HTML
<div class="mb-3 row">
<label class="col-form-label col-sm-2 required" for="user_email">Email</label>
<div class="col-sm-10">this is a test</div>
</div>
HTML
assert_equivalent_html expected, output
end
test "custom control doesn't require an actual attribute" do
output = @horizontal_builder.custom_control nil, label: "My Label" do
"this is a test"
end
expected = <<~HTML
<div class="mb-3 row">
<label class="col-form-label col-sm-2" for="user_">My Label</label>
<div class="col-sm-10">this is a test</div>
</div>
HTML
assert_equivalent_html expected, output
end
test "custom control doesn't require a name" do
output = @horizontal_builder.custom_control label: "Custom Label" do
"Custom Control"
end
expected = <<~HTML
<div class="mb-3 row">
<label class="col-form-label col-sm-2" for="user_">Custom Label</label>
<div class="col-sm-10">Custom Control</div>
</div>
HTML
assert_equivalent_html expected, output
end
test "regular button uses proper css classes" do
expected = <<~HTML
<button class="btn btn-secondary" extra="extra arg" name="button" type="submit"><span>I'm HTML!</span> in a button!</button>
HTML
assert_equivalent_html expected,
@builder.button(
"<span>I'm HTML!</span> in a button!".html_safe,
extra: "extra arg"
)
end
test "regular button can have extra css classes" do
expected = <<~HTML
<button class="btn btn-secondary test-button" name="button" type="submit"><span>I'm HTML!</span> in a button!</button>
HTML
assert_equivalent_html expected,
@builder.button("<span>I'm HTML!</span> in a button!".html_safe, extra_class: "test-button")
end
test "submit button defaults to rails action name" do
expected = '<input class="btn btn-secondary" name="commit" type="submit" value="Create User" />'
assert_equivalent_html expected, @builder.submit
end
test "submit button uses default button classes" do
expected = '<input class="btn btn-secondary" name="commit" type="submit" value="Submit Form" />'
assert_equivalent_html expected, @builder.submit("Submit Form")
end
test "submit button can have extra css classes" do
expected = '<input class="btn btn-secondary test-button" name="commit" type="submit" value="Submit Form" />'
assert_equivalent_html expected, @builder.submit("Submit Form", extra_class: "test-button")
end
test "override submit button classes" do
expected = '<input class="btn btn-primary" name="commit" type="submit" value="Submit Form" />'
assert_equivalent_html expected, @builder.submit("Submit Form", class: "btn btn-primary")
end
test "primary button uses proper css classes" do
expected = '<input class="btn btn-primary" extra="extra arg" name="commit" type="submit" value="Submit Form" />'
assert_equivalent_html expected, @builder.primary("Submit Form", extra: "extra arg")
end
test "primary button can have extra css classes" do
expected = '<input class="btn btn-primary test-button" name="commit" type="submit" value="Submit Form" />'
assert_equivalent_html expected, @builder.primary("Submit Form", extra_class: "test-button")
end
test "primary button can render as HTML button" do
expected = %q(<button class="btn btn-primary" name="button" type="submit"><span>I'm HTML!</span> Submit Form</button>)
assert_equivalent_html expected,
@builder.primary("<span>I'm HTML!</span> Submit Form".html_safe,
render_as_button: true)
end
test "primary button with content block renders as HTML button" do
output = @builder.primary do
"<span>I'm HTML!</span> Submit Form".html_safe
end
expected = %q(<button class="btn btn-primary" name="button" type="submit"><span>I'm HTML!</span> Submit Form</button>)
assert_equivalent_html expected, output
end
test "override primary button classes" do
expected = '<input class="btn btn-primary disabled" name="commit" type="submit" value="Submit Form" />'
assert_equivalent_html expected, @builder.primary("Submit Form", class: "btn btn-primary disabled")
end
end