formtastic-bootstrap 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (72) hide show
  1. data/.document +5 -0
  2. data/.rspec +1 -0
  3. data/Gemfile +12 -0
  4. data/Gemfile.lock +123 -0
  5. data/LICENSE.txt +20 -0
  6. data/README.md +159 -0
  7. data/Rakefile +49 -0
  8. data/VERSION +1 -0
  9. data/formtastic-bootstrap.gemspec +128 -0
  10. data/lib/action_view/helpers/text_field_date_helper.rb +166 -0
  11. data/lib/formtastic-bootstrap.rb +5 -0
  12. data/lib/formtastic-bootstrap/form_builder.rb +38 -0
  13. data/lib/formtastic-bootstrap/helpers.rb +19 -0
  14. data/lib/formtastic-bootstrap/helpers/buttons_helper.rb +47 -0
  15. data/lib/formtastic-bootstrap/helpers/fieldset_wrapper.rb +37 -0
  16. data/lib/formtastic-bootstrap/helpers/input_helper.rb +12 -0
  17. data/lib/formtastic-bootstrap/helpers/inputs_helper.rb +36 -0
  18. data/lib/formtastic-bootstrap/inputs.rb +28 -0
  19. data/lib/formtastic-bootstrap/inputs/base.rb +22 -0
  20. data/lib/formtastic-bootstrap/inputs/base/choices.rb +49 -0
  21. data/lib/formtastic-bootstrap/inputs/base/errors.rb +48 -0
  22. data/lib/formtastic-bootstrap/inputs/base/hints.rb +27 -0
  23. data/lib/formtastic-bootstrap/inputs/base/html.rb +21 -0
  24. data/lib/formtastic-bootstrap/inputs/base/labelling.rb +18 -0
  25. data/lib/formtastic-bootstrap/inputs/base/stringish.rb +18 -0
  26. data/lib/formtastic-bootstrap/inputs/base/timeish.rb +35 -0
  27. data/lib/formtastic-bootstrap/inputs/base/wrapping.rb +56 -0
  28. data/lib/formtastic-bootstrap/inputs/boolean_input.rb +33 -0
  29. data/lib/formtastic-bootstrap/inputs/check_boxes_input.rb +35 -0
  30. data/lib/formtastic-bootstrap/inputs/date_input.rb +16 -0
  31. data/lib/formtastic-bootstrap/inputs/datetime_input.rb +19 -0
  32. data/lib/formtastic-bootstrap/inputs/email_input.rb +15 -0
  33. data/lib/formtastic-bootstrap/inputs/file_input.rb +14 -0
  34. data/lib/formtastic-bootstrap/inputs/hidden_input.rb +12 -0
  35. data/lib/formtastic-bootstrap/inputs/number_input.rb +15 -0
  36. data/lib/formtastic-bootstrap/inputs/password_input.rb +15 -0
  37. data/lib/formtastic-bootstrap/inputs/phone_input.rb +15 -0
  38. data/lib/formtastic-bootstrap/inputs/radio_input.rb +32 -0
  39. data/lib/formtastic-bootstrap/inputs/range_input.rb +15 -0
  40. data/lib/formtastic-bootstrap/inputs/search_input.rb +15 -0
  41. data/lib/formtastic-bootstrap/inputs/select_input.rb +14 -0
  42. data/lib/formtastic-bootstrap/inputs/string_input.rb +15 -0
  43. data/lib/formtastic-bootstrap/inputs/text_input.rb +14 -0
  44. data/lib/formtastic-bootstrap/inputs/time_input.rb +16 -0
  45. data/lib/formtastic-bootstrap/inputs/url_input.rb +14 -0
  46. data/spec/builder/errors_spec.rb +214 -0
  47. data/spec/builder/semantic_fields_for_spec.rb +130 -0
  48. data/spec/helpers/input_helper_spec.rb +956 -0
  49. data/spec/helpers/inputs_helper_spec.rb +577 -0
  50. data/spec/inputs/boolean_input_spec.rb +193 -0
  51. data/spec/inputs/check_boxes_input_spec.rb +439 -0
  52. data/spec/inputs/date_input_spec.rb +147 -0
  53. data/spec/inputs/datetime_input_spec.rb +101 -0
  54. data/spec/inputs/email_input_spec.rb +59 -0
  55. data/spec/inputs/file_input_spec.rb +63 -0
  56. data/spec/inputs/hidden_input_spec.rb +122 -0
  57. data/spec/inputs/number_input_spec.rb +787 -0
  58. data/spec/inputs/password_input_spec.rb +73 -0
  59. data/spec/inputs/phone_input_spec.rb +59 -0
  60. data/spec/inputs/radio_input_spec.rb +240 -0
  61. data/spec/inputs/range_input_spec.rb +479 -0
  62. data/spec/inputs/search_input_spec.rb +59 -0
  63. data/spec/inputs/select_input_spec.rb +567 -0
  64. data/spec/inputs/string_input_spec.rb +182 -0
  65. data/spec/inputs/text_input_spec.rb +163 -0
  66. data/spec/inputs/time_input_spec.rb +206 -0
  67. data/spec/inputs/url_input_spec.rb +59 -0
  68. data/spec/spec_helper.rb +24 -0
  69. data/spec/support/custom_macros.rb +704 -0
  70. data/spec/support/depracation.rb +6 -0
  71. data/spec/support/formtastic_spec_helper.rb +382 -0
  72. metadata +204 -0
@@ -0,0 +1,147 @@
1
+ # encoding: utf-8
2
+ require 'spec_helper'
3
+
4
+ describe 'date input' do
5
+
6
+ include FormtasticSpecHelper
7
+
8
+ before do
9
+ @output_buffer = ''
10
+ mock_everything
11
+ Formtastic::Helpers::FormHelper.builder = FormtasticBootstrap::FormBuilder
12
+ end
13
+
14
+ describe "general" do
15
+
16
+ before do
17
+ output_buffer.replace ''
18
+ concat(semantic_form_for(@new_post) do |builder|
19
+ concat(builder.input(:publish_at, :as => :date, :order => [:year, :month, :day]))
20
+ end)
21
+ end
22
+
23
+ it_should_have_input_wrapper_with_class("date")
24
+ it_should_have_input_wrapper_with_class(:clearfix)
25
+ it_should_have_input_wrapper_with_class(:stringish)
26
+ it_should_have_input_class_in_the_right_place
27
+ it_should_have_input_wrapper_with_id("post_publish_at_input")
28
+ it_should_have_a_nested_div
29
+ # it_should_have_a_nested_fieldset_with_class('fragments')
30
+ # it_should_have_a_nested_ordered_list_with_class('fragments-group')
31
+ it_should_apply_error_logic_for_input_type(:date)
32
+
33
+ it 'should have a legend and label with the label text inside the fieldset' do
34
+ output_buffer.should have_tag('form div.clearfix.date label', /Publish at/)
35
+ end
36
+
37
+ # it 'should associate the legend label with the first select' do
38
+ # output_buffer.should have_tag('form li.date fieldset legend.label')
39
+ # output_buffer.should have_tag('form li.date fieldset legend.label label')
40
+ # output_buffer.should have_tag('form li.date fieldset legend.label label[@for]')
41
+ # output_buffer.should have_tag('form li.date fieldset legend.label label[@for="post_publish_at_1i"]')
42
+ # end
43
+
44
+ it 'should (sort of) associate the label with the input' do
45
+ output_buffer.should have_tag('form div.clearfix.date label[@for="post_publish_at"]')
46
+ output_buffer.should have_tag('form div.clearfix.date div.input input[@id="post_publish_at[date]"]')
47
+ end
48
+
49
+ # it 'should have an ordered list of three items inside the fieldset' do
50
+ # output_buffer.should have_tag('form li.date fieldset ol.fragments-group')
51
+ # output_buffer.should have_tag('form li.date fieldset ol li.fragment', :count => 3)
52
+ # end
53
+
54
+ # it 'should have three labels for year, month and day' do
55
+ # output_buffer.should have_tag('form li.date fieldset ol li label', :count => 3)
56
+ # output_buffer.should have_tag('form li.date fieldset ol li label', /year/i)
57
+ # output_buffer.should have_tag('form li.date fieldset ol li label', /month/i)
58
+ # output_buffer.should have_tag('form li.date fieldset ol li label', /day/i)
59
+ # end
60
+ it 'should have an text input inside the div' do
61
+ output_buffer.should have_tag('form div.clearfix.date div.input input[@type="text"]')
62
+ end
63
+
64
+ # it 'should have three selects for year, month and day' do
65
+ # output_buffer.should have_tag('form li.date fieldset ol li select', :count => 3)
66
+ # end
67
+ end
68
+
69
+ describe "when namespace is provided" do
70
+
71
+ before do
72
+ output_buffer.replace ''
73
+ concat(semantic_form_for(@new_post, :namespace => "context2") do |builder|
74
+ concat(builder.input(:publish_at, :as => :date, :order => [:year, :month, :day]))
75
+ end)
76
+ end
77
+
78
+ it_should_have_input_wrapper_with_id("context2_post_publish_at_input")
79
+ it_should_have_input_with_id("context2_post_publish_at[date]")
80
+ # it_should_have_select_with_id("context2_post_publish_at_2i")
81
+ # it_should_have_select_with_id("context2_post_publish_at_3i")
82
+
83
+ end
84
+
85
+ # We only use a single label for the entire entity.
86
+
87
+ # describe ':labels option' do
88
+ # fields = [:year, :month, :day]
89
+ # fields.each do |field|
90
+ # it "should replace the #{field} label with the specified text if :labels[:#{field}] is set" do
91
+ # output_buffer.replace ''
92
+ # concat(semantic_form_for(@new_post) do |builder|
93
+ # concat(builder.input(:created_at, :as => :date, :labels => { field => "another #{field} label" }))
94
+ # end)
95
+ # output_buffer.should have_tag('form li.date fieldset ol li label', :count => fields.length)
96
+ # fields.each do |f|
97
+ # output_buffer.should have_tag('form li.date fieldset ol li label', f == field ? /another #{f} label/i : /#{f}/i)
98
+ # end
99
+ # end
100
+ #
101
+ # it "should not display the label for the #{field} field when :labels[:#{field}] is blank" do
102
+ # output_buffer.replace ''
103
+ # concat(semantic_form_for(@new_post) do |builder|
104
+ # concat(builder.input(:created_at, :as => :date, :labels => { field => "" }))
105
+ # end)
106
+ # output_buffer.should have_tag('form li.date fieldset ol li label', :count => fields.length-1)
107
+ # fields.each do |f|
108
+ # output_buffer.should have_tag('form li.date fieldset ol li label', /#{f}/i) unless field == f
109
+ # end
110
+ # end
111
+ #
112
+ # it "should not display the label for the #{field} field when :labels[:#{field}] is false" do
113
+ # output_buffer.replace ''
114
+ # concat(semantic_form_for(@new_post) do |builder|
115
+ # concat(builder.input(:created_at, :as => :date, :labels => { field => false }))
116
+ # end)
117
+ # output_buffer.should have_tag('form li.date fieldset ol li label', :count => fields.length-1)
118
+ # fields.each do |f|
119
+ # output_buffer.should have_tag('form li.date fieldset ol li label', /#{f}/i) unless field == f
120
+ # end
121
+ # end
122
+ #
123
+ # it "should not render unsafe HTML when :labels[:#{field}] is false" do
124
+ # output_buffer.replace ''
125
+ # concat(semantic_form_for(@new_post) do |builder|
126
+ # concat(builder.input(:created_at, :as => :time, :include_seconds => true, :labels => { field => false }))
127
+ # end)
128
+ # output_buffer.should_not include(">")
129
+ # end
130
+ #
131
+ # end
132
+ # end
133
+
134
+ describe "when required" do
135
+ it "should add the required attribute to the input's html options" do
136
+ with_config :use_required_attribute, true do
137
+ concat(semantic_form_for(@new_post) do |builder|
138
+ concat(builder.input(:title, :as => :date, :required => true))
139
+ end)
140
+ # output_buffer.should have_tag("select[@required]", :count => 3)
141
+ # We only have one text field.
142
+ output_buffer.should have_tag("input[@required]", :count => 1)
143
+ end
144
+ end
145
+ end
146
+
147
+ end
@@ -0,0 +1,101 @@
1
+ # encoding: utf-8
2
+ require 'spec_helper'
3
+
4
+ describe 'datetime input' do
5
+
6
+ include FormtasticSpecHelper
7
+
8
+ before do
9
+ @output_buffer = ''
10
+ mock_everything
11
+ Formtastic::Helpers::FormHelper.builder = FormtasticBootstrap::FormBuilder
12
+ end
13
+
14
+ describe "general" do
15
+
16
+ before do
17
+ ::I18n.backend.store_translations :en, {}
18
+ output_buffer.replace ''
19
+ concat(semantic_form_for(@new_post) do |builder|
20
+ concat(builder.input(:publish_at, :as => :datetime))
21
+ end)
22
+ end
23
+
24
+ it_should_have_input_wrapper_with_class("datetime")
25
+ it_should_have_input_wrapper_with_class(:clearfix)
26
+ it_should_have_input_wrapper_with_class(:stringish) # Decide about this.
27
+ it_should_have_input_class_in_the_right_place
28
+ it_should_have_input_wrapper_with_id("post_publish_at_input")
29
+ it_should_have_a_nested_div
30
+ # it_should_have_a_nested_fieldset_with_class('fragments')
31
+ # it_should_have_a_nested_ordered_list_with_class('fragments-group')
32
+ it_should_apply_error_logic_for_input_type(:datetime)
33
+
34
+ it 'should have a legend and label with the label text inside the fieldset' do
35
+ output_buffer.should have_tag('form div.clearfix.datetime label', /Publish at/)
36
+ end
37
+
38
+ # it 'should associate the legend label with the first select' do
39
+ # output_buffer.should have_tag('form li.datetime fieldset legend.label')
40
+ # output_buffer.should have_tag('form li.datetime fieldset legend.label label')
41
+ # output_buffer.should have_tag('form li.datetime fieldset legend.label label[@for]')
42
+ # output_buffer.should have_tag('form li.datetime fieldset legend.label label[@for="post_publish_at_1i"]')
43
+ # end
44
+
45
+ # it 'should have an ordered list of five items inside the fieldset' do
46
+ # output_buffer.should have_tag('form li.datetime fieldset ol.fragments-group')
47
+ # output_buffer.should have_tag('form li.datetime fieldset ol li.fragment', :count => 5)
48
+ # end
49
+
50
+ # it 'should have five labels for year, month and day' do
51
+ # output_buffer.should have_tag('form li.datetime fieldset ol li label', :count => 5)
52
+ # output_buffer.should have_tag('form li.datetime fieldset ol li label', /year/i)
53
+ # output_buffer.should have_tag('form li.datetime fieldset ol li label', /month/i)
54
+ # output_buffer.should have_tag('form li.datetime fieldset ol li label', /day/i)
55
+ # output_buffer.should have_tag('form li.datetime fieldset ol li label', /hour/i)
56
+ # output_buffer.should have_tag('form li.datetime fieldset ol li label', /min/i)
57
+ # end
58
+
59
+ # it 'should have five selects' do
60
+ # output_buffer.should have_tag('form li.datetime fieldset ol li select', :count => 5)
61
+ # end
62
+
63
+ it 'should have two inputs' do
64
+ output_buffer.should have_tag('form div.clearfix.datetime div.input input', :count => 2)
65
+ end
66
+
67
+ end
68
+
69
+ describe "when namespace is provided" do
70
+
71
+ before do
72
+ output_buffer.replace ''
73
+ concat(semantic_form_for(@new_post, :namespace => "context2") do |builder|
74
+ concat(builder.input(:publish_at, :as => :datetime))
75
+ end)
76
+ end
77
+
78
+ it_should_have_input_wrapper_with_id("context2_post_publish_at_input")
79
+ it_should_have_input_with_id("context2_post_publish_at[date]")
80
+ it_should_have_input_with_id("context2_post_publish_at[time]")
81
+ # it_should_have_input_with_id("context2_post_publish_at_1i")
82
+ # it_should_have_select_with_id("context2_post_publish_at_2i")
83
+ # it_should_have_select_with_id("context2_post_publish_at_3i")
84
+ # it_should_have_select_with_id("context2_post_publish_at_4i")
85
+ # it_should_have_select_with_id("context2_post_publish_at_5i")
86
+
87
+ end
88
+
89
+ describe "when required" do
90
+ it "should add the required attribute to the input's html options" do
91
+ with_config :use_required_attribute, true do
92
+ concat(semantic_form_for(@new_post) do |builder|
93
+ concat(builder.input(:title, :as => :datetime, :required => true))
94
+ end)
95
+ # output_buffer.should have_tag("select[@required]", :count => 5)
96
+ output_buffer.should have_tag("input[@required]", :count => 2)
97
+ end
98
+ end
99
+ end
100
+
101
+ end
@@ -0,0 +1,59 @@
1
+ # encoding: utf-8
2
+ require 'spec_helper'
3
+
4
+ describe 'email input' do
5
+
6
+ include FormtasticSpecHelper
7
+
8
+ before do
9
+ @output_buffer = ''
10
+ mock_everything
11
+ Formtastic::Helpers::FormHelper.builder = FormtasticBootstrap::FormBuilder
12
+ end
13
+
14
+ describe "when object is provided" do
15
+ before do
16
+ concat(semantic_form_for(@new_post) do |builder|
17
+ concat(builder.input(:email))
18
+ end)
19
+ end
20
+
21
+ it_should_have_input_wrapper_with_class(:email)
22
+ it_should_have_input_wrapper_with_class(:clearfix)
23
+ it_should_have_input_wrapper_with_class(:stringish)
24
+ it_should_have_input_class_in_the_right_place
25
+ it_should_have_input_wrapper_with_id("post_email_input")
26
+ it_should_have_label_with_text(/Email/)
27
+ it_should_have_label_for("post_email")
28
+ it_should_have_input_with_id("post_email")
29
+ it_should_have_input_with_type(:email)
30
+ it_should_have_input_with_name("post[email]")
31
+
32
+ end
33
+
34
+ describe "when namespace is provided" do
35
+
36
+ before do
37
+ concat(semantic_form_for(@new_post, :namespace => 'context2') do |builder|
38
+ concat(builder.input(:email))
39
+ end)
40
+ end
41
+
42
+ it_should_have_input_wrapper_with_id("context2_post_email_input")
43
+ it_should_have_label_and_input_with_id("context2_post_email")
44
+
45
+ end
46
+
47
+ describe "when required" do
48
+ it "should add the required attribute to the input's html options" do
49
+ with_config :use_required_attribute, true do
50
+ concat(semantic_form_for(@new_post) do |builder|
51
+ concat(builder.input(:title, :as => :email, :required => true))
52
+ end)
53
+ output_buffer.should have_tag("input[@required]")
54
+ end
55
+ end
56
+ end
57
+
58
+ end
59
+
@@ -0,0 +1,63 @@
1
+ # encoding: utf-8
2
+ require 'spec_helper'
3
+
4
+ describe 'file input' do
5
+
6
+ include FormtasticSpecHelper
7
+
8
+ before do
9
+ @output_buffer = ''
10
+ mock_everything
11
+ Formtastic::Helpers::FormHelper.builder = FormtasticBootstrap::FormBuilder
12
+
13
+ concat(semantic_form_for(@new_post) do |builder|
14
+ concat(builder.input(:body, :as => :file))
15
+ end)
16
+ end
17
+
18
+ it_should_have_input_wrapper_with_class("file")
19
+ it_should_have_input_wrapper_with_class(:clearfix)
20
+ it_should_have_input_class_in_the_right_place
21
+ it_should_have_input_wrapper_with_id("post_body_input")
22
+ it_should_have_label_with_text(/Body/)
23
+ it_should_have_label_for("post_body")
24
+ it_should_have_input_with_id("post_body")
25
+ it_should_have_input_with_name("post[body]")
26
+ it_should_apply_error_logic_for_input_type(:file)
27
+
28
+ it 'should use input_html to style inputs' do
29
+ concat(semantic_form_for(@new_post) do |builder|
30
+ concat(builder.input(:title, :as => :file, :input_html => { :class => 'myclass' }))
31
+ end)
32
+ output_buffer.should have_tag("form div.clearfix div.input input.myclass")
33
+ end
34
+
35
+ describe "when namespace is provided" do
36
+
37
+ before do
38
+ @output_buffer = ''
39
+ mock_everything
40
+
41
+ concat(semantic_form_for(@new_post, :namespace => 'context2') do |builder|
42
+ concat(builder.input(:body, :as => :file))
43
+ end)
44
+ end
45
+
46
+ it_should_have_input_wrapper_with_id("context2_post_body_input")
47
+ it_should_have_label_and_input_with_id("context2_post_body")
48
+
49
+ end
50
+
51
+ context "when required" do
52
+ it "should add the required attribute to the input's html options" do
53
+ with_config :use_required_attribute, true do
54
+ concat(semantic_form_for(@new_post) do |builder|
55
+ concat(builder.input(:title, :as => :file, :required => true))
56
+ end)
57
+ output_buffer.should have_tag("input[@required]")
58
+ end
59
+ end
60
+ end
61
+
62
+ end
63
+
@@ -0,0 +1,122 @@
1
+ # encoding: utf-8
2
+ require 'spec_helper'
3
+
4
+ describe 'hidden input' do
5
+
6
+ include FormtasticSpecHelper
7
+
8
+ before do
9
+ @output_buffer = ''
10
+ mock_everything
11
+ Formtastic::Helpers::FormHelper.builder = FormtasticBootstrap::FormBuilder
12
+
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
21
+
22
+ it_should_have_input_wrapper_with_class("hidden")
23
+ it_should_have_input_wrapper_with_class(:clearfix)
24
+ it_should_have_input_class_in_the_right_place
25
+ it_should_have_input_wrapper_with_id("post_secret_input")
26
+ it_should_not_have_a_label
27
+
28
+ it "should generate a input field" do
29
+ output_buffer.should have_tag("form div.clearfix div.input input#post_secret")
30
+ output_buffer.should have_tag("form div.clearfix div.input input#post_secret[@type=\"hidden\"]")
31
+ output_buffer.should have_tag("form div.clearfix div.input input#post_secret[@name=\"post[secret]\"]")
32
+ end
33
+
34
+ it "should get value from the object" do
35
+ output_buffer.should have_tag("form div.clearfix div.input input#post_secret[@type=\"hidden\"][@value=\"1\"]")
36
+ end
37
+
38
+ it "should pass any explicitly specified value - using :value" do
39
+ output_buffer.should have_tag("form div.clearfix div.input input#post_author_id[@type=\"hidden\"][@value=\"99\"]")
40
+ end
41
+
42
+ # Handle Formtastic :input_html options for consistency.
43
+ it "should pass any explicitly specified value - using :input_html options" do
44
+ output_buffer.should have_tag("form div.clearfix div.input input#post_published[@type=\"hidden\"][@value=\"true\"]")
45
+ end
46
+
47
+ it "should pass any option specified using :input_html" do
48
+ output_buffer.should have_tag("form div.clearfix div.input input#new_post_reviewer[@type=\"hidden\"][@class=\"new_post_reviewer\"]")
49
+ end
50
+
51
+ it "should prefer :input_html over directly supplied options" do
52
+ output_buffer.should have_tag("form div.clearfix div.input input#post_author_id[@type=\"hidden\"][@value=\"formtastic_value\"]")
53
+ end
54
+
55
+ it "should not render inline errors" do
56
+ @errors = mock('errors')
57
+ @errors.stub!(:[]).with(:secret).and_return(["foo", "bah"])
58
+ @new_post.stub!(:errors).and_return(@errors)
59
+
60
+ concat(semantic_form_for(@new_post) do |builder|
61
+ concat(builder.input(:secret, :as => :hidden))
62
+ end)
63
+
64
+ output_buffer.should_not have_tag("form li p.inline-errors")
65
+ output_buffer.should_not have_tag("form li ul.errors")
66
+ end
67
+
68
+ it "should not render inline hints" do
69
+ concat(semantic_form_for(@new_post) do |builder|
70
+ concat(builder.input(:secret, :as => :hidden, :hint => "all your base are belong to use"))
71
+ end)
72
+
73
+ output_buffer.should_not have_tag("form li p.inline-hints")
74
+ output_buffer.should_not have_tag("form li ul.hints")
75
+ end
76
+
77
+ describe "when namespace is provided" do
78
+
79
+ before do
80
+ @output_buffer = ''
81
+ mock_everything
82
+
83
+ concat(semantic_form_for(@new_post, :namespace => 'context2') do |builder|
84
+ concat(builder.input(:secret, :as => :hidden))
85
+ concat(builder.input(:author_id, :as => :hidden, :value => 99))
86
+ concat(builder.input(:published, :as => :hidden, :input_html => {:value => true}))
87
+ concat(builder.input(:reviewer, :as => :hidden, :input_html => {:class => 'new_post_reviewer', :id => 'new_post_reviewer'}))
88
+ concat(builder.input(:author, :as => :hidden, :value => 'direct_value', :input_html => {:value => "formtastic_value"}))
89
+ end)
90
+ end
91
+
92
+ attributes_to_check = [:secret, :author_id, :published, :reviewer]
93
+ attributes_to_check.each do |a|
94
+ it_should_have_input_wrapper_with_id("context2_post_#{a}_input")
95
+ end
96
+
97
+ (attributes_to_check - [:reviewer]).each do |a|
98
+ it_should_have_input_with_id("context2_post_#{a}")
99
+ end
100
+
101
+ end
102
+
103
+ context "when required" do
104
+ it "should not add the required attribute to the input's html options" do
105
+ concat(semantic_form_for(@new_post) do |builder|
106
+ concat(builder.input(:title, :as => :hidden, :required => true))
107
+ end)
108
+ output_buffer.should_not have_tag("input[@required]")
109
+ end
110
+ end
111
+
112
+ context "when :autofocus is provided in :input_html" do
113
+ it "should not add the autofocus attribute to the input's html options" do
114
+ concat(semantic_form_for(@new_post) do |builder|
115
+ concat(builder.input(:title, :as => :hidden, :input_html => {:autofocus => true}))
116
+ end)
117
+ output_buffer.should_not have_tag("input[@autofocus]")
118
+ end
119
+ end
120
+
121
+ end
122
+