foundation_rails_helper 1.2.2 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +19 -0
- data/.rubocop_todo.yml +67 -0
- data/.travis.yml +0 -3
- data/CHANGELOG.md +9 -0
- data/README.md +2 -0
- data/Rakefile +4 -2
- data/foundation_rails_helper.gemspec +12 -11
- data/lib/foundation_rails_helper.rb +5 -5
- data/lib/foundation_rails_helper/action_view_extension.rb +1 -1
- data/lib/foundation_rails_helper/flash_helper.rb +11 -12
- data/lib/foundation_rails_helper/form_builder.rb +53 -36
- data/lib/foundation_rails_helper/version.rb +1 -1
- data/lib/railtie.rb +2 -3
- data/spec/.rubocop.yml +7 -0
- data/spec/foundation_rails_helper/configuration_spec.rb +6 -8
- data/spec/foundation_rails_helper/flash_helper_spec.rb +23 -23
- data/spec/foundation_rails_helper/form_builder_spec.rb +154 -156
- data/spec/spec_helper.rb +1 -1
- data/spec/support/.rubocop.yml +2 -0
- data/spec/support/mock_rails.rb +22 -15
- metadata +21 -2
data/lib/railtie.rb
CHANGED
data/spec/.rubocop.yml
ADDED
@@ -1,20 +1,19 @@
|
|
1
|
-
require
|
1
|
+
require "spec_helper"
|
2
2
|
|
3
3
|
describe FoundationRailsHelper do
|
4
|
-
|
5
4
|
describe FoundationRailsHelper::Configuration do
|
6
5
|
describe "#button_class" do
|
7
6
|
it "default value is 'small radius success button'" do
|
8
7
|
config = FoundationRailsHelper::Configuration.new
|
9
|
-
expect(config.button_class).to eq(
|
8
|
+
expect(config.button_class).to eq("small radius success button")
|
10
9
|
end
|
11
10
|
end
|
12
11
|
|
13
12
|
describe "#button_class=" do
|
14
13
|
it "can set value" do
|
15
14
|
config = FoundationRailsHelper::Configuration.new
|
16
|
-
config.button_class =
|
17
|
-
expect(config.button_class).to eq(
|
15
|
+
config.button_class = "new-class"
|
16
|
+
expect(config.button_class).to eq("new-class")
|
18
17
|
end
|
19
18
|
end
|
20
19
|
|
@@ -36,13 +35,13 @@ describe FoundationRailsHelper do
|
|
36
35
|
describe ".reset" do
|
37
36
|
it "resets the configured button class" do
|
38
37
|
FoundationRailsHelper.configure do |config|
|
39
|
-
config.button_class =
|
38
|
+
config.button_class = "new-class"
|
40
39
|
end
|
41
40
|
|
42
41
|
FoundationRailsHelper.reset
|
43
42
|
|
44
43
|
config = FoundationRailsHelper.configuration
|
45
|
-
expect(config.button_class).to eq(
|
44
|
+
expect(config.button_class).to eq("small radius success button")
|
46
45
|
end
|
47
46
|
|
48
47
|
it "resets the configured ignored flash keys" do
|
@@ -57,5 +56,4 @@ describe FoundationRailsHelper do
|
|
57
56
|
end
|
58
57
|
end
|
59
58
|
end
|
60
|
-
|
61
59
|
end
|
@@ -11,50 +11,50 @@ describe FoundationRailsHelper::FlashHelper do
|
|
11
11
|
|
12
12
|
FoundationRailsHelper::FlashHelper::DEFAULT_KEY_MATCHING.each do |message_type, foundation_type|
|
13
13
|
it "displays flash message with #{foundation_type} class for #{message_type} message" do
|
14
|
-
allow(self).to receive(:flash).and_return(
|
14
|
+
allow(self).to receive(:flash).and_return(message_type.to_s => "Flash message")
|
15
15
|
node = Capybara.string display_flash_messages
|
16
|
-
expect(node)
|
17
|
-
to have_css("div.alert-box.#{foundation_type}", :
|
18
|
-
and have_css("div.alert-box a.close", :
|
16
|
+
expect(node)
|
17
|
+
.to have_css("div.alert-box.#{foundation_type}", text: "Flash message")
|
18
|
+
.and have_css("div.alert-box a.close", text: "×")
|
19
19
|
end
|
20
20
|
end
|
21
21
|
|
22
22
|
it "handles symbol keys" do
|
23
|
-
allow(self).to receive(:flash).and_return(
|
23
|
+
allow(self).to receive(:flash).and_return(success: "Flash message")
|
24
24
|
node = Capybara.string display_flash_messages
|
25
|
-
expect(node).to have_css("div.alert-box.success", :
|
25
|
+
expect(node).to have_css("div.alert-box.success", text: "Flash message")
|
26
26
|
end
|
27
27
|
|
28
28
|
it "handles string keys" do
|
29
|
-
allow(self).to receive(:flash).and_return(
|
29
|
+
allow(self).to receive(:flash).and_return("success" => "Flash message")
|
30
30
|
node = Capybara.string display_flash_messages
|
31
|
-
expect(node).to have_css("div.alert-box.success", :
|
31
|
+
expect(node).to have_css("div.alert-box.success", text: "Flash message")
|
32
32
|
end
|
33
33
|
|
34
34
|
it "displays multiple flash messages" do
|
35
|
-
allow(self).to receive(:flash).and_return(
|
35
|
+
allow(self).to receive(:flash).and_return("success" => "Yay it worked", "error" => "But this other thing failed")
|
36
36
|
node = Capybara.string display_flash_messages
|
37
|
-
expect(node)
|
38
|
-
to have_css("div.alert-box.success", :
|
39
|
-
and have_css("div.alert-box.alert", :
|
37
|
+
expect(node)
|
38
|
+
.to have_css("div.alert-box.success", text: "Yay it worked")
|
39
|
+
.and have_css("div.alert-box.alert", text: "But this other thing failed")
|
40
40
|
end
|
41
41
|
|
42
42
|
it "displays flash message with overridden key matching" do
|
43
|
-
allow(self).to receive(:flash).and_return(
|
44
|
-
node = Capybara.string display_flash_messages(
|
45
|
-
expect(node).to have_css("div.alert-box.alert", :
|
43
|
+
allow(self).to receive(:flash).and_return("notice" => "Flash message")
|
44
|
+
node = Capybara.string display_flash_messages(notice: :alert)
|
45
|
+
expect(node).to have_css("div.alert-box.alert", text: "Flash message")
|
46
46
|
end
|
47
47
|
|
48
48
|
it "displays flash message with custom key matching" do
|
49
|
-
allow(self).to receive(:flash).and_return(
|
50
|
-
node = Capybara.string display_flash_messages(
|
51
|
-
expect(node).to have_css("div.alert-box.custom_class", :
|
49
|
+
allow(self).to receive(:flash).and_return("custom_type" => "Flash message")
|
50
|
+
node = Capybara.string display_flash_messages(custom_type: :custom_class)
|
51
|
+
expect(node).to have_css("div.alert-box.custom_class", text: "Flash message")
|
52
52
|
end
|
53
53
|
|
54
54
|
it "displays flash message with standard class if key doesn't match" do
|
55
|
-
allow(self).to receive(:flash).and_return(
|
55
|
+
allow(self).to receive(:flash).and_return("custom_type" => "Flash message")
|
56
56
|
node = Capybara.string display_flash_messages
|
57
|
-
expect(node).to have_css("div.alert-box.standard", :
|
57
|
+
expect(node).to have_css("div.alert-box.standard", text: "Flash message")
|
58
58
|
end
|
59
59
|
|
60
60
|
context "when the flash hash contains devise internal data" do
|
@@ -65,12 +65,12 @@ describe FoundationRailsHelper::FlashHelper do
|
|
65
65
|
end
|
66
66
|
|
67
67
|
it "doesn't raise an error (e.g. NoMethodError)" do
|
68
|
-
allow(self).to receive(:flash).and_return(
|
69
|
-
expect{ Capybara.string display_flash_messages }.not_to raise_error
|
68
|
+
allow(self).to receive(:flash).and_return("timedout" => true)
|
69
|
+
expect { Capybara.string display_flash_messages }.not_to raise_error
|
70
70
|
end
|
71
71
|
|
72
72
|
it "doesn't display an alert for that data" do
|
73
|
-
allow(self).to receive(:flash).and_return(
|
73
|
+
allow(self).to receive(:flash).and_return("timedout" => true)
|
74
74
|
expect(display_flash_messages).to be_nil
|
75
75
|
|
76
76
|
# Ideally we'd create a node using Capybara.string, as in the other examples
|
@@ -7,7 +7,7 @@ describe "FoundationRailsHelper::FormHelper" do
|
|
7
7
|
mock_everything
|
8
8
|
end
|
9
9
|
|
10
|
-
it
|
10
|
+
it "should have FoundationRailsHelper::FormHelper as default buidler" do
|
11
11
|
form_for(@author) do |builder|
|
12
12
|
expect(builder.class).to eq FoundationRailsHelper::FormBuilder
|
13
13
|
end
|
@@ -16,42 +16,42 @@ describe "FoundationRailsHelper::FormHelper" do
|
|
16
16
|
it "should display labels by default" do
|
17
17
|
form_for(@author) do |builder|
|
18
18
|
node = Capybara.string builder.text_field(:login)
|
19
|
-
expect(node).to have_css('label[for="author_login"]', :
|
19
|
+
expect(node).to have_css('label[for="author_login"]', text: "Login")
|
20
20
|
end
|
21
21
|
end
|
22
22
|
|
23
23
|
it "should display labels if auto_labels: true is set" do
|
24
24
|
form_for(@author, auto_labels: true) do |builder|
|
25
25
|
node = Capybara.string builder.text_field(:login)
|
26
|
-
expect(node).to have_css('label[for="author_login"]', :
|
26
|
+
expect(node).to have_css('label[for="author_login"]', text: "Login")
|
27
27
|
end
|
28
28
|
end
|
29
29
|
|
30
|
-
it "should display labels if there are options without auto_labels: false" do
|
31
|
-
form_for(@author,
|
30
|
+
it "should not display labels by if there are options without auto_labels: false" do
|
31
|
+
form_for(@author, html: { class: "myclass" }) do |builder|
|
32
32
|
node = Capybara.string builder.text_field(:login)
|
33
|
-
expect(node).to have_css('label[for="author_login"]', :
|
33
|
+
expect(node).to have_css('label[for="author_login"]', text: "Login")
|
34
34
|
end
|
35
35
|
end
|
36
36
|
|
37
37
|
it "should not display labels if there are options with auto_labels: false" do
|
38
|
-
form_for(@author,
|
38
|
+
form_for(@author, html: { class: "myclass" }, auto_labels: false) do |builder|
|
39
39
|
node = Capybara.string builder.text_field(:login)
|
40
|
-
expect(node).to_not have_css('label[for="author_login"]', :
|
40
|
+
expect(node).to_not have_css('label[for="author_login"]', text: "Login")
|
41
41
|
end
|
42
42
|
end
|
43
43
|
|
44
44
|
it "should display labels if :auto_labels is set to nil" do
|
45
45
|
form_for(@author, auto_labels: nil) do |builder|
|
46
46
|
node = Capybara.string builder.text_field(:login)
|
47
|
-
expect(node).to have_css('label[for="author_login"]', :
|
47
|
+
expect(node).to have_css('label[for="author_login"]', text: "Login")
|
48
48
|
end
|
49
49
|
end
|
50
50
|
|
51
51
|
it "should display labels if :auto_labels is set to a string" do
|
52
52
|
form_for(@author, auto_labels: "false") do |builder|
|
53
53
|
node = Capybara.string builder.text_field(:login)
|
54
|
-
expect(node).to have_css('label[for="author_login"]', :
|
54
|
+
expect(node).to have_css('label[for="author_login"]', text: "Login")
|
55
55
|
end
|
56
56
|
end
|
57
57
|
|
@@ -67,9 +67,9 @@ describe "FoundationRailsHelper::FormHelper" do
|
|
67
67
|
|
68
68
|
it "should not have error class multiple times" do
|
69
69
|
form_for(@author) do |builder|
|
70
|
-
allow(@author).to receive(:errors).and_return(
|
70
|
+
allow(@author).to receive(:errors).and_return(login: ["required"])
|
71
71
|
node = Capybara.string builder.text_field(:login)
|
72
|
-
error_class = node.find(
|
72
|
+
error_class = node.find("label")["class"].split(/\s+/).keep_if { |v| v == "error" }
|
73
73
|
expect(error_class.size).to eq 1
|
74
74
|
end
|
75
75
|
end
|
@@ -79,32 +79,32 @@ describe "FoundationRailsHelper::FormHelper" do
|
|
79
79
|
context "when input field has a prefix" do
|
80
80
|
before do
|
81
81
|
form_for(@author) do |builder|
|
82
|
-
@node = Capybara.string builder.text_field(:login, :
|
82
|
+
@node = Capybara.string builder.text_field(:login, prefix: { small: 2, medium: 4, large: 6, value: "Prefix" })
|
83
83
|
end
|
84
84
|
end
|
85
85
|
|
86
86
|
it "wraps input in the div with class 'row collapse'" do
|
87
|
-
|
87
|
+
expect(@node.find(".row.collapse")).to_not be nil
|
88
88
|
end
|
89
89
|
|
90
90
|
it "wraps prefix in the div with the right column size" do
|
91
|
-
expect(@node.find(
|
91
|
+
expect(@node.find(".row.collapse")).to have_css("div.small-2.medium-4.large-6.columns")
|
92
92
|
end
|
93
93
|
|
94
94
|
it "creates prefix span with right value" do
|
95
|
-
expect(@node.find(
|
95
|
+
expect(@node.find(".row.collapse").find("div.small-2.medium-4.large-6.columns").find("span").text).to eq "Prefix"
|
96
96
|
end
|
97
97
|
|
98
98
|
it "creates prefix span with right class" do
|
99
|
-
expect(@node.find(
|
99
|
+
expect(@node.find(".row.collapse")).to have_css("span.prefix")
|
100
100
|
end
|
101
101
|
|
102
102
|
it "wraps input in the div with the right column size" do
|
103
|
-
expect(@node.find(
|
103
|
+
expect(@node.find(".row.collapse")).to have_css("div.small-10.medium-8.large-6.columns")
|
104
104
|
end
|
105
105
|
|
106
106
|
it "has right value for the input" do
|
107
|
-
expect(@node.find(
|
107
|
+
expect(@node.find(".row.collapse").find("div.small-10.medium-8.large-6.columns")).to have_css('input[type="text"][name="author[login]"]')
|
108
108
|
end
|
109
109
|
end
|
110
110
|
|
@@ -112,7 +112,7 @@ describe "FoundationRailsHelper::FormHelper" do
|
|
112
112
|
it "will not wrap input into a div" do
|
113
113
|
form_for(@author) do |builder|
|
114
114
|
node = Capybara.string builder.text_field(:login)
|
115
|
-
expect(node).to_not have_css(
|
115
|
+
expect(node).to_not have_css("div.row.collapse")
|
116
116
|
end
|
117
117
|
end
|
118
118
|
end
|
@@ -122,65 +122,65 @@ describe "FoundationRailsHelper::FormHelper" do
|
|
122
122
|
context "when input field has a postfix" do
|
123
123
|
before do
|
124
124
|
form_for(@author) do |builder|
|
125
|
-
@node = Capybara.string builder.text_field(:login, :
|
125
|
+
@node = Capybara.string builder.text_field(:login, postfix: { small: 2, medium: 4, large: 6, value: "Postfix" })
|
126
126
|
end
|
127
127
|
end
|
128
128
|
|
129
129
|
it "wraps input in the div with class 'row collapse'" do
|
130
|
-
|
130
|
+
expect(@node.find(".row.collapse")).to_not be nil
|
131
131
|
end
|
132
132
|
|
133
133
|
it "wraps postfix in the div with the right column size" do
|
134
|
-
expect(@node.find(
|
134
|
+
expect(@node.find(".row.collapse")).to have_css("div.small-2.medium-4.large-6.columns")
|
135
135
|
end
|
136
136
|
|
137
137
|
it "creates postfix span with right value" do
|
138
|
-
expect(@node.find(
|
138
|
+
expect(@node.find(".row.collapse").find("div.small-2.medium-4.large-6.columns").find("span").text).to eq "Postfix"
|
139
139
|
end
|
140
140
|
|
141
141
|
it "creates postfix span with right class" do
|
142
|
-
expect(@node.find(
|
142
|
+
expect(@node.find(".row.collapse")).to have_css("span.postfix")
|
143
143
|
end
|
144
144
|
|
145
145
|
it "wraps input in the div with the right column size" do
|
146
|
-
expect(@node.find(
|
146
|
+
expect(@node.find(".row.collapse")).to have_css("div.small-10.medium-8.large-6.columns")
|
147
147
|
end
|
148
148
|
|
149
149
|
it "has right value for the input" do
|
150
|
-
expect(@node.find(
|
150
|
+
expect(@node.find(".row.collapse").find("div.small-10.medium-8.large-6.columns")).to have_css('input[type="text"][name="author[login]"]')
|
151
151
|
end
|
152
152
|
end
|
153
153
|
|
154
154
|
context "with only one column size" do
|
155
155
|
before do
|
156
156
|
form_for(@author) do |builder|
|
157
|
-
@small_node = Capybara.string builder.text_field(:login, :
|
158
|
-
@medium_node = Capybara.string builder.text_field(:login, :
|
159
|
-
@large_node = Capybara.string builder.text_field(:login, :
|
157
|
+
@small_node = Capybara.string builder.text_field(:login, postfix: { small: 2, value: "Postfix" })
|
158
|
+
@medium_node = Capybara.string builder.text_field(:login, postfix: { medium: 2, value: "Postfix" })
|
159
|
+
@large_node = Capybara.string builder.text_field(:login, postfix: { large: 2, value: "Postfix" })
|
160
160
|
end
|
161
161
|
end
|
162
162
|
|
163
163
|
it "wraps postfix in the div with the right column size" do
|
164
|
-
expect(@small_node.find(
|
165
|
-
expect(@medium_node.find(
|
166
|
-
expect(@large_node.find(
|
164
|
+
expect(@small_node.find(".row.collapse")).to have_css("div.small-2.columns")
|
165
|
+
expect(@medium_node.find(".row.collapse")).to have_css("div.medium-2.columns")
|
166
|
+
expect(@large_node.find(".row.collapse")).to have_css("div.large-2.columns")
|
167
167
|
end
|
168
168
|
|
169
169
|
it "wraps input in the div with the right column size" do
|
170
|
-
expect(@small_node.find(
|
171
|
-
expect(@medium_node.find(
|
172
|
-
expect(@large_node.find(
|
170
|
+
expect(@small_node.find(".row.collapse")).to have_css("div.small-10.columns")
|
171
|
+
expect(@medium_node.find(".row.collapse")).to have_css("div.medium-10.columns")
|
172
|
+
expect(@large_node.find(".row.collapse")).to have_css("div.large-10.columns")
|
173
173
|
end
|
174
174
|
|
175
175
|
it "excludes other classes from the prefix" do
|
176
|
-
expect(@small_node.find(
|
177
|
-
expect(@small_node.find(
|
176
|
+
expect(@small_node.find(".row.collapse")).to_not have_css("div.medium-2.columns")
|
177
|
+
expect(@small_node.find(".row.collapse")).to_not have_css("div.large-2.columns")
|
178
178
|
end
|
179
179
|
|
180
180
|
it "excludes other classes from the input" do
|
181
|
-
expect(@small_node.find(
|
182
|
-
expect(@small_node.find(
|
183
|
-
expect(@small_node.find(
|
181
|
+
expect(@small_node.find(".row.collapse")).to have_css("div.small-10.columns")
|
182
|
+
expect(@small_node.find(".row.collapse")).to_not have_css("div.medium-12.columns")
|
183
|
+
expect(@small_node.find(".row.collapse")).to_not have_css("div.large-12.columns")
|
184
184
|
end
|
185
185
|
end
|
186
186
|
end
|
@@ -190,15 +190,14 @@ describe "FoundationRailsHelper::FormHelper" do
|
|
190
190
|
before do
|
191
191
|
form_for(@author) do |builder|
|
192
192
|
@node = Capybara.string builder.text_field(:login,
|
193
|
-
:
|
194
|
-
:
|
193
|
+
prefix: { small: 2, medium: 3, large: 4, value: "Prefix" },
|
194
|
+
postfix: { small: 2, medium: 3, large: 4, value: "Postfix" })
|
195
195
|
end
|
196
196
|
end
|
197
197
|
|
198
198
|
it "wraps input in the div with the right column size" do
|
199
|
-
expect(@node.find(
|
199
|
+
expect(@node.find(".row.collapse")).to have_css("div.small-8.medium-6.large-4.columns")
|
200
200
|
end
|
201
|
-
|
202
201
|
end
|
203
202
|
end
|
204
203
|
|
@@ -206,24 +205,24 @@ describe "FoundationRailsHelper::FormHelper" do
|
|
206
205
|
it "should generate text_field input" do
|
207
206
|
form_for(@author) do |builder|
|
208
207
|
node = Capybara.string builder.text_field(:login)
|
209
|
-
expect(node).to have_css('label[for="author_login"]', :
|
208
|
+
expect(node).to have_css('label[for="author_login"]', text: "Login")
|
210
209
|
expect(node).to have_css('input[type="text"][name="author[login]"]')
|
211
|
-
expect(node.find_field(
|
210
|
+
expect(node.find_field("author_login").value).to eq @author.login
|
212
211
|
end
|
213
212
|
end
|
214
213
|
|
215
214
|
it "should generate text_field input without label" do
|
216
215
|
form_for(@author) do |builder|
|
217
|
-
node = Capybara.string builder.text_field(:login, :
|
218
|
-
expect(node).to_not have_css('label[for="author_login"]', :
|
216
|
+
node = Capybara.string builder.text_field(:login, label: false)
|
217
|
+
expect(node).to_not have_css('label[for="author_login"]', text: "Login")
|
219
218
|
expect(node).to have_css('input[type="text"][name="author[login]"]')
|
220
|
-
expect(node.find_field(
|
219
|
+
expect(node.find_field("author_login").value).to eq @author.login
|
221
220
|
end
|
222
221
|
end
|
223
222
|
|
224
223
|
it "should generate text_field with class from options" do
|
225
224
|
form_for(@author) do |builder|
|
226
|
-
node = Capybara.string builder.text_field(:login, :
|
225
|
+
node = Capybara.string builder.text_field(:login, class: "righteous")
|
227
226
|
expect(node).to have_css('input.righteous[type="text"][name="author[login]"]')
|
228
227
|
end
|
229
228
|
end
|
@@ -231,88 +230,88 @@ describe "FoundationRailsHelper::FormHelper" do
|
|
231
230
|
it "should generate password_field input" do
|
232
231
|
form_for(@author) do |builder|
|
233
232
|
node = Capybara.string builder.password_field(:password)
|
234
|
-
expect(node).to have_css('label[for="author_password"]', :
|
233
|
+
expect(node).to have_css('label[for="author_password"]', text: "Password")
|
235
234
|
expect(node).to have_css('input[type="password"][name="author[password]"]')
|
236
|
-
expect(node.find_field(
|
235
|
+
expect(node.find_field("author_password").value).to be_nil
|
237
236
|
end
|
238
237
|
end
|
239
238
|
|
240
239
|
it "should generate email_field input" do
|
241
240
|
form_for(@author) do |builder|
|
242
241
|
node = Capybara.string builder.email_field(:email)
|
243
|
-
expect(node).to have_css('label[for="author_email"]', :
|
242
|
+
expect(node).to have_css('label[for="author_email"]', text: "Email")
|
244
243
|
expect(node).to have_css('input[type="email"][name="author[email]"]')
|
245
|
-
expect(node.find_field(
|
244
|
+
expect(node.find_field("author_email").value).to eq @author.email
|
246
245
|
end
|
247
246
|
end
|
248
247
|
|
249
248
|
it "should generate url_field input" do
|
250
249
|
form_for(@author) do |builder|
|
251
250
|
node = Capybara.string builder.url_field(:url)
|
252
|
-
expect(node).to have_css('label[for="author_url"]', :
|
251
|
+
expect(node).to have_css('label[for="author_url"]', text: "Url")
|
253
252
|
expect(node).to have_css('input[type="url"][name="author[url]"]')
|
254
|
-
expect(node.find_field(
|
253
|
+
expect(node.find_field("author_url").value).to eq @author.url
|
255
254
|
end
|
256
255
|
end
|
257
256
|
|
258
257
|
it "should generate phone_field input" do
|
259
258
|
form_for(@author) do |builder|
|
260
259
|
node = Capybara.string builder.phone_field(:phone)
|
261
|
-
expect(node).to have_css('label[for="author_phone"]', :
|
260
|
+
expect(node).to have_css('label[for="author_phone"]', text: "Phone")
|
262
261
|
expect(node).to have_css('input[type="tel"][name="author[phone]"]')
|
263
|
-
expect(node.find_field(
|
262
|
+
expect(node.find_field("author_phone").value).to eq @author.phone
|
264
263
|
end
|
265
264
|
end
|
266
265
|
|
267
266
|
it "should generate number_field input" do
|
268
267
|
form_for(@author) do |builder|
|
269
268
|
node = Capybara.string builder.number_field(:some_number)
|
270
|
-
expect(node).to have_css('label[for="author_some_number"]', :
|
269
|
+
expect(node).to have_css('label[for="author_some_number"]', text: "Some number")
|
271
270
|
expect(node).to have_css('input[type="number"][name="author[some_number]"]')
|
272
|
-
expect(node.find_field(
|
271
|
+
expect(node.find_field("author_some_number").value).to eq @author.some_number
|
273
272
|
end
|
274
273
|
end
|
275
274
|
|
276
275
|
it "should generate text_area input" do
|
277
276
|
form_for(@author) do |builder|
|
278
277
|
node = Capybara.string builder.text_area(:description)
|
279
|
-
expect(node).to have_css('label[for="author_description"]', :
|
278
|
+
expect(node).to have_css('label[for="author_description"]', text: "Description")
|
280
279
|
expect(node).to have_css('textarea[name="author[description]"]')
|
281
|
-
expect(node.find_field(
|
280
|
+
expect(node.find_field("author_description").value.strip).to eq @author.description
|
282
281
|
end
|
283
282
|
end
|
284
283
|
|
285
284
|
it "should generate file_field input" do
|
286
285
|
form_for(@author) do |builder|
|
287
286
|
node = Capybara.string builder.file_field(:avatar)
|
288
|
-
expect(node).to have_css('label[for="author_avatar"]', :
|
287
|
+
expect(node).to have_css('label[for="author_avatar"]', text: "Avatar")
|
289
288
|
expect(node).to have_css('input[type="file"][name="author[avatar]"]')
|
290
|
-
expect(node.find_field(
|
289
|
+
expect(node.find_field("author_avatar").value).to be_nil
|
291
290
|
end
|
292
291
|
end
|
293
292
|
|
294
293
|
it "should generate select input" do
|
295
294
|
form_for(@author) do |builder|
|
296
295
|
node = Capybara.string builder.select(:description, [["Choice #1", :a], ["Choice #2", :b]])
|
297
|
-
expect(node).to have_css('label[for="author_description"]', :
|
296
|
+
expect(node).to have_css('label[for="author_description"]', text: "Description")
|
298
297
|
expect(node).to have_css('select[name="author[description]"]')
|
299
|
-
expect(node).to have_css('select[name="author[description]"] option[value="a"]', :
|
300
|
-
expect(node).to have_css('select[name="author[description]"] option[value="b"]', :
|
298
|
+
expect(node).to have_css('select[name="author[description]"] option[value="a"]', text: "Choice #1")
|
299
|
+
expect(node).to have_css('select[name="author[description]"] option[value="b"]', text: "Choice #2")
|
301
300
|
end
|
302
301
|
end
|
303
302
|
|
304
303
|
it "should generate check_box input" do
|
305
304
|
form_for(@author) do |builder|
|
306
305
|
node = Capybara.string builder.check_box(:active)
|
307
|
-
expect(node).to have_css('label[for="author_active"] input[type="hidden"][name="author[active]"][value="0"]', :
|
306
|
+
expect(node).to have_css('label[for="author_active"] input[type="hidden"][name="author[active]"][value="0"]', visible: false)
|
308
307
|
expect(node).to have_css('label[for="author_active"] input[type="checkbox"][name="author[active]"]')
|
309
|
-
expect(node).to have_css('label[for="author_active"]', :
|
308
|
+
expect(node).to have_css('label[for="author_active"]', text: "Active")
|
310
309
|
end
|
311
310
|
end
|
312
311
|
it "should generate check_box input without a label" do
|
313
312
|
form_for(@author) do |builder|
|
314
|
-
node = Capybara.string builder.check_box(:active, :
|
315
|
-
expect(node).to have_css('input[type="hidden"][name="author[active]"][value="0"]', :
|
313
|
+
node = Capybara.string builder.check_box(:active, label: false)
|
314
|
+
expect(node).to have_css('input[type="hidden"][name="author[active]"][value="0"]', visible: false)
|
316
315
|
expect(node).to have_css('input[type="checkbox"][name="author[active]"]')
|
317
316
|
expect(node).to_not have_css('label[for="author_active"]')
|
318
317
|
end
|
@@ -342,7 +341,7 @@ describe "FoundationRailsHelper::FormHelper" do
|
|
342
341
|
end
|
343
342
|
it "should generate radio_button with label options" do
|
344
343
|
form_for(@author) do |builder|
|
345
|
-
node = Capybara.string builder.radio_button(:active, "ok", class:
|
344
|
+
node = Capybara.string builder.radio_button(:active, "ok", class: "very", label_options: { class: "special" })
|
346
345
|
expect(node).to have_css('label.special[for="author_active_ok"]')
|
347
346
|
expect(node).to have_css('input.very[type="radio"][name="author[active]"]')
|
348
347
|
end
|
@@ -351,32 +350,32 @@ describe "FoundationRailsHelper::FormHelper" do
|
|
351
350
|
it "should generate date_select input" do
|
352
351
|
form_for(@author) do |builder|
|
353
352
|
node = Capybara.string builder.label(:birthdate) + builder.date_select(:birthdate)
|
354
|
-
expect(node).to have_css('label[for="author_birthdate"]', :
|
355
|
-
%w(1 2 3).each {|i| expect(node).to
|
353
|
+
expect(node).to have_css('label[for="author_birthdate"]', text: "Birthdate")
|
354
|
+
%w(1 2 3).each { |i| expect(node).to have_css("select[name='author[birthdate(#{i}i)]']") }
|
356
355
|
expect(node).to have_css('select#author_birthdate_1i option[selected="selected"][value="1969"]')
|
357
356
|
expect(node).to have_css('select#author_birthdate_2i option[selected="selected"][value="6"]')
|
358
357
|
expect(node).to have_css('select#author_birthdate_3i option[selected="selected"][value="18"]')
|
359
|
-
%w(4 5).each
|
358
|
+
%w(4 5).each { |i| expect(node).to_not have_css("select[name='author[birthdate(#{i}i)]']") }
|
360
359
|
end
|
361
360
|
end
|
362
361
|
|
363
362
|
it "should generate date_select input with :discard_year => true" do
|
364
363
|
form_for(@author) do |builder|
|
365
|
-
node = Capybara.string builder.label(:birthdate) + builder.date_select(:birthdate, :
|
366
|
-
expect(node).to have_css('label[for="author_birthdate"]', :
|
367
|
-
%w(2 3).each {|i| expect(node).to
|
364
|
+
node = Capybara.string builder.label(:birthdate) + builder.date_select(:birthdate, discard_year: true)
|
365
|
+
expect(node).to have_css('label[for="author_birthdate"]', text: "Birthdate")
|
366
|
+
%w(2 3).each { |i| expect(node).to have_css("select[name='author[birthdate(#{i}i)]']") }
|
368
367
|
expect(node).to_not have_css('select#author_birthdate_1i option[selected="selected"][value="1969"]')
|
369
368
|
expect(node).to have_css('select#author_birthdate_2i option[selected="selected"][value="6"]')
|
370
369
|
expect(node).to have_css('select#author_birthdate_3i option[selected="selected"][value="18"]')
|
371
|
-
%w(1 4 5).each
|
370
|
+
%w(1 4 5).each { |i| expect(node).to_not have_css("select[name='author[birthdate(#{i}i)]']") }
|
372
371
|
end
|
373
372
|
end
|
374
373
|
|
375
374
|
it "should generate datetime_select input" do
|
376
375
|
form_for(@author) do |builder|
|
377
376
|
node = Capybara.string builder.label(:birthdate) + builder.datetime_select(:birthdate)
|
378
|
-
expect(node).to have_css('label[for="author_birthdate"]', :
|
379
|
-
%w(1 2 3 4 5).each {|i| expect(node).to
|
377
|
+
expect(node).to have_css('label[for="author_birthdate"]', text: "Birthdate")
|
378
|
+
%w(1 2 3 4 5).each { |i| expect(node).to have_css("select[name='author[birthdate(#{i}i)]']") }
|
380
379
|
expect(node).to have_css('select#author_birthdate_1i option[selected="selected"][value="1969"]')
|
381
380
|
expect(node).to have_css('select#author_birthdate_2i option[selected="selected"][value="6"]')
|
382
381
|
expect(node).to have_css('select#author_birthdate_3i option[selected="selected"][value="18"]')
|
@@ -387,42 +386,42 @@ describe "FoundationRailsHelper::FormHelper" do
|
|
387
386
|
|
388
387
|
it "should generate datetime_select input with :discard_year => true" do
|
389
388
|
form_for(@author) do |builder|
|
390
|
-
node = Capybara.string builder.label(:birthdate) + builder.datetime_select(:birthdate, :
|
391
|
-
expect(node).to have_css('label[for="author_birthdate"]', :
|
392
|
-
%w(2 3 4 5).each {|i| expect(node).to
|
389
|
+
node = Capybara.string builder.label(:birthdate) + builder.datetime_select(:birthdate, discard_year: true)
|
390
|
+
expect(node).to have_css('label[for="author_birthdate"]', text: "Birthdate")
|
391
|
+
%w(2 3 4 5).each { |i| expect(node).to have_css("select[name='author[birthdate(#{i}i)]']") }
|
393
392
|
expect(node).to_not have_css('select#author_birthdate_1i option[selected="selected"][value="1969"]')
|
394
393
|
expect(node).to have_css('select#author_birthdate_2i option[selected="selected"][value="6"]')
|
395
394
|
expect(node).to have_css('select#author_birthdate_3i option[selected="selected"][value="18"]')
|
396
395
|
expect(node).to have_css('select#author_birthdate_4i option[selected="selected"][value="20"]')
|
397
396
|
expect(node).to have_css('select#author_birthdate_5i option[selected="selected"][value="30"]')
|
398
|
-
%w(1).each
|
397
|
+
%w(1).each { |i| expect(node).to_not have_css("select[name='author[birthdate(#{i}i)]']") }
|
399
398
|
end
|
400
399
|
end
|
401
400
|
|
402
401
|
it "should generate time_zone_select input" do
|
403
402
|
form_for(@author) do |builder|
|
404
403
|
node = Capybara.string builder.label(:time_zone) + builder.time_zone_select(:time_zone)
|
405
|
-
expect(node).to have_css('label[for="author_time_zone"]', :
|
404
|
+
expect(node).to have_css('label[for="author_time_zone"]', text: "Time zone")
|
406
405
|
expect(node).to have_css('select[name="author[time_zone]"]')
|
407
|
-
expect(node).to have_css('select[name="author[time_zone]"] option[value="Perth"]', :
|
406
|
+
expect(node).to have_css('select[name="author[time_zone]"] option[value="Perth"]', text: "(GMT+08:00) Perth")
|
408
407
|
end
|
409
408
|
end
|
410
409
|
|
411
410
|
it "should generate date_field input" do
|
412
411
|
form_for(@author) do |builder|
|
413
412
|
node = Capybara.string builder.date_field(:publish_date)
|
414
|
-
expect(node).to have_css('label[for="author_publish_date"]', :
|
413
|
+
expect(node).to have_css('label[for="author_publish_date"]', text: "date")
|
415
414
|
expect(node).to have_css('input[type="date"][name="author[publish_date]"]')
|
416
|
-
expect(node.find_field(
|
415
|
+
expect(node.find_field("author_publish_date").value).to eq @author.publish_date.to_s
|
417
416
|
end
|
418
417
|
end
|
419
418
|
|
420
419
|
it "should generate datetime_field input" do
|
421
420
|
form_for(@author) do |builder|
|
422
|
-
node = Capybara.string
|
423
|
-
expect(node).to have_css('label[for="author_forty_two"]', :
|
421
|
+
node = Capybara.string builder.datetime_field(:forty_two)
|
422
|
+
expect(node).to have_css('label[for="author_forty_two"]', text: "Forty two")
|
424
423
|
expect(node).to have_css('input[type^="datetime"][name="author[forty_two]"]')
|
425
|
-
value = DateTime.parse(
|
424
|
+
value = DateTime.parse(node.find_field("author_forty_two").value)
|
426
425
|
expect(value).to eq @author.forty_two.to_s
|
427
426
|
end
|
428
427
|
end
|
@@ -430,99 +429,99 @@ describe "FoundationRailsHelper::FormHelper" do
|
|
430
429
|
it "should generate datetime_local_field" do
|
431
430
|
form_for(@author) do |builder|
|
432
431
|
node = Capybara.string builder.datetime_local_field(:forty_two)
|
433
|
-
expect(node).to have_css('label[for="author_forty_two"]', :
|
432
|
+
expect(node).to have_css('label[for="author_forty_two"]', text: "Forty two")
|
434
433
|
expect(node).to have_css('input[type="datetime-local"][name="author[forty_two]"]')
|
435
|
-
expect(node.find_field(
|
434
|
+
expect(node.find_field("author_forty_two").value).to eq @author.forty_two.strftime("%Y-%m-%dT%H:%M:%S")
|
436
435
|
end
|
437
436
|
end
|
438
437
|
|
439
438
|
it "should generate month_field input" do
|
440
439
|
form_for(@author) do |builder|
|
441
|
-
node = Capybara.string
|
442
|
-
expect(node).to have_css('label[for="author_forty_two"]', :
|
440
|
+
node = Capybara.string builder.month_field(:forty_two)
|
441
|
+
expect(node).to have_css('label[for="author_forty_two"]', text: "Forty two")
|
443
442
|
expect(node).to have_css('input[type="month"][name="author[forty_two]"]')
|
444
|
-
expect(node.find_field(
|
443
|
+
expect(node.find_field("author_forty_two").value).to eq @author.forty_two.strftime("%Y-%m")
|
445
444
|
end
|
446
445
|
end
|
447
446
|
|
448
447
|
it "should generate week_field" do
|
449
448
|
form_for(@author) do |builder|
|
450
|
-
node = Capybara.string
|
451
|
-
expect(node).to have_css('label[for="author_forty_two"]', :
|
449
|
+
node = Capybara.string builder.week_field(:forty_two)
|
450
|
+
expect(node).to have_css('label[for="author_forty_two"]', text: "Forty two")
|
452
451
|
expect(node).to have_css('input[type="week"][name="author[forty_two]"]')
|
453
|
-
expect(node.find_field(
|
452
|
+
expect(node.find_field("author_forty_two").value).to eq @author.forty_two.strftime("%Y-W%V")
|
454
453
|
end
|
455
454
|
end
|
456
455
|
|
457
456
|
it "should generate time_field" do
|
458
457
|
form_for(@author) do |builder|
|
459
|
-
node = Capybara.string
|
460
|
-
expect(node).to have_css('label[for="author_forty_two"]', :
|
458
|
+
node = Capybara.string builder.time_field(:forty_two)
|
459
|
+
expect(node).to have_css('label[for="author_forty_two"]', text: "Forty two")
|
461
460
|
expect(node).to have_css('input[type="time"][name="author[forty_two]"]')
|
462
|
-
expect(node.find_field(
|
461
|
+
expect(node.find_field("author_forty_two").value).to eq @author.forty_two.strftime("%H:%M:%S.%L")
|
463
462
|
end
|
464
463
|
end
|
465
464
|
|
466
465
|
it "should generate range_field" do
|
467
466
|
form_for(@author) do |builder|
|
468
467
|
node = Capybara.string builder.range_field(:some_number)
|
469
|
-
expect(node).to have_css('label[for="author_some_number"]', :
|
468
|
+
expect(node).to have_css('label[for="author_some_number"]', text: "Some number")
|
470
469
|
expect(node).to have_css('input[type="range"][name="author[some_number]"]')
|
471
|
-
expect(node.find_field(
|
470
|
+
expect(node.find_field("author_some_number").value).to eq @author.some_number
|
472
471
|
end
|
473
472
|
end
|
474
473
|
|
475
474
|
it "should generate search_field" do
|
476
475
|
form_for(@author) do |builder|
|
477
476
|
node = Capybara.string builder.search_field(:description)
|
478
|
-
expect(node).to have_css('label[for="author_description"]', :
|
477
|
+
expect(node).to have_css('label[for="author_description"]', text: "Description")
|
479
478
|
expect(node).to have_css('input[type="search"][name="author[description]"]')
|
480
|
-
expect(node.find_field(
|
479
|
+
expect(node.find_field("author_description").value).to eq @author.description
|
481
480
|
end
|
482
481
|
end
|
483
482
|
|
484
483
|
it "should generate color_field" do
|
485
484
|
form_for(@author) do |builder|
|
486
485
|
node = Capybara.string builder.color_field(:favorite_color)
|
487
|
-
expect(node).to have_css('label[for="author_favorite_color"]', :
|
486
|
+
expect(node).to have_css('label[for="author_favorite_color"]', text: "Favorite color")
|
488
487
|
expect(node).to have_css('input[type="color"][name="author[favorite_color]"]')
|
489
|
-
expect(node.find_field(
|
488
|
+
expect(node.find_field("author_favorite_color").value).to eq @author.favorite_color
|
490
489
|
end
|
491
490
|
end
|
492
491
|
|
493
492
|
it "should generate collection_select input" do
|
494
493
|
form_for(@author) do |builder|
|
495
494
|
node = Capybara.string builder.collection_select(:favorite_book, Book.all, :id, :title)
|
496
|
-
expect(node).to have_css('label[for="author_favorite_book"]', :
|
495
|
+
expect(node).to have_css('label[for="author_favorite_book"]', text: "Favorite book")
|
497
496
|
expect(node).to have_css('select[name="author[favorite_book]"]')
|
498
|
-
expect(node).to have_css('select[name="author[favorite_book]"] option[value="78"]', :
|
499
|
-
expect(node).to have_css('select[name="author[favorite_book]"] option[value="133"]', :
|
497
|
+
expect(node).to have_css('select[name="author[favorite_book]"] option[value="78"]', text: "Gulliver's Travels")
|
498
|
+
expect(node).to have_css('select[name="author[favorite_book]"] option[value="133"]', text: "Treasure Island")
|
500
499
|
end
|
501
500
|
end
|
502
501
|
|
503
502
|
it "should generate grouped_collection_select input" do
|
504
503
|
form_for(@author) do |builder|
|
505
504
|
node = Capybara.string builder.grouped_collection_select(:favorite_book, Genre.all, :books, :name, :id, :title)
|
506
|
-
expect(node).to have_css('label[for="author_favorite_book"]', :
|
505
|
+
expect(node).to have_css('label[for="author_favorite_book"]', text: "Favorite book")
|
507
506
|
expect(node).to have_css('select[name="author[favorite_book]"]')
|
508
|
-
expect(node).to have_css('select[name="author[favorite_book]"] optgroup[label="Exploration"] option[value="78"]', :
|
509
|
-
expect(node).to have_css('select[name="author[favorite_book]"] optgroup[label="Pirate Exploits"] option[value="133"]', :
|
507
|
+
expect(node).to have_css('select[name="author[favorite_book]"] optgroup[label="Exploration"] option[value="78"]', text: "Gulliver's Travels")
|
508
|
+
expect(node).to have_css('select[name="author[favorite_book]"] optgroup[label="Pirate Exploits"] option[value="133"]', text: "Treasure Island")
|
510
509
|
end
|
511
510
|
end
|
512
511
|
|
513
512
|
describe "hint" do
|
514
513
|
it "should add a span element" do
|
515
514
|
form_for(@author) do |builder|
|
516
|
-
hint =
|
517
|
-
node = Capybara.string builder.text_field(:login, :
|
515
|
+
hint = "Enter login"
|
516
|
+
node = Capybara.string builder.text_field(:login, hint: hint)
|
518
517
|
expect(node.find("span").text).to eq hint
|
519
518
|
end
|
520
519
|
end
|
521
520
|
|
522
521
|
it "should not add hint attribute" do
|
523
522
|
form_for(@author) do |builder|
|
524
|
-
node = Capybara.string builder.text_field(:login, :
|
525
|
-
expect(node.find_field("author_login")[
|
523
|
+
node = Capybara.string builder.text_field(:login, hint: "Enter login")
|
524
|
+
expect(node.find_field("author_login")["hint"]).to be_nil
|
526
525
|
end
|
527
526
|
end
|
528
527
|
end
|
@@ -541,25 +540,24 @@ describe "FoundationRailsHelper::FormHelper" do
|
|
541
540
|
it "should not display errors" do
|
542
541
|
form_for(@author) do |builder|
|
543
542
|
node = Capybara.string builder.text_field(:login)
|
544
|
-
expect(node).to_not have_css(
|
543
|
+
expect(node).to_not have_css("small.error")
|
545
544
|
end
|
546
545
|
end
|
547
546
|
it "should display errors" do
|
548
547
|
form_for(@author) do |builder|
|
549
|
-
allow(@author).to receive(:errors).and_return(
|
548
|
+
allow(@author).to receive(:errors).and_return(login: ["required"])
|
550
549
|
node = Capybara.string builder.text_field(:login)
|
551
|
-
expect(node).to have_css(
|
550
|
+
expect(node).to have_css("small.error", text: "required")
|
552
551
|
end
|
553
552
|
end
|
554
553
|
%w(file_field email_field text_field telephone_field phone_field
|
555
554
|
url_field number_field date_field datetime_field datetime_local_field
|
556
555
|
month_field week_field time_field range_field search_field color_field
|
557
556
|
|
558
|
-
password_field
|
559
|
-
).each do |field|
|
557
|
+
password_field).each do |field|
|
560
558
|
it "should display errors on #{field} inputs" do
|
561
559
|
form_for(@author) do |builder|
|
562
|
-
allow(@author).to receive(:errors).and_return(
|
560
|
+
allow(@author).to receive(:errors).and_return(description: ["required"])
|
563
561
|
node = Capybara.string builder.public_send(field, :description)
|
564
562
|
expect(node).to have_css('label.error[for="author_description"]')
|
565
563
|
expect(node).to have_css('input.error[name="author[description]"]')
|
@@ -568,7 +566,7 @@ describe "FoundationRailsHelper::FormHelper" do
|
|
568
566
|
end
|
569
567
|
it "should display errors on text_area inputs" do
|
570
568
|
form_for(@author) do |builder|
|
571
|
-
allow(@author).to receive(:errors).and_return(
|
569
|
+
allow(@author).to receive(:errors).and_return(description: ["required"])
|
572
570
|
node = Capybara.string builder.text_area(:description)
|
573
571
|
expect(node).to have_css('label.error[for="author_description"]')
|
574
572
|
expect(node).to have_css('textarea.error[name="author[description]"]')
|
@@ -576,7 +574,7 @@ describe "FoundationRailsHelper::FormHelper" do
|
|
576
574
|
end
|
577
575
|
it "should display errors on select inputs" do
|
578
576
|
form_for(@author) do |builder|
|
579
|
-
allow(@author).to receive(:errors).and_return(
|
577
|
+
allow(@author).to receive(:errors).and_return(favorite_book: ["required"])
|
580
578
|
node = Capybara.string builder.select(:favorite_book, [["Choice #1", :a], ["Choice #2", :b]])
|
581
579
|
expect(node).to have_css('label.error[for="author_favorite_book"]')
|
582
580
|
expect(node).to have_css('select.error[name="author[favorite_book]"]')
|
@@ -584,23 +582,23 @@ describe "FoundationRailsHelper::FormHelper" do
|
|
584
582
|
end
|
585
583
|
it "should display errors on date_select inputs" do
|
586
584
|
form_for(@author) do |builder|
|
587
|
-
allow(@author).to receive(:errors).and_return(
|
585
|
+
allow(@author).to receive(:errors).and_return(birthdate: ["required"])
|
588
586
|
node = Capybara.string builder.date_select(:birthdate)
|
589
587
|
expect(node).to have_css('label.error[for="author_birthdate"]')
|
590
|
-
%w(1 2 3).each {|i| expect(node).to have_css("select.error[name='author[birthdate(#{i}i)]']") }
|
588
|
+
%w(1 2 3).each { |i| expect(node).to have_css("select.error[name='author[birthdate(#{i}i)]']") }
|
591
589
|
end
|
592
590
|
end
|
593
591
|
it "should display errors on datetime_select inputs" do
|
594
592
|
form_for(@author) do |builder|
|
595
|
-
allow(@author).to receive(:errors).and_return(
|
593
|
+
allow(@author).to receive(:errors).and_return(birthdate: ["required"])
|
596
594
|
node = Capybara.string builder.datetime_select(:birthdate)
|
597
595
|
expect(node).to have_css('label.error[for="author_birthdate"]')
|
598
|
-
%w(1 2 3 4 5).each {|i| expect(node).to have_css("select.error[name='author[birthdate(#{i}i)]']") }
|
596
|
+
%w(1 2 3 4 5).each { |i| expect(node).to have_css("select.error[name='author[birthdate(#{i}i)]']") }
|
599
597
|
end
|
600
598
|
end
|
601
|
-
it "should display errors on time_zone_select inputs"
|
599
|
+
it "should display errors on time_zone_select inputs" do
|
602
600
|
form_for(@author) do |builder|
|
603
|
-
allow(@author).to receive(:errors).and_return(
|
601
|
+
allow(@author).to receive(:errors).and_return(time_zone: ["required"])
|
604
602
|
node = Capybara.string builder.time_zone_select(:time_zone)
|
605
603
|
expect(node).to have_css('label.error[for="author_time_zone"]')
|
606
604
|
expect(node).to have_css('select.error[name="author[time_zone]"]')
|
@@ -609,7 +607,7 @@ describe "FoundationRailsHelper::FormHelper" do
|
|
609
607
|
|
610
608
|
it "should display errors on collection_select inputs" do
|
611
609
|
form_for(@author) do |builder|
|
612
|
-
allow(@author).to receive(:errors).and_return(
|
610
|
+
allow(@author).to receive(:errors).and_return(favorite_book: ["required"])
|
613
611
|
node = Capybara.string builder.collection_select(:favorite_book, Book.all, :id, :title)
|
614
612
|
expect(node).to have_css('label.error[for="author_favorite_book"]')
|
615
613
|
expect(node).to have_css('select.error[name="author[favorite_book]"]')
|
@@ -618,7 +616,7 @@ describe "FoundationRailsHelper::FormHelper" do
|
|
618
616
|
|
619
617
|
it "should display errors on grouped_collection_select inputs" do
|
620
618
|
form_for(@author) do |builder|
|
621
|
-
allow(@author).to receive(:errors).and_return(
|
619
|
+
allow(@author).to receive(:errors).and_return(favorite_book: ["required"])
|
622
620
|
node = Capybara.string builder.grouped_collection_select(:favorite_book, Genre.all, :books, :name, :id, :title)
|
623
621
|
expect(node).to have_css('label.error[for="author_favorite_book"]')
|
624
622
|
expect(node).to have_css('select.error[name="author[favorite_book]"]')
|
@@ -629,45 +627,45 @@ describe "FoundationRailsHelper::FormHelper" do
|
|
629
627
|
|
630
628
|
it "should display HTML errors when the option is specified" do
|
631
629
|
form_for(@author) do |builder|
|
632
|
-
allow(@author).to receive(:errors).and_return(
|
630
|
+
allow(@author).to receive(:errors).and_return(login: ['required <a href="link_target">link</a>'])
|
633
631
|
node = Capybara.string builder.text_field(:login, html_safe_errors: true)
|
634
|
-
expect(node).to have_link(
|
632
|
+
expect(node).to have_link("link", href: "link_target")
|
635
633
|
end
|
636
634
|
end
|
637
635
|
it "should not display HTML errors when the option is not specified" do
|
638
636
|
form_for(@author) do |builder|
|
639
|
-
allow(@author).to receive(:errors).and_return(
|
637
|
+
allow(@author).to receive(:errors).and_return(login: ['required <a href="link_target">link</a>'])
|
640
638
|
node = Capybara.string builder.text_field(:login)
|
641
|
-
expect(node).to_not have_link(
|
639
|
+
expect(node).to_not have_link("link", href: "link")
|
642
640
|
end
|
643
641
|
end
|
644
642
|
|
645
643
|
it "should not display labels unless specified in the builder method" do
|
646
644
|
form_for(@author, auto_labels: false) do |builder|
|
647
645
|
node = Capybara.string builder.text_field(:login) +
|
648
|
-
|
649
|
-
|
646
|
+
builder.check_box(:active, label: true) +
|
647
|
+
builder.text_field(:description, label: "Tell me about you")
|
650
648
|
|
651
649
|
expect(node).to_not have_css('label[for="author_login"]')
|
652
|
-
expect(node).to have_css('label[for="author_active"]', text:
|
653
|
-
expect(node).to have_css('label[for="author_description"]', text:
|
650
|
+
expect(node).to have_css('label[for="author_active"]', text: "Active")
|
651
|
+
expect(node).to have_css('label[for="author_description"]', text: "Tell me about you")
|
654
652
|
end
|
655
653
|
end
|
656
654
|
|
657
|
-
context
|
655
|
+
context "when class option given" do
|
658
656
|
it "should add it to the error class" do
|
659
657
|
form_for(@author) do |builder|
|
660
|
-
allow(@author).to receive(:errors).and_return(
|
661
|
-
node = Capybara.string builder.text_field(:email, class:
|
658
|
+
allow(@author).to receive(:errors).and_return(email: ["required"])
|
659
|
+
node = Capybara.string builder.text_field(:email, class: "righteous")
|
662
660
|
expect(node).to have_css('input.righteous.error[name="author[email]"]')
|
663
661
|
end
|
664
662
|
end
|
665
663
|
end
|
666
664
|
|
667
|
-
context
|
665
|
+
context "when invalid class option given" do
|
668
666
|
it "should add it to the error class" do
|
669
667
|
form_for(@author) do |builder|
|
670
|
-
allow(@author).to receive(:errors).and_return(
|
668
|
+
allow(@author).to receive(:errors).and_return(email: ["required"])
|
671
669
|
node = Capybara.string builder.text_field(:email, class: :illgotten)
|
672
670
|
expect(node).to have_css('input.illgotten.error[name="author[email]"]')
|
673
671
|
end
|
@@ -675,15 +673,15 @@ describe "FoundationRailsHelper::FormHelper" do
|
|
675
673
|
end
|
676
674
|
end
|
677
675
|
|
678
|
-
describe
|
676
|
+
describe "submit button generator" do
|
679
677
|
after :each do
|
680
678
|
FoundationRailsHelper.reset
|
681
679
|
end
|
682
680
|
|
683
|
-
context
|
681
|
+
context "when button_class config is not set" do
|
684
682
|
it "should display form button with default class" do
|
685
683
|
form_for(@author) do |builder|
|
686
|
-
node = Capybara.string builder.submit(
|
684
|
+
node = Capybara.string builder.submit("Save")
|
687
685
|
expect(node).to have_css('input[type="submit"][class="small radius success button"]')
|
688
686
|
end
|
689
687
|
end
|
@@ -692,22 +690,22 @@ describe "FoundationRailsHelper::FormHelper" do
|
|
692
690
|
context 'when button_class config is "superduper"' do
|
693
691
|
before do
|
694
692
|
FoundationRailsHelper.configure do |config|
|
695
|
-
config.button_class =
|
693
|
+
config.button_class = "superduper"
|
696
694
|
end
|
697
695
|
end
|
698
696
|
|
699
697
|
it "should display form button with 'superduper' class" do
|
700
698
|
form_for(@author) do |builder|
|
701
|
-
node = Capybara.string builder.submit(
|
699
|
+
node = Capybara.string builder.submit("Save")
|
702
700
|
expect(node).to have_css('input[type="submit"][class="superduper"]')
|
703
701
|
end
|
704
702
|
end
|
705
703
|
end
|
706
704
|
|
707
|
-
context
|
705
|
+
context "when option value is 'superduper'" do
|
708
706
|
it "should display form button with 'superduper' class" do
|
709
707
|
form_for(@author) do |builder|
|
710
|
-
node = Capybara.string builder.submit(
|
708
|
+
node = Capybara.string builder.submit("Save", class: "superduper")
|
711
709
|
expect(node).to have_css('input[type="submit"][class="superduper"]')
|
712
710
|
end
|
713
711
|
end
|