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.
Files changed (90) hide show
  1. data/Gemfile +5 -3
  2. data/Gemfile.lock +72 -60
  3. data/README.md +4 -1
  4. data/Rakefile +1 -1
  5. data/VERSION +1 -1
  6. data/formtastic-bootstrap.gemspec +49 -16
  7. data/lib/formtastic-bootstrap/actions/base.rb +22 -0
  8. data/lib/formtastic-bootstrap/actions/button_action.rb +13 -0
  9. data/lib/formtastic-bootstrap/actions/input_action.rb +13 -0
  10. data/lib/formtastic-bootstrap/actions/link_action.rb +12 -0
  11. data/lib/formtastic-bootstrap/actions.rb +10 -0
  12. data/lib/formtastic-bootstrap/form_builder.rb +4 -2
  13. data/lib/formtastic-bootstrap/helpers/action_helper.rb +12 -0
  14. data/lib/formtastic-bootstrap/helpers/actions_helper.rb +24 -0
  15. data/lib/formtastic-bootstrap/helpers/fieldset_wrapper.rb +2 -4
  16. data/lib/formtastic-bootstrap/helpers/inputs_helper.rb +0 -2
  17. data/lib/formtastic-bootstrap/helpers.rb +6 -8
  18. data/lib/formtastic-bootstrap/inputs/base/choices.rb +6 -35
  19. data/lib/formtastic-bootstrap/inputs/base/collections.rb +9 -0
  20. data/lib/formtastic-bootstrap/inputs/base/grouped_collections.rb +9 -0
  21. data/lib/formtastic-bootstrap/inputs/base/hints.rb +1 -1
  22. data/lib/formtastic-bootstrap/inputs/base/labelling.rb +14 -3
  23. data/lib/formtastic-bootstrap/inputs/base/numeric.rb +9 -0
  24. data/lib/formtastic-bootstrap/inputs/base/stringish.rb +4 -5
  25. data/lib/formtastic-bootstrap/inputs/base/timeish.rb +38 -18
  26. data/lib/formtastic-bootstrap/inputs/base/wrapping.rb +22 -34
  27. data/lib/formtastic-bootstrap/inputs/base.rb +29 -6
  28. data/lib/formtastic-bootstrap/inputs/boolean_input.rb +14 -18
  29. data/lib/formtastic-bootstrap/inputs/check_boxes_input.rb +16 -11
  30. data/lib/formtastic-bootstrap/inputs/date_input.rb +3 -9
  31. data/lib/formtastic-bootstrap/inputs/date_select_input.rb +8 -0
  32. data/lib/formtastic-bootstrap/inputs/datetime_input.rb +3 -12
  33. data/lib/formtastic-bootstrap/inputs/datetime_select_input.rb +8 -0
  34. data/lib/formtastic-bootstrap/inputs/email_input.rb +1 -1
  35. data/lib/formtastic-bootstrap/inputs/file_input.rb +1 -1
  36. data/lib/formtastic-bootstrap/inputs/hidden_input.rb +1 -1
  37. data/lib/formtastic-bootstrap/inputs/number_input.rb +3 -3
  38. data/lib/formtastic-bootstrap/inputs/password_input.rb +1 -1
  39. data/lib/formtastic-bootstrap/inputs/phone_input.rb +1 -1
  40. data/lib/formtastic-bootstrap/inputs/radio_input.rb +28 -14
  41. data/lib/formtastic-bootstrap/inputs/range_input.rb +1 -1
  42. data/lib/formtastic-bootstrap/inputs/search_input.rb +1 -1
  43. data/lib/formtastic-bootstrap/inputs/select_input.rb +3 -1
  44. data/lib/formtastic-bootstrap/inputs/string_input.rb +0 -7
  45. data/lib/formtastic-bootstrap/inputs/text_input.rb +1 -1
  46. data/lib/formtastic-bootstrap/inputs/time_input.rb +3 -9
  47. data/lib/formtastic-bootstrap/inputs/time_select_input.rb +8 -0
  48. data/lib/formtastic-bootstrap/inputs/time_zone_input.rb +1 -1
  49. data/lib/formtastic-bootstrap/inputs/url_input.rb +1 -1
  50. data/lib/formtastic-bootstrap/inputs.rb +30 -23
  51. data/lib/formtastic-bootstrap.rb +16 -1
  52. data/spec/actions/button_action_spec.rb +63 -0
  53. data/spec/actions/input_action_spec.rb +59 -0
  54. data/spec/actions/link_action_spec.rb +92 -0
  55. data/spec/helpers/action_helper_spec.rb +368 -0
  56. data/spec/helpers/actions_helper_spec.rb +147 -0
  57. data/spec/helpers/input_helper_spec.rb +238 -259
  58. data/spec/helpers/inputs_helper_spec.rb +84 -25
  59. data/spec/inputs/boolean_input_spec.rb +108 -75
  60. data/spec/inputs/check_boxes_input_spec.rb +106 -91
  61. data/spec/inputs/date_select_input_spec.rb +164 -0
  62. data/spec/inputs/datetime_select_input_spec.rb +112 -0
  63. data/spec/inputs/deprecated_time_date_datetime_inputs_spec.rb +48 -0
  64. data/spec/inputs/email_input_spec.rb +30 -3
  65. data/spec/inputs/file_input_spec.rb +31 -4
  66. data/spec/inputs/hidden_input_spec.rb +63 -32
  67. data/spec/inputs/number_input_spec.rb +37 -8
  68. data/spec/inputs/password_input_spec.rb +30 -3
  69. data/spec/inputs/phone_input_spec.rb +30 -3
  70. data/spec/inputs/radio_input_spec.rb +87 -60
  71. data/spec/inputs/range_input_spec.rb +32 -5
  72. data/spec/inputs/search_input_spec.rb +29 -3
  73. data/spec/inputs/select_input_spec.rb +164 -107
  74. data/spec/inputs/string_input_spec.rb +33 -22
  75. data/spec/inputs/text_input_spec.rb +39 -14
  76. data/spec/inputs/time_select_input_spec.rb +191 -0
  77. data/spec/inputs/time_zone_input_spec.rb +17 -19
  78. data/spec/inputs/url_input_spec.rb +30 -3
  79. data/spec/spec_helper.rb +21 -15
  80. data/spec/support/custom_macros.rb +61 -228
  81. data/spec/support/fb_custom_macros.rb +23 -0
  82. metadata +109 -28
  83. data/lib/formtastic-bootstrap/helpers/buttons_helper.rb +0 -52
  84. data/spec/builder/errors_spec.rb +0 -214
  85. data/spec/helpers/buttons_helper_spec.rb +0 -149
  86. data/spec/inputs/date_input_spec.rb +0 -147
  87. data/spec/inputs/datetime_input_spec.rb +0 -101
  88. data/spec/inputs/time_input_spec.rb +0 -206
  89. data/spec/support/depracation.rb +0 -6
  90. data/spec/support/formtastic_spec_helper.rb +0 -382
@@ -8,29 +8,28 @@ describe 'text 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 => :text))
15
14
  end)
16
15
  end
17
16
 
17
+ it_should_have_bootstrap_horizontal_wrapping
18
18
  it_should_have_input_wrapper_with_class("text")
19
- it_should_have_input_wrapper_with_class(:clearfix)
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")
24
23
  it_should_have_textarea_with_id("post_body")
25
24
  it_should_have_textarea_with_name("post[body]")
26
- it_should_apply_error_logic_for_input_type(:text)
25
+ it_should_apply_error_logic_for_input_type(:number)
27
26
 
28
27
  it 'should use input_html to style inputs' do
29
28
  output_buffer.replace ''
30
29
  concat(semantic_form_for(@new_post) do |builder|
31
30
  concat(builder.input(:title, :as => :text, :input_html => { :class => 'myclass' }))
32
31
  end)
33
- output_buffer.should have_tag("form div.clearfix div.input textarea.myclass")
32
+ output_buffer.should have_tag("form div.control-group div.controls textarea.myclass")
34
33
  end
35
34
 
36
35
  it "should have a cols attribute when :cols is a number in :input_html" do
@@ -38,7 +37,7 @@ describe 'text input' do
38
37
  concat(semantic_form_for(@new_post) do |builder|
39
38
  concat(builder.input(:title, :as => :text, :input_html => { :cols => 42 }))
40
39
  end)
41
- output_buffer.should have_tag("form div.clearfix div.input textarea[@cols='42']")
40
+ output_buffer.should have_tag("form div.control-group div.controls textarea[@cols='42']")
42
41
  end
43
42
 
44
43
  it "should not have a cols attribute when :cols is nil in :input_html" do
@@ -46,7 +45,7 @@ describe 'text input' do
46
45
  concat(semantic_form_for(@new_post) do |builder|
47
46
  concat(builder.input(:title, :as => :text, :input_html => { :cols => nil }))
48
47
  end)
49
- output_buffer.should_not have_tag("form div.clearfix div.input textarea[@cols]")
48
+ output_buffer.should_not have_tag("form div.control-group div.controls textarea[@cols]")
50
49
  end
51
50
 
52
51
  it "should have a rows attribute when :rows is a number in :input_html" do
@@ -54,7 +53,7 @@ describe 'text input' do
54
53
  concat(semantic_form_for(@new_post) do |builder|
55
54
  concat(builder.input(:title, :as => :text, :input_html => { :rows => 42 }))
56
55
  end)
57
- output_buffer.should have_tag("form div.clearfix div.input textarea[@rows='42']")
56
+ output_buffer.should have_tag("form div.control-group div.controls textarea[@rows='42']")
58
57
 
59
58
  end
60
59
 
@@ -63,7 +62,7 @@ describe 'text input' do
63
62
  concat(semantic_form_for(@new_post) do |builder|
64
63
  concat(builder.input(:title, :as => :text, :input_html => { :rows => nil }))
65
64
  end)
66
- output_buffer.should_not have_tag("form div.clearfix div.input textarea[@rows]")
65
+ output_buffer.should_not have_tag("form div.control-group div.controls textarea[@rows]")
67
66
  end
68
67
 
69
68
  describe "when namespace is provided" do
@@ -71,7 +70,6 @@ describe 'text input' do
71
70
  before do
72
71
  @output_buffer = ''
73
72
  mock_everything
74
- Formtastic::Helpers::FormHelper.builder = FormtasticBootstrap::FormBuilder
75
73
 
76
74
  concat(semantic_form_for(@new_post, :namespace => 'context2') do |builder|
77
75
  concat(builder.input(:body, :as => :text))
@@ -84,6 +82,33 @@ describe 'text input' do
84
82
 
85
83
  end
86
84
 
85
+ describe "when index is provided" do
86
+
87
+ before do
88
+ @output_buffer = ''
89
+ mock_everything
90
+
91
+ concat(semantic_form_for(@new_post) do |builder|
92
+ concat(builder.fields_for(:author, :index => 3) do |author|
93
+ concat(author.input(:name, :as => :text))
94
+ end)
95
+ end)
96
+ end
97
+
98
+ it 'should index the id of the control-group' do
99
+ output_buffer.should have_tag("div.control-group#post_author_attributes_3_name_input")
100
+ end
101
+
102
+ it 'should index the id of the select tag' do
103
+ output_buffer.should have_tag("textarea#post_author_attributes_3_name")
104
+ end
105
+
106
+ it 'should index the name of the select tag' do
107
+ output_buffer.should have_tag("textarea[@name='post[author_attributes][3][name]']")
108
+ end
109
+
110
+ end
111
+
87
112
  context "when required" do
88
113
  it "should add the required attribute to the input's html options" do
89
114
  with_config :use_required_attribute, true do
@@ -119,7 +144,7 @@ describe 'text input' do
119
144
  concat(semantic_form_for(@new_post) do |builder|
120
145
  concat(builder.input(:title, :as => :text))
121
146
  end)
122
- output_buffer.should have_tag("form div.clearfix div.input textarea[@rows='12']")
147
+ output_buffer.should have_tag("form div.control-group div.controls textarea[@rows='12']")
123
148
  end
124
149
  end
125
150
 
@@ -128,7 +153,7 @@ describe 'text input' do
128
153
  concat(semantic_form_for(@new_post) do |builder|
129
154
  concat(builder.input(:title, :as => :text))
130
155
  end)
131
- output_buffer.should_not have_tag("form div.clearfix div.input textarea[@rows]")
156
+ output_buffer.should_not have_tag("form div.control-group div.controls textarea[@rows]")
132
157
  end
133
158
 
134
159
  end
@@ -144,7 +169,7 @@ describe 'text input' do
144
169
  concat(semantic_form_for(@new_post) do |builder|
145
170
  concat(builder.input(:title, :as => :text))
146
171
  end)
147
- output_buffer.should have_tag("form div.clearfix div.input textarea[@cols='10']")
172
+ output_buffer.should have_tag("form div.control-group div.controls textarea[@cols='10']")
148
173
  end
149
174
  end
150
175
 
@@ -153,7 +178,7 @@ describe 'text input' do
153
178
  concat(semantic_form_for(@new_post) do |builder|
154
179
  concat(builder.input(:title, :as => :text))
155
180
  end)
156
- output_buffer.should_not have_tag("form div.clearfix div.input textarea[@cols]")
181
+ output_buffer.should_not have_tag("form div.control-group div.controls textarea[@cols]")
157
182
  end
158
183
 
159
184
  end
@@ -0,0 +1,191 @@
1
+ # encoding: utf-8
2
+ require 'spec_helper'
3
+
4
+ describe 'time 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
+ before do
15
+ ::I18n.backend.reload!
16
+ output_buffer.replace ''
17
+ end
18
+
19
+ describe "with :ignore_date => true" do
20
+ before do
21
+ concat(semantic_form_for(@new_post) do |builder|
22
+ concat(builder.input(:publish_at, :as => :time_select, :ignore_date => true))
23
+ end)
24
+ end
25
+
26
+ it 'should not have hidden inputs for day, month and year' do
27
+ output_buffer.should_not have_tag('input#post_publish_at_1i')
28
+ output_buffer.should_not have_tag('input#post_publish_at_2i')
29
+ output_buffer.should_not have_tag('input#post_publish_at_3i')
30
+ end
31
+
32
+ it 'should have an input for hour and minute' do
33
+ output_buffer.should have_tag('select#post_publish_at_4i')
34
+ output_buffer.should have_tag('select#post_publish_at_5i')
35
+ end
36
+
37
+ end
38
+
39
+ describe "with :ignore_date => false" do
40
+ before do
41
+ @new_post.stub(:publish_at).and_return(Time.parse('2010-11-07'))
42
+ concat(semantic_form_for(@new_post) do |builder|
43
+ concat(builder.input(:publish_at, :as => :time_select, :ignore_date => false))
44
+ end)
45
+ end
46
+
47
+ it 'should have a hidden input for day, month and year' do
48
+ output_buffer.should have_tag('input#post_publish_at_1i')
49
+ output_buffer.should have_tag('input#post_publish_at_2i')
50
+ output_buffer.should have_tag('input#post_publish_at_3i')
51
+ output_buffer.should have_tag('input#post_publish_at_1i[@value="2010"]')
52
+ output_buffer.should have_tag('input#post_publish_at_2i[@value="11"]')
53
+ output_buffer.should have_tag('input#post_publish_at_3i[@value="7"]')
54
+ end
55
+
56
+ it 'should have an select for hour and minute' do
57
+ output_buffer.should have_tag('select#post_publish_at_4i')
58
+ output_buffer.should have_tag('select#post_publish_at_5i')
59
+ end
60
+
61
+ end
62
+
63
+ describe "with :ignore_date => false and no initial Time" do
64
+ before do
65
+ @new_post.stub(:publish_at)
66
+ concat(semantic_form_for(@new_post) do |builder|
67
+ concat(builder.input(:publish_at, :as => :time_select, :ignore_date => false))
68
+ end)
69
+ end
70
+
71
+ it 'should have a hidden input for day, month and year' do
72
+ output_buffer.should have_tag('input#post_publish_at_1i')
73
+ output_buffer.should have_tag('input#post_publish_at_2i')
74
+ output_buffer.should have_tag('input#post_publish_at_3i')
75
+ end
76
+
77
+ it 'should not have values in hidden inputs for day, month and year' do
78
+ output_buffer.should have_tag('input#post_publish_at_1i[@value=""]')
79
+ output_buffer.should have_tag('input#post_publish_at_2i[@value=""]')
80
+ output_buffer.should have_tag('input#post_publish_at_3i[@value=""]')
81
+ end
82
+
83
+ it 'should have an select for hour and minute' do
84
+ output_buffer.should have_tag('select#post_publish_at_4i')
85
+ output_buffer.should have_tag('select#post_publish_at_5i')
86
+ end
87
+
88
+ end
89
+
90
+ describe "without seconds" do
91
+ before do
92
+ concat(semantic_form_for(@new_post) do |builder|
93
+ concat(builder.input(:publish_at, :as => :time_select))
94
+ end)
95
+ end
96
+
97
+ it_should_have_bootstrap_horizontal_wrapping
98
+ it_should_have_input_wrapper_with_class("time_select")
99
+ it_should_have_input_wrapper_with_class(:input)
100
+ it_should_have_input_wrapper_with_id("post_publish_at_input")
101
+ it_should_apply_error_logic_for_input_type(:time_select)
102
+
103
+ it 'should have a legend and label with the label text inside the fieldset' do
104
+ output_buffer.should have_tag('form div.control-group.time_select label.control-label', /Publish at/)
105
+ end
106
+
107
+ it 'should have two selects for hour and minute' do
108
+ output_buffer.should have_tag('form div.control-group.time_select div.controls select', :count => 2)
109
+ end
110
+ end
111
+
112
+ describe "with seconds" do
113
+ before do
114
+ concat(semantic_form_for(@new_post) do |builder|
115
+ concat(builder.input(:publish_at, :as => :time_select, :include_seconds => true))
116
+ end)
117
+ end
118
+
119
+ it 'should have three selects for hour, minute and seconds' do
120
+ output_buffer.should have_tag('form div.control-group.time_select div.controls select', :count => 3)
121
+ end
122
+ end
123
+ end
124
+
125
+ describe ':labels option' do
126
+ it "should provide a message that :labels is not supported" do
127
+ pending ':labels is not supported'
128
+ end
129
+ end
130
+
131
+ describe ':namespace option' do
132
+ before do
133
+ concat(semantic_form_for(@new_post, :namespace => 'form2') do |builder|
134
+ concat(builder.input(:publish_at, :as => :time_select))
135
+ end)
136
+ end
137
+
138
+ it 'should have a tag matching the namespace' do
139
+ output_buffer.should have_tag('#form2_post_publish_at_input')
140
+ output_buffer.should have_tag('#form2_post_publish_at_4i')
141
+ output_buffer.should have_tag('#form2_post_publish_at_5i')
142
+ end
143
+ end
144
+
145
+ describe "when required" do
146
+ it "should add the required attribute to the input's html options" do
147
+ with_config :use_required_attribute, true do
148
+ concat(semantic_form_for(@new_post) do |builder|
149
+ concat(builder.input(:title, :as => :time_select, :required => true))
150
+ end)
151
+ output_buffer.should have_tag("select[@required]", :count => 2)
152
+ end
153
+ end
154
+ end
155
+
156
+ describe "when index is provided" do
157
+
158
+ before do
159
+ concat(semantic_form_for(@new_post) do |builder|
160
+ concat(builder.fields_for(:author, :index => 3) do |author|
161
+ concat(author.input(:created_at, :as => :time_select))
162
+ end)
163
+ end)
164
+ end
165
+
166
+ it 'should index the id of the control-group' do
167
+ output_buffer.should have_tag("div.control-group#post_author_attributes_3_created_at_input")
168
+ end
169
+
170
+ it 'should index the id of the select tag' do
171
+ output_buffer.should have_tag("input#post_author_attributes_3_created_at_1i")
172
+ output_buffer.should have_tag("input#post_author_attributes_3_created_at_2i")
173
+ output_buffer.should have_tag("input#post_author_attributes_3_created_at_3i")
174
+ output_buffer.should have_tag("select#post_author_attributes_3_created_at_4i")
175
+ output_buffer.should have_tag("select#post_author_attributes_3_created_at_5i")
176
+ end
177
+
178
+ it 'should index the name of the select tag' do
179
+ output_buffer.should have_tag("input[@name='post[author_attributes][3][created_at(1i)]']")
180
+ output_buffer.should have_tag("input[@name='post[author_attributes][3][created_at(2i)]']")
181
+ output_buffer.should have_tag("input[@name='post[author_attributes][3][created_at(3i)]']")
182
+ output_buffer.should have_tag("select[@name='post[author_attributes][3][created_at(4i)]']")
183
+ output_buffer.should have_tag("select[@name='post[author_attributes][3][created_at(5i)]']")
184
+ end
185
+
186
+ end
187
+
188
+ end
189
+
190
+
191
+
@@ -8,35 +8,35 @@ describe 'time_zone 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(:time_zone))
15
14
  end)
16
15
  end
17
16
 
17
+ it_should_have_bootstrap_horizontal_wrapping
18
18
  it_should_have_input_wrapper_with_class("time_zone")
19
- it_should_have_input_wrapper_with_class(:clearfix)
19
+ it_should_have_input_wrapper_with_class(:input)
20
20
  it_should_have_input_wrapper_with_id("post_time_zone_input")
21
21
  it_should_apply_error_logic_for_input_type(:time_zone)
22
22
 
23
23
  it 'should generate a label for the input' do
24
- output_buffer.should have_tag('form div label')
25
- output_buffer.should have_tag('form div label[@for="post_time_zone"]')
26
- output_buffer.should have_tag('form div label', /Time zone/)
24
+ output_buffer.should have_tag('form div.control-group label.control-label')
25
+ output_buffer.should have_tag('form div.control-group label.control-label[@for="post_time_zone"]')
26
+ output_buffer.should have_tag('form div.control-group label.control-label', /Time zone/)
27
27
  end
28
28
 
29
29
  it "should generate a select" do
30
- output_buffer.should have_tag("form div select")
31
- output_buffer.should have_tag("form div select#post_time_zone")
32
- output_buffer.should have_tag("form div select[@name=\"post[time_zone]\"]")
30
+ output_buffer.should have_tag("form div.control-group div.controls select")
31
+ output_buffer.should have_tag("form div.control-group div.controls select#post_time_zone")
32
+ output_buffer.should have_tag("form div.control-group div.controls select[@name=\"post[time_zone]\"]")
33
33
  end
34
34
 
35
35
  it 'should use input_html to style inputs' do
36
36
  concat(semantic_form_for(@new_post) do |builder|
37
37
  concat(builder.input(:time_zone, :input_html => { :class => 'myclass' }))
38
38
  end)
39
- output_buffer.should have_tag("form div select.myclass")
39
+ output_buffer.should have_tag("form div.control-group div.controls select.myclass")
40
40
  end
41
41
 
42
42
  describe "when namespace is provided" do
@@ -44,7 +44,6 @@ describe 'time_zone input' do
44
44
  before do
45
45
  @output_buffer = ''
46
46
  mock_everything
47
- Formtastic::Helpers::FormHelper.builder = FormtasticBootstrap::FormBuilder
48
47
 
49
48
  concat(semantic_form_for(@new_post, :namespace => 'context2') do |builder|
50
49
  concat(builder.input(:time_zone))
@@ -62,7 +61,6 @@ describe 'time_zone input' do
62
61
  before do
63
62
  @output_buffer = ''
64
63
  mock_everything
65
- Formtastic::Helpers::FormHelper.builder = FormtasticBootstrap::FormBuilder
66
64
 
67
65
  concat(semantic_form_for(@new_post) do |builder|
68
66
  concat(builder.fields_for(:author, :index => 3) do |author|
@@ -71,8 +69,8 @@ describe 'time_zone input' do
71
69
  end)
72
70
  end
73
71
 
74
- it 'should index the id of the wrapper' do
75
- output_buffer.should have_tag("div#post_author_attributes_3_name_input")
72
+ it 'should index the id of the control group' do
73
+ output_buffer.should have_tag("div.control-group#post_author_attributes_3_name_input")
76
74
  end
77
75
 
78
76
  it 'should index the id of the select tag' do
@@ -94,15 +92,15 @@ describe 'time_zone input' do
94
92
  end
95
93
 
96
94
  it 'should generate labels' do
97
- output_buffer.should have_tag('form div label')
98
- output_buffer.should have_tag('form div label[@for="project_time_zone"]')
99
- output_buffer.should have_tag('form div label', /Time zone/)
95
+ output_buffer.should have_tag('form div.control-group label.control-label')
96
+ output_buffer.should have_tag('form div.control-group label.control-label[@for="project_time_zone"]')
97
+ output_buffer.should have_tag('form div.control-group label.control-label', /Time zone/)
100
98
  end
101
99
 
102
100
  it 'should generate select inputs' do
103
- output_buffer.should have_tag("form div select")
104
- output_buffer.should have_tag("form div select#project_time_zone")
105
- output_buffer.should have_tag("form div select[@name=\"project[time_zone]\"]")
101
+ output_buffer.should have_tag("form div.control-group div.controls select")
102
+ output_buffer.should have_tag("form div.control-group div.controls select#project_time_zone")
103
+ output_buffer.should have_tag("form div.control-group div.controls select[@name=\"project[time_zone]\"]")
106
104
  end
107
105
  end
108
106
 
@@ -8,7 +8,6 @@ describe 'url 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 'url 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(:url)
22
- it_should_have_input_wrapper_with_class(:clearfix)
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_url_input")
26
25
  it_should_have_label_with_text(/Url/)
27
26
  it_should_have_label_for("post_url")
@@ -44,6 +43,34 @@ describe 'url 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 => :url))
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
data/spec/spec_helper.rb CHANGED
@@ -1,24 +1,30 @@
1
+ require 'bundler/setup'
2
+
1
3
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
2
4
  $LOAD_PATH.unshift(File.dirname(__FILE__))
3
- require 'rspec'
4
- require 'rspec_tag_matchers'
5
- require 'rubygems'
6
- require 'bundler'
7
- Bundler.setup
8
5
 
9
- require 'active_support'
10
- require 'action_pack'
11
- require 'action_view'
12
- require 'action_controller'
13
- require 'action_dispatch'
6
+ # require 'rspec'
7
+ # require 'rspec_tag_matchers'
8
+ # require 'rubygems'
9
+
10
+ # Find Formtastic and grab its testing support first.
11
+ formtastic_full_gem_path = Bundler.load.specs.find{|s| s.name == "formtastic" }.full_gem_path
12
+ require File.join(formtastic_full_gem_path, 'spec', 'spec_helper.rb')
14
13
 
14
+ # Now add in ours.
15
15
  require 'formtastic-bootstrap'
16
+ require File.join(File.dirname(__FILE__), "support", "custom_macros.rb")
17
+ require File.join(File.dirname(__FILE__), "support", "fb_custom_macros.rb")
16
18
 
17
- # Requires supporting files with custom matchers and macros, etc,
18
- # in ./support/ and its subdirectories.
19
- Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
20
19
 
21
20
  RSpec.configure do |config|
22
- config.include RspecTagMatchers
23
- config.include CustomMacros
21
+ config.before(:suite) do
22
+ Formtastic::Helpers::FormHelper.builder = FormtasticBootstrap::FormBuilder
23
+ end
24
+ config.include FbCustomMacros
24
25
  end
26
+
27
+ # RSpec.configure do |config|
28
+ # config.include RspecTagMatchers
29
+ # config.include CustomMacros
30
+ # end