formtastic-bootstrap 1.2.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Gemfile +5 -3
- data/Gemfile.lock +72 -60
- data/README.md +4 -1
- data/Rakefile +1 -1
- data/VERSION +1 -1
- data/formtastic-bootstrap.gemspec +49 -16
- data/lib/formtastic-bootstrap/actions/base.rb +22 -0
- data/lib/formtastic-bootstrap/actions/button_action.rb +13 -0
- data/lib/formtastic-bootstrap/actions/input_action.rb +13 -0
- data/lib/formtastic-bootstrap/actions/link_action.rb +12 -0
- data/lib/formtastic-bootstrap/actions.rb +10 -0
- data/lib/formtastic-bootstrap/form_builder.rb +4 -2
- data/lib/formtastic-bootstrap/helpers/action_helper.rb +12 -0
- data/lib/formtastic-bootstrap/helpers/actions_helper.rb +24 -0
- data/lib/formtastic-bootstrap/helpers/fieldset_wrapper.rb +2 -4
- data/lib/formtastic-bootstrap/helpers/inputs_helper.rb +0 -2
- data/lib/formtastic-bootstrap/helpers.rb +6 -8
- data/lib/formtastic-bootstrap/inputs/base/choices.rb +6 -35
- data/lib/formtastic-bootstrap/inputs/base/collections.rb +9 -0
- data/lib/formtastic-bootstrap/inputs/base/grouped_collections.rb +9 -0
- data/lib/formtastic-bootstrap/inputs/base/hints.rb +1 -1
- data/lib/formtastic-bootstrap/inputs/base/labelling.rb +14 -3
- data/lib/formtastic-bootstrap/inputs/base/numeric.rb +9 -0
- data/lib/formtastic-bootstrap/inputs/base/stringish.rb +4 -5
- data/lib/formtastic-bootstrap/inputs/base/timeish.rb +38 -18
- data/lib/formtastic-bootstrap/inputs/base/wrapping.rb +22 -34
- data/lib/formtastic-bootstrap/inputs/base.rb +29 -6
- data/lib/formtastic-bootstrap/inputs/boolean_input.rb +14 -18
- data/lib/formtastic-bootstrap/inputs/check_boxes_input.rb +16 -11
- data/lib/formtastic-bootstrap/inputs/date_input.rb +3 -9
- data/lib/formtastic-bootstrap/inputs/date_select_input.rb +8 -0
- data/lib/formtastic-bootstrap/inputs/datetime_input.rb +3 -12
- data/lib/formtastic-bootstrap/inputs/datetime_select_input.rb +8 -0
- data/lib/formtastic-bootstrap/inputs/email_input.rb +1 -1
- data/lib/formtastic-bootstrap/inputs/file_input.rb +1 -1
- data/lib/formtastic-bootstrap/inputs/hidden_input.rb +1 -1
- data/lib/formtastic-bootstrap/inputs/number_input.rb +3 -3
- data/lib/formtastic-bootstrap/inputs/password_input.rb +1 -1
- data/lib/formtastic-bootstrap/inputs/phone_input.rb +1 -1
- data/lib/formtastic-bootstrap/inputs/radio_input.rb +28 -14
- data/lib/formtastic-bootstrap/inputs/range_input.rb +1 -1
- data/lib/formtastic-bootstrap/inputs/search_input.rb +1 -1
- data/lib/formtastic-bootstrap/inputs/select_input.rb +3 -1
- data/lib/formtastic-bootstrap/inputs/string_input.rb +0 -7
- data/lib/formtastic-bootstrap/inputs/text_input.rb +1 -1
- data/lib/formtastic-bootstrap/inputs/time_input.rb +3 -9
- data/lib/formtastic-bootstrap/inputs/time_select_input.rb +8 -0
- data/lib/formtastic-bootstrap/inputs/time_zone_input.rb +1 -1
- data/lib/formtastic-bootstrap/inputs/url_input.rb +1 -1
- data/lib/formtastic-bootstrap/inputs.rb +30 -23
- data/lib/formtastic-bootstrap.rb +16 -1
- data/spec/actions/button_action_spec.rb +63 -0
- data/spec/actions/input_action_spec.rb +59 -0
- data/spec/actions/link_action_spec.rb +92 -0
- data/spec/helpers/action_helper_spec.rb +368 -0
- data/spec/helpers/actions_helper_spec.rb +147 -0
- data/spec/helpers/input_helper_spec.rb +238 -259
- data/spec/helpers/inputs_helper_spec.rb +84 -25
- data/spec/inputs/boolean_input_spec.rb +108 -75
- data/spec/inputs/check_boxes_input_spec.rb +106 -91
- data/spec/inputs/date_select_input_spec.rb +164 -0
- data/spec/inputs/datetime_select_input_spec.rb +112 -0
- data/spec/inputs/deprecated_time_date_datetime_inputs_spec.rb +48 -0
- data/spec/inputs/email_input_spec.rb +30 -3
- data/spec/inputs/file_input_spec.rb +31 -4
- data/spec/inputs/hidden_input_spec.rb +63 -32
- data/spec/inputs/number_input_spec.rb +37 -8
- data/spec/inputs/password_input_spec.rb +30 -3
- data/spec/inputs/phone_input_spec.rb +30 -3
- data/spec/inputs/radio_input_spec.rb +87 -60
- data/spec/inputs/range_input_spec.rb +32 -5
- data/spec/inputs/search_input_spec.rb +29 -3
- data/spec/inputs/select_input_spec.rb +164 -107
- data/spec/inputs/string_input_spec.rb +33 -22
- data/spec/inputs/text_input_spec.rb +39 -14
- data/spec/inputs/time_select_input_spec.rb +191 -0
- data/spec/inputs/time_zone_input_spec.rb +17 -19
- data/spec/inputs/url_input_spec.rb +30 -3
- data/spec/spec_helper.rb +21 -15
- data/spec/support/custom_macros.rb +61 -228
- data/spec/support/fb_custom_macros.rb +23 -0
- metadata +109 -28
- data/lib/formtastic-bootstrap/helpers/buttons_helper.rb +0 -52
- data/spec/builder/errors_spec.rb +0 -214
- data/spec/helpers/buttons_helper_spec.rb +0 -149
- data/spec/inputs/date_input_spec.rb +0 -147
- data/spec/inputs/datetime_input_spec.rb +0 -101
- data/spec/inputs/time_input_spec.rb +0 -206
- data/spec/support/depracation.rb +0 -6
- data/spec/support/formtastic_spec_helper.rb +0 -382
@@ -0,0 +1,112 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
describe 'datetime select input' do
|
5
|
+
|
6
|
+
include FormtasticSpecHelper
|
7
|
+
|
8
|
+
before do
|
9
|
+
@output_buffer = ''
|
10
|
+
mock_everything
|
11
|
+
end
|
12
|
+
|
13
|
+
describe "general" do
|
14
|
+
|
15
|
+
before do
|
16
|
+
::I18n.backend.store_translations :en, {}
|
17
|
+
output_buffer.replace ''
|
18
|
+
concat(semantic_form_for(@new_post) do |builder|
|
19
|
+
concat(builder.input(:publish_at, :as => :datetime_select))
|
20
|
+
end)
|
21
|
+
end
|
22
|
+
|
23
|
+
it_should_have_bootstrap_horizontal_wrapping
|
24
|
+
it_should_have_input_wrapper_with_class("datetime_select")
|
25
|
+
it_should_have_input_wrapper_with_class(:input)
|
26
|
+
it_should_have_input_wrapper_with_id("post_publish_at_input")
|
27
|
+
it_should_apply_error_logic_for_input_type(:datetime_select)
|
28
|
+
|
29
|
+
it 'should have a legend and label with the label text inside the fieldset' do
|
30
|
+
output_buffer.should have_tag('form div.control-group.datetime_select label.control-label', /Publish at/)
|
31
|
+
end
|
32
|
+
|
33
|
+
it 'should have five selects' do
|
34
|
+
output_buffer.should have_tag('form div.control-group.datetime_select div.controls select', :count => 5)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
describe "when namespace is provided" do
|
39
|
+
|
40
|
+
before do
|
41
|
+
output_buffer.replace ''
|
42
|
+
concat(semantic_form_for(@new_post, :namespace => "context2") do |builder|
|
43
|
+
concat(builder.input(:publish_at, :as => :datetime_select))
|
44
|
+
end)
|
45
|
+
end
|
46
|
+
|
47
|
+
it_should_have_input_wrapper_with_id("context2_post_publish_at_input")
|
48
|
+
it_should_have_select_with_id("context2_post_publish_at_1i")
|
49
|
+
it_should_have_select_with_id("context2_post_publish_at_2i")
|
50
|
+
it_should_have_select_with_id("context2_post_publish_at_3i")
|
51
|
+
it_should_have_select_with_id("context2_post_publish_at_4i")
|
52
|
+
it_should_have_select_with_id("context2_post_publish_at_5i")
|
53
|
+
|
54
|
+
end
|
55
|
+
|
56
|
+
describe "when index is provided" do
|
57
|
+
|
58
|
+
before do
|
59
|
+
@output_buffer = ''
|
60
|
+
mock_everything
|
61
|
+
|
62
|
+
concat(semantic_form_for(@new_post) do |builder|
|
63
|
+
concat(builder.fields_for(:author, :index => 3) do |author|
|
64
|
+
concat(author.input(:created_at, :as => :datetime_select))
|
65
|
+
end)
|
66
|
+
end)
|
67
|
+
end
|
68
|
+
|
69
|
+
it 'should index the id of the control-group' do
|
70
|
+
output_buffer.should have_tag("div.control-group#post_author_attributes_3_created_at_input")
|
71
|
+
end
|
72
|
+
|
73
|
+
it 'should index the id of the select tag' do
|
74
|
+
output_buffer.should have_tag("select#post_author_attributes_3_created_at_1i")
|
75
|
+
output_buffer.should have_tag("select#post_author_attributes_3_created_at_2i")
|
76
|
+
output_buffer.should have_tag("select#post_author_attributes_3_created_at_3i")
|
77
|
+
output_buffer.should have_tag("select#post_author_attributes_3_created_at_4i")
|
78
|
+
output_buffer.should have_tag("select#post_author_attributes_3_created_at_5i")
|
79
|
+
end
|
80
|
+
|
81
|
+
it 'should index the name of the select tag' do
|
82
|
+
output_buffer.should have_tag("select[@name='post[author_attributes][3][created_at(1i)]']")
|
83
|
+
output_buffer.should have_tag("select[@name='post[author_attributes][3][created_at(2i)]']")
|
84
|
+
output_buffer.should have_tag("select[@name='post[author_attributes][3][created_at(3i)]']")
|
85
|
+
output_buffer.should have_tag("select[@name='post[author_attributes][3][created_at(4i)]']")
|
86
|
+
output_buffer.should have_tag("select[@name='post[author_attributes][3][created_at(5i)]']")
|
87
|
+
end
|
88
|
+
|
89
|
+
end
|
90
|
+
|
91
|
+
|
92
|
+
describe ':labels option' do
|
93
|
+
describe ':labels option' do
|
94
|
+
it "should provide a message that :labels is not supported" do
|
95
|
+
pending ':labels is not supported'
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
end
|
100
|
+
|
101
|
+
describe "when required" do
|
102
|
+
it "should add the required attribute to the input's html options" do
|
103
|
+
with_config :use_required_attribute, true do
|
104
|
+
concat(semantic_form_for(@new_post) do |builder|
|
105
|
+
concat(builder.input(:title, :as => :datetime_select, :required => true))
|
106
|
+
end)
|
107
|
+
output_buffer.should have_tag("select[@required]", :count => 5)
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'deprecated time, datetime and date inputs' do
|
4
|
+
include FormtasticSpecHelper
|
5
|
+
|
6
|
+
before do
|
7
|
+
@output_buffer = ''
|
8
|
+
mock_everything
|
9
|
+
end
|
10
|
+
|
11
|
+
it 'should warn :time is deprecated' do
|
12
|
+
::ActiveSupport::Deprecation.should_receive(:warn)
|
13
|
+
semantic_form_for(@new_post) do |f|
|
14
|
+
concat(f.input :created_at, :as => :time)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'should warn :datetime is deprecated' do
|
19
|
+
::ActiveSupport::Deprecation.should_receive(:warn)
|
20
|
+
semantic_form_for(@new_post) do |f|
|
21
|
+
concat(f.input :created_at, :as => :datetime)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'should warn :date is deprecated' do
|
26
|
+
::ActiveSupport::Deprecation.should_receive(:warn)
|
27
|
+
semantic_form_for(@new_post) do |f|
|
28
|
+
concat(f.input :created_at, :as => :date)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
it 'should use wrapper css class based off :as, not off their parent class' do
|
33
|
+
with_deprecation_silenced do
|
34
|
+
concat(semantic_form_for(@new_post) do |f|
|
35
|
+
concat(f.input :created_at, :as => :time)
|
36
|
+
concat(f.input :created_at, :as => :datetime)
|
37
|
+
concat(f.input :created_at, :as => :date)
|
38
|
+
end)
|
39
|
+
end
|
40
|
+
output_buffer.should have_tag('div.control-group.time')
|
41
|
+
output_buffer.should have_tag('div.control-group.datetime')
|
42
|
+
output_buffer.should have_tag('div.control-group.date')
|
43
|
+
output_buffer.should_not have_tag('li.time_select')
|
44
|
+
output_buffer.should_not have_tag('li.datetime_select')
|
45
|
+
output_buffer.should_not have_tag('li.date_select')
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
@@ -8,7 +8,6 @@ describe 'email input' do
|
|
8
8
|
before do
|
9
9
|
@output_buffer = ''
|
10
10
|
mock_everything
|
11
|
-
Formtastic::Helpers::FormHelper.builder = FormtasticBootstrap::FormBuilder
|
12
11
|
end
|
13
12
|
|
14
13
|
describe "when object is provided" do
|
@@ -18,10 +17,10 @@ describe 'email input' do
|
|
18
17
|
end)
|
19
18
|
end
|
20
19
|
|
20
|
+
it_should_have_bootstrap_horizontal_wrapping
|
21
21
|
it_should_have_input_wrapper_with_class(:email)
|
22
|
-
it_should_have_input_wrapper_with_class(:
|
22
|
+
it_should_have_input_wrapper_with_class(:input)
|
23
23
|
it_should_have_input_wrapper_with_class(:stringish)
|
24
|
-
it_should_have_input_class_in_the_right_place
|
25
24
|
it_should_have_input_wrapper_with_id("post_email_input")
|
26
25
|
it_should_have_label_with_text(/Email/)
|
27
26
|
it_should_have_label_for("post_email")
|
@@ -44,6 +43,34 @@ describe 'email input' do
|
|
44
43
|
|
45
44
|
end
|
46
45
|
|
46
|
+
describe "when index is provided" do
|
47
|
+
|
48
|
+
before do
|
49
|
+
@output_buffer = ''
|
50
|
+
mock_everything
|
51
|
+
|
52
|
+
concat(semantic_form_for(@new_post) do |builder|
|
53
|
+
concat(builder.fields_for(:author, :index => 3) do |author|
|
54
|
+
concat(author.input(:name, :as => :email))
|
55
|
+
end)
|
56
|
+
end)
|
57
|
+
end
|
58
|
+
|
59
|
+
it 'should index the id of the wrapper' do
|
60
|
+
output_buffer.should have_tag("div.control-group#post_author_attributes_3_name_input")
|
61
|
+
end
|
62
|
+
|
63
|
+
it 'should index the id of the select tag' do
|
64
|
+
output_buffer.should have_tag("input#post_author_attributes_3_name")
|
65
|
+
end
|
66
|
+
|
67
|
+
it 'should index the name of the select tag' do
|
68
|
+
output_buffer.should have_tag("input[@name='post[author_attributes][3][name]']")
|
69
|
+
end
|
70
|
+
|
71
|
+
end
|
72
|
+
|
73
|
+
|
47
74
|
describe "when required" do
|
48
75
|
it "should add the required attribute to the input's html options" do
|
49
76
|
with_config :use_required_attribute, true do
|
@@ -8,16 +8,15 @@ describe 'file input' do
|
|
8
8
|
before do
|
9
9
|
@output_buffer = ''
|
10
10
|
mock_everything
|
11
|
-
Formtastic::Helpers::FormHelper.builder = FormtasticBootstrap::FormBuilder
|
12
11
|
|
13
12
|
concat(semantic_form_for(@new_post) do |builder|
|
14
13
|
concat(builder.input(:body, :as => :file))
|
15
14
|
end)
|
16
15
|
end
|
17
16
|
|
17
|
+
it_should_have_bootstrap_horizontal_wrapping
|
18
18
|
it_should_have_input_wrapper_with_class("file")
|
19
|
-
it_should_have_input_wrapper_with_class(:
|
20
|
-
it_should_have_input_class_in_the_right_place
|
19
|
+
it_should_have_input_wrapper_with_class(:input)
|
21
20
|
it_should_have_input_wrapper_with_id("post_body_input")
|
22
21
|
it_should_have_label_with_text(/Body/)
|
23
22
|
it_should_have_label_for("post_body")
|
@@ -29,7 +28,7 @@ describe 'file input' do
|
|
29
28
|
concat(semantic_form_for(@new_post) do |builder|
|
30
29
|
concat(builder.input(:title, :as => :file, :input_html => { :class => 'myclass' }))
|
31
30
|
end)
|
32
|
-
output_buffer.should have_tag("form div.
|
31
|
+
output_buffer.should have_tag("form div.control-group div.controls input.myclass")
|
33
32
|
end
|
34
33
|
|
35
34
|
describe "when namespace is provided" do
|
@@ -48,6 +47,34 @@ describe 'file input' do
|
|
48
47
|
|
49
48
|
end
|
50
49
|
|
50
|
+
describe "when index is provided" do
|
51
|
+
|
52
|
+
before do
|
53
|
+
@output_buffer = ''
|
54
|
+
mock_everything
|
55
|
+
|
56
|
+
concat(semantic_form_for(@new_post) do |builder|
|
57
|
+
concat(builder.fields_for(:author, :index => 3) do |author|
|
58
|
+
concat(author.input(:name, :as => :file))
|
59
|
+
end)
|
60
|
+
end)
|
61
|
+
end
|
62
|
+
|
63
|
+
it 'should index the id of the control group' do
|
64
|
+
output_buffer.should have_tag("div.control-group#post_author_attributes_3_name_input")
|
65
|
+
end
|
66
|
+
|
67
|
+
it 'should index the id of the select tag' do
|
68
|
+
output_buffer.should have_tag("input#post_author_attributes_3_name")
|
69
|
+
end
|
70
|
+
|
71
|
+
it 'should index the name of the select tag' do
|
72
|
+
output_buffer.should have_tag("input[@name='post[author_attributes][3][name]']")
|
73
|
+
end
|
74
|
+
|
75
|
+
end
|
76
|
+
|
77
|
+
|
51
78
|
context "when required" do
|
52
79
|
it "should add the required attribute to the input's html options" do
|
53
80
|
with_config :use_required_attribute, true do
|
@@ -8,61 +8,62 @@ describe 'hidden input' do
|
|
8
8
|
before do
|
9
9
|
@output_buffer = ''
|
10
10
|
mock_everything
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
11
|
+
|
12
|
+
with_deprecation_silenced do
|
13
|
+
concat(semantic_form_for(@new_post) do |builder|
|
14
|
+
concat(builder.input(:secret, :as => :hidden))
|
15
|
+
concat(builder.input(:author_id, :as => :hidden, :value => 99))
|
16
|
+
concat(builder.input(:published, :as => :hidden, :input_html => {:value => true}))
|
17
|
+
concat(builder.input(:reviewer, :as => :hidden, :input_html => {:class => 'new_post_reviewer', :id => 'new_post_reviewer'}))
|
18
|
+
concat(builder.input(:author, :as => :hidden, :value => 'direct_value', :input_html => {:value => "formtastic_value"}))
|
19
|
+
end)
|
20
|
+
end
|
20
21
|
end
|
21
22
|
|
23
|
+
it_should_have_bootstrap_horizontal_wrapping
|
22
24
|
it_should_have_input_wrapper_with_class("hidden")
|
23
|
-
it_should_have_input_wrapper_with_class(:
|
24
|
-
it_should_have_input_class_in_the_right_place
|
25
|
+
it_should_have_input_wrapper_with_class(:input)
|
25
26
|
it_should_have_input_wrapper_with_id("post_secret_input")
|
26
27
|
it_should_not_have_a_label
|
27
28
|
|
28
29
|
it "should generate a input field" do
|
29
|
-
output_buffer.should have_tag("form div.
|
30
|
-
output_buffer.should have_tag("form div.
|
31
|
-
output_buffer.should have_tag("form div.
|
30
|
+
output_buffer.should have_tag("form div.control-group div.controls input#post_secret")
|
31
|
+
output_buffer.should have_tag("form div.control-group div.controls input#post_secret[@type=\"hidden\"]")
|
32
|
+
output_buffer.should have_tag("form div.control-group div.controls input#post_secret[@name=\"post[secret]\"]")
|
32
33
|
end
|
33
34
|
|
34
35
|
it "should get value from the object" do
|
35
|
-
output_buffer.should have_tag("form div.
|
36
|
+
output_buffer.should have_tag("form div.control-group div.controls input#post_secret[@type=\"hidden\"][@value=\"1\"]")
|
36
37
|
end
|
37
38
|
|
38
39
|
it "should pass any explicitly specified value - using :value" do
|
39
|
-
output_buffer.should have_tag("form div.
|
40
|
+
output_buffer.should have_tag("form div.control-group div.controls input#post_author_id[@type=\"hidden\"][@value=\"99\"]")
|
40
41
|
end
|
41
42
|
|
42
43
|
# Handle Formtastic :input_html options for consistency.
|
43
44
|
it "should pass any explicitly specified value - using :input_html options" do
|
44
|
-
output_buffer.should have_tag("form div.
|
45
|
+
output_buffer.should have_tag("form div.control-group div.controls input#post_published[@type=\"hidden\"][@value=\"true\"]")
|
45
46
|
end
|
46
47
|
|
47
48
|
it "should pass any option specified using :input_html" do
|
48
|
-
output_buffer.should have_tag("form div.
|
49
|
+
output_buffer.should have_tag("form div.control-group div.controls input#new_post_reviewer[@type=\"hidden\"][@class=\"new_post_reviewer\"]")
|
49
50
|
end
|
50
51
|
|
51
52
|
it "should prefer :input_html over directly supplied options" do
|
52
|
-
output_buffer.should have_tag("form div.
|
53
|
+
output_buffer.should have_tag("form div.control-group div.controls input#post_author_id[@type=\"hidden\"][@value=\"formtastic_value\"]")
|
53
54
|
end
|
54
55
|
|
55
56
|
it "should not render inline errors" do
|
56
57
|
@errors = mock('errors')
|
57
|
-
@errors.stub!(:[]).with(:secret).and_return(["foo", "bah"])
|
58
|
+
@errors.stub!(:[]).with(errors_matcher(:secret)).and_return(["foo", "bah"])
|
58
59
|
@new_post.stub!(:errors).and_return(@errors)
|
59
60
|
|
60
61
|
concat(semantic_form_for(@new_post) do |builder|
|
61
62
|
concat(builder.input(:secret, :as => :hidden))
|
62
63
|
end)
|
63
64
|
|
64
|
-
output_buffer.should_not have_tag("form
|
65
|
-
output_buffer.should_not have_tag("form
|
65
|
+
output_buffer.should_not have_tag("form div.control-group div.controls p.inline-errors")
|
66
|
+
output_buffer.should_not have_tag("form div.control-group div.controls ul.errors")
|
66
67
|
end
|
67
68
|
|
68
69
|
it "should not render inline hints" do
|
@@ -70,8 +71,8 @@ describe 'hidden input' do
|
|
70
71
|
concat(builder.input(:secret, :as => :hidden, :hint => "all your base are belong to use"))
|
71
72
|
end)
|
72
73
|
|
73
|
-
output_buffer.should_not have_tag("form
|
74
|
-
output_buffer.should_not have_tag("form
|
74
|
+
output_buffer.should_not have_tag("form div.control-group div.controls p.inline-hints")
|
75
|
+
output_buffer.should_not have_tag("form div.control-group div.controls ul.hints")
|
75
76
|
end
|
76
77
|
|
77
78
|
describe "when namespace is provided" do
|
@@ -79,14 +80,16 @@ describe 'hidden input' do
|
|
79
80
|
before do
|
80
81
|
@output_buffer = ''
|
81
82
|
mock_everything
|
82
|
-
|
83
|
-
|
84
|
-
concat(
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
83
|
+
|
84
|
+
with_deprecation_silenced do
|
85
|
+
concat(semantic_form_for(@new_post, :namespace => 'context2') do |builder|
|
86
|
+
concat(builder.input(:secret, :as => :hidden))
|
87
|
+
concat(builder.input(:author_id, :as => :hidden, :value => 99))
|
88
|
+
concat(builder.input(:published, :as => :hidden, :input_html => {:value => true}))
|
89
|
+
concat(builder.input(:reviewer, :as => :hidden, :input_html => {:class => 'new_post_reviewer', :id => 'new_post_reviewer'}))
|
90
|
+
concat(builder.input(:author, :as => :hidden, :value => 'direct_value', :input_html => {:value => "formtastic_value"}))
|
91
|
+
end)
|
92
|
+
end
|
90
93
|
end
|
91
94
|
|
92
95
|
attributes_to_check = [:secret, :author_id, :published, :reviewer]
|
@@ -100,6 +103,34 @@ describe 'hidden input' do
|
|
100
103
|
|
101
104
|
end
|
102
105
|
|
106
|
+
describe "when index is provided" do
|
107
|
+
|
108
|
+
before do
|
109
|
+
@output_buffer = ''
|
110
|
+
mock_everything
|
111
|
+
|
112
|
+
concat(semantic_form_for(@new_post) do |builder|
|
113
|
+
concat(builder.fields_for(:author, :index => 3) do |author|
|
114
|
+
concat(author.input(:name, :as => :hidden))
|
115
|
+
end)
|
116
|
+
end)
|
117
|
+
end
|
118
|
+
|
119
|
+
it 'should index the id of the control group' do
|
120
|
+
output_buffer.should have_tag("div.control-group#post_author_attributes_3_name_input")
|
121
|
+
end
|
122
|
+
|
123
|
+
it 'should index the id of the select tag' do
|
124
|
+
output_buffer.should have_tag("input#post_author_attributes_3_name")
|
125
|
+
end
|
126
|
+
|
127
|
+
it 'should index the name of the select tag' do
|
128
|
+
output_buffer.should have_tag("input[@name='post[author_attributes][3][name]']")
|
129
|
+
end
|
130
|
+
|
131
|
+
end
|
132
|
+
|
133
|
+
|
103
134
|
context "when required" do
|
104
135
|
it "should not add the required attribute to the input's html options" do
|
105
136
|
concat(semantic_form_for(@new_post) do |builder|
|
@@ -8,8 +8,7 @@ describe 'number input' do
|
|
8
8
|
before do
|
9
9
|
@output_buffer = ''
|
10
10
|
mock_everything
|
11
|
-
|
12
|
-
|
11
|
+
|
13
12
|
@new_post.class.stub!(:validators_on).with(:title).and_return([
|
14
13
|
active_model_numericality_validator([:title], {:only_integer=>false, :allow_nil=>false, :greater_than=>2})
|
15
14
|
])
|
@@ -25,20 +24,22 @@ describe 'number input' do
|
|
25
24
|
)
|
26
25
|
end
|
27
26
|
|
27
|
+
it_should_have_bootstrap_horizontal_wrapping
|
28
28
|
it_should_have_input_wrapper_with_class(:number)
|
29
|
-
it_should_have_input_wrapper_with_class(:
|
29
|
+
it_should_have_input_wrapper_with_class(:input)
|
30
|
+
it_should_have_input_wrapper_with_class(:numeric)
|
30
31
|
it_should_have_input_wrapper_with_class(:stringish)
|
31
|
-
it_should_have_input_class_in_the_right_place
|
32
32
|
it_should_have_input_wrapper_with_id("post_title_input")
|
33
33
|
it_should_have_label_with_text(/Title/)
|
34
34
|
it_should_have_label_for("post_title")
|
35
35
|
it_should_have_input_with_id("post_title")
|
36
36
|
it_should_have_input_with_type(:number)
|
37
37
|
it_should_have_input_with_name("post[title]")
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
38
|
+
# @todo this is not testing what it should be testing!
|
39
|
+
# it_should_use_default_text_field_size_when_not_nil(:string)
|
40
|
+
# it_should_not_use_default_text_field_size_when_nil(:string)
|
41
|
+
# it_should_apply_custom_input_attributes_when_input_html_provided(:string)
|
42
|
+
# it_should_apply_custom_for_to_label_when_input_html_id_provided(:string)
|
42
43
|
it_should_apply_error_logic_for_input_type(:number)
|
43
44
|
|
44
45
|
end
|
@@ -68,6 +69,34 @@ describe 'number input' do
|
|
68
69
|
it_should_have_label_and_input_with_id("context2_post_title")
|
69
70
|
end
|
70
71
|
|
72
|
+
describe "when index is provided" do
|
73
|
+
|
74
|
+
before do
|
75
|
+
@output_buffer = ''
|
76
|
+
mock_everything
|
77
|
+
|
78
|
+
concat(semantic_form_for(@new_post) do |builder|
|
79
|
+
concat(builder.fields_for(:author, :index => 3) do |author|
|
80
|
+
concat(author.input(:name, :as => :number))
|
81
|
+
end)
|
82
|
+
end)
|
83
|
+
end
|
84
|
+
|
85
|
+
it 'should index the id of the control group' do
|
86
|
+
output_buffer.should have_tag("div.control-group#post_author_attributes_3_name_input")
|
87
|
+
end
|
88
|
+
|
89
|
+
it 'should index the id of the select tag' do
|
90
|
+
output_buffer.should have_tag("input#post_author_attributes_3_name")
|
91
|
+
end
|
92
|
+
|
93
|
+
it 'should index the name of the select tag' do
|
94
|
+
output_buffer.should have_tag("input[@name='post[author_attributes][3][name]']")
|
95
|
+
end
|
96
|
+
|
97
|
+
end
|
98
|
+
|
99
|
+
|
71
100
|
describe "when required" do
|
72
101
|
it "should add the required attribute to the input's html options" do
|
73
102
|
with_config :use_required_attribute, true do
|
@@ -8,17 +8,16 @@ describe 'password input' do
|
|
8
8
|
before do
|
9
9
|
@output_buffer = ''
|
10
10
|
mock_everything
|
11
|
-
Formtastic::Helpers::FormHelper.builder = FormtasticBootstrap::FormBuilder
|
12
11
|
|
13
12
|
concat(semantic_form_for(@new_post) do |builder|
|
14
13
|
concat(builder.input(:title, :as => :password))
|
15
14
|
end)
|
16
15
|
end
|
17
16
|
|
17
|
+
it_should_have_bootstrap_horizontal_wrapping
|
18
18
|
it_should_have_input_wrapper_with_class(:password)
|
19
|
-
it_should_have_input_wrapper_with_class(:
|
19
|
+
it_should_have_input_wrapper_with_class(:input)
|
20
20
|
it_should_have_input_wrapper_with_class(:stringish)
|
21
|
-
it_should_have_input_class_in_the_right_place
|
22
21
|
it_should_have_input_wrapper_with_id("post_title_input")
|
23
22
|
it_should_have_label_with_text(/Title/)
|
24
23
|
it_should_have_label_for("post_title")
|
@@ -59,6 +58,34 @@ describe 'password input' do
|
|
59
58
|
|
60
59
|
end
|
61
60
|
|
61
|
+
describe "when index is provided" do
|
62
|
+
|
63
|
+
before do
|
64
|
+
@output_buffer = ''
|
65
|
+
mock_everything
|
66
|
+
|
67
|
+
concat(semantic_form_for(@new_post) do |builder|
|
68
|
+
concat(builder.fields_for(:author, :index => 3) do |author|
|
69
|
+
concat(author.input(:name, :as => :password))
|
70
|
+
end)
|
71
|
+
end)
|
72
|
+
end
|
73
|
+
|
74
|
+
it 'should index the id of the control-group' do
|
75
|
+
output_buffer.should have_tag("div.control-group#post_author_attributes_3_name_input")
|
76
|
+
end
|
77
|
+
|
78
|
+
it 'should index the id of the select tag' do
|
79
|
+
output_buffer.should have_tag("input#post_author_attributes_3_name")
|
80
|
+
end
|
81
|
+
|
82
|
+
it 'should index the name of the select tag' do
|
83
|
+
output_buffer.should have_tag("input[@name='post[author_attributes][3][name]']")
|
84
|
+
end
|
85
|
+
|
86
|
+
end
|
87
|
+
|
88
|
+
|
62
89
|
describe "when required" do
|
63
90
|
it "should add the required attribute to the input's html options" do
|
64
91
|
with_config :use_required_attribute, true do
|
@@ -8,7 +8,6 @@ describe 'phone input' do
|
|
8
8
|
before do
|
9
9
|
@output_buffer = ''
|
10
10
|
mock_everything
|
11
|
-
Formtastic::Helpers::FormHelper.builder = FormtasticBootstrap::FormBuilder
|
12
11
|
end
|
13
12
|
|
14
13
|
describe "when object is provided" do
|
@@ -18,10 +17,10 @@ describe 'phone input' do
|
|
18
17
|
end)
|
19
18
|
end
|
20
19
|
|
20
|
+
it_should_have_bootstrap_horizontal_wrapping
|
21
21
|
it_should_have_input_wrapper_with_class(:phone)
|
22
|
-
it_should_have_input_wrapper_with_class(:
|
22
|
+
it_should_have_input_wrapper_with_class(:input)
|
23
23
|
it_should_have_input_wrapper_with_class(:stringish)
|
24
|
-
it_should_have_input_class_in_the_right_place
|
25
24
|
it_should_have_input_wrapper_with_id("post_phone_input")
|
26
25
|
it_should_have_label_with_text(/Phone/)
|
27
26
|
it_should_have_label_for("post_phone")
|
@@ -44,6 +43,34 @@ describe 'phone input' do
|
|
44
43
|
|
45
44
|
end
|
46
45
|
|
46
|
+
describe "when index is provided" do
|
47
|
+
|
48
|
+
before do
|
49
|
+
@output_buffer = ''
|
50
|
+
mock_everything
|
51
|
+
|
52
|
+
concat(semantic_form_for(@new_post) do |builder|
|
53
|
+
concat(builder.fields_for(:author, :index => 3) do |author|
|
54
|
+
concat(author.input(:name, :as => :phone))
|
55
|
+
end)
|
56
|
+
end)
|
57
|
+
end
|
58
|
+
|
59
|
+
it 'should index the id of the control group' do
|
60
|
+
output_buffer.should have_tag("div.control-group#post_author_attributes_3_name_input")
|
61
|
+
end
|
62
|
+
|
63
|
+
it 'should index the id of the select tag' do
|
64
|
+
output_buffer.should have_tag("input#post_author_attributes_3_name")
|
65
|
+
end
|
66
|
+
|
67
|
+
it 'should index the name of the select tag' do
|
68
|
+
output_buffer.should have_tag("input[@name='post[author_attributes][3][name]']")
|
69
|
+
end
|
70
|
+
|
71
|
+
end
|
72
|
+
|
73
|
+
|
47
74
|
describe "when required" do
|
48
75
|
it "should add the required attribute to the input's html options" do
|
49
76
|
with_config :use_required_attribute, true do
|