case_form 0.0.3

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 (88) hide show
  1. data/CHANGELOG.rdoc +1 -0
  2. data/MIT-LICENSE.rdoc +20 -0
  3. data/Manifest +86 -0
  4. data/README.rdoc +0 -0
  5. data/Rakefile +30 -0
  6. data/TODO.rdoc +7 -0
  7. data/case_form.gemspec +31 -0
  8. data/lib/case_form.rb +88 -0
  9. data/lib/case_form/associations.rb +50 -0
  10. data/lib/case_form/buttons.rb +175 -0
  11. data/lib/case_form/core_ext/form_helper.rb +54 -0
  12. data/lib/case_form/core_ext/layout_helper.rb +16 -0
  13. data/lib/case_form/core_ext/sentence_error.rb +38 -0
  14. data/lib/case_form/element.rb +40 -0
  15. data/lib/case_form/element/base.rb +95 -0
  16. data/lib/case_form/element/button.rb +64 -0
  17. data/lib/case_form/element/error.rb +54 -0
  18. data/lib/case_form/element/errors/complex_error.rb +107 -0
  19. data/lib/case_form/element/errors/simple_error.rb +76 -0
  20. data/lib/case_form/element/fieldset.rb +35 -0
  21. data/lib/case_form/element/hint.rb +54 -0
  22. data/lib/case_form/element/input.rb +106 -0
  23. data/lib/case_form/element/inputs/collection/checkbox_input.rb +36 -0
  24. data/lib/case_form/element/inputs/collection/radio_input.rb +27 -0
  25. data/lib/case_form/element/inputs/collection/select_input.rb +22 -0
  26. data/lib/case_form/element/inputs/collection_input.rb +89 -0
  27. data/lib/case_form/element/inputs/datetime/date_input.rb +45 -0
  28. data/lib/case_form/element/inputs/datetime/date_time_input.rb +50 -0
  29. data/lib/case_form/element/inputs/datetime/time_input.rb +34 -0
  30. data/lib/case_form/element/inputs/datetime/time_zone_input.rb +24 -0
  31. data/lib/case_form/element/inputs/file_input.rb +13 -0
  32. data/lib/case_form/element/inputs/hidden_input.rb +17 -0
  33. data/lib/case_form/element/inputs/number_input.rb +42 -0
  34. data/lib/case_form/element/inputs/search_input.rb +32 -0
  35. data/lib/case_form/element/inputs/string_input.rb +18 -0
  36. data/lib/case_form/element/inputs/text_input.rb +19 -0
  37. data/lib/case_form/element/label.rb +52 -0
  38. data/lib/case_form/element/nested_model.rb +105 -0
  39. data/lib/case_form/element/nested_models/handle.rb +18 -0
  40. data/lib/case_form/element/nested_models/handles/destructor_handle.rb +47 -0
  41. data/lib/case_form/element/nested_models/handles/generator_handle.rb +55 -0
  42. data/lib/case_form/element_ext/associationable.rb +54 -0
  43. data/lib/case_form/element_ext/columnable.rb +21 -0
  44. data/lib/case_form/element_ext/naming.rb +17 -0
  45. data/lib/case_form/element_ext/validationable.rb +13 -0
  46. data/lib/case_form/errors.rb +189 -0
  47. data/lib/case_form/form_builder.rb +11 -0
  48. data/lib/case_form/inputs.rb +1095 -0
  49. data/lib/case_form/labels.rb +102 -0
  50. data/lib/case_form/version.rb +6 -0
  51. data/lib/generators/case_form/install_generator.rb +33 -0
  52. data/lib/generators/case_form/templates/case_form.rb +63 -0
  53. data/lib/generators/case_form/templates/javascripts/jquery.case_form.js +10 -0
  54. data/lib/generators/case_form/templates/javascripts/prototype.case_form.js +0 -0
  55. data/lib/generators/case_form/templates/locales/en.yml +28 -0
  56. data/lib/generators/case_form/templates/locales/pl.yml +28 -0
  57. data/lib/generators/case_form/templates/stylesheets/stylesheet.css +93 -0
  58. data/lib/generators/case_form/templates/stylesheets/stylesheet_changes.css +1 -0
  59. data/lib/generators/case_form/uninstall_generator.rb +30 -0
  60. data/rails/init.rb +1 -0
  61. data/test/element/button_test.rb +85 -0
  62. data/test/element/errors/complex_error_test.rb +140 -0
  63. data/test/element/errors/simple_error_test.rb +92 -0
  64. data/test/element/fieldset_test.rb +28 -0
  65. data/test/element/hint_test.rb +81 -0
  66. data/test/element/input_test.rb +197 -0
  67. data/test/element/inputs/collection/checkbox_input_test.rb +176 -0
  68. data/test/element/inputs/collection/radio_input_test.rb +156 -0
  69. data/test/element/inputs/collection/select_input_test.rb +152 -0
  70. data/test/element/inputs/datetime/date_input_test.rb +160 -0
  71. data/test/element/inputs/datetime/datetime_input_test.rb +227 -0
  72. data/test/element/inputs/datetime/time_input_test.rb +72 -0
  73. data/test/element/inputs/datetime/time_zone_input_test.rb +42 -0
  74. data/test/element/inputs/file_input_test.rb +13 -0
  75. data/test/element/inputs/hidden_input_test.rb +13 -0
  76. data/test/element/inputs/number_input_test.rb +50 -0
  77. data/test/element/inputs/search_input_test.rb +13 -0
  78. data/test/element/inputs/string_input_test.rb +33 -0
  79. data/test/element/inputs/text_input_test.rb +13 -0
  80. data/test/element/label_test.rb +62 -0
  81. data/test/element/nested_model_test.rb +163 -0
  82. data/test/element/nested_models/handles/destructor_handle_test.rb +35 -0
  83. data/test/element/nested_models/handles/generator_handle_test.rb +27 -0
  84. data/test/form_builder_test.rb +25 -0
  85. data/test/form_helper_test.rb +15 -0
  86. data/test/lib/models.rb +268 -0
  87. data/test/test_helper.rb +74 -0
  88. metadata +235 -0
@@ -0,0 +1,140 @@
1
+ require 'test_helper'
2
+
3
+ class ComplexErrorTest < ActionView::TestCase
4
+ setup do
5
+ @error_tag = CaseForm.error_tag = :div
6
+ @header_tag = CaseForm.complex_error_header_tag = :h2
7
+ @message_tag = CaseForm.complex_error_message_tag = :p
8
+ end
9
+
10
+ def errors_case_form_for(options={})
11
+ concat(case_form_for(@invalid_user) { |f| concat(f.errors options) })
12
+ end
13
+
14
+ test "should generate complex error" do
15
+ errors_case_form_for
16
+ assert_select "#{@error_tag}.errors", 1
17
+ assert_select @header_tag.to_s, 1
18
+ assert_select @message_tag.to_s, 1
19
+ assert_select "ul", 1
20
+ end
21
+
22
+ test "shouldn't generate complex error for valid object" do
23
+ concat(case_form_for(@user) { |f| concat(f.errors) })
24
+ assert_select "#{@error_tag}.errors", 0 # No error :div
25
+ end
26
+
27
+ test "should generate complex error as sentance in config" do
28
+ CaseForm.error_type = :sentence
29
+ errors_case_form_for
30
+ assert_select "#{@error_tag}.errors", 1
31
+ assert_select "ul", 1
32
+ assert_select "li", 3
33
+ end
34
+
35
+ test "should generate complex error as sentance in options" do
36
+ errors_case_form_for(:as => :sentence)
37
+ assert_select "#{@error_tag}.errors", 1
38
+ assert_select "ul", 1
39
+ assert_select "li", 3
40
+ end
41
+
42
+ test "should generate complex error as list in config" do
43
+ CaseForm.error_type = :list
44
+ errors_case_form_for
45
+ assert_select "#{@error_tag}.errors", 1
46
+ assert_select "ul", 1
47
+ assert_select "li", 5
48
+ end
49
+
50
+ test "should generate complex error as list in options" do
51
+ errors_case_form_for(:as => :list)
52
+ assert_select "#{@error_tag}.errors", 1
53
+ assert_select "ul", 1
54
+ assert_select "li", 5
55
+ end
56
+
57
+ test "should generate complex error with default connectors" do
58
+ errors_case_form_for(:as => :sentance)
59
+ assert_select "li", /,/
60
+ assert_select "li", /and/
61
+ end
62
+
63
+ test "should generate complex error with special connectors" do
64
+ errors_case_form_for(:as => :sentance, :connector => " + ", :last_connector => " AND ")
65
+ assert_select "li", /\+/
66
+ assert_select "li", /AND/
67
+ end
68
+
69
+ test "should generate complex error with default HTML class" do
70
+ errors_case_form_for
71
+ assert_select "#{@error_tag}.errors", 1
72
+ end
73
+
74
+ test "should generate complex error with specific HTML class" do
75
+ specific_class = "some_class"
76
+ errors_case_form_for(:class => specific_class)
77
+ assert_select "#{@error_tag}.#{specific_class}", 1
78
+ end
79
+
80
+ test "should generate complex error with default HTML id" do
81
+ errors_case_form_for
82
+ assert_select "#{@error_tag}#invalid_user_errors", 1
83
+ end
84
+
85
+ test "should generate complex error with specific HTML id" do
86
+ specific_id = "some_id"
87
+ errors_case_form_for(:id => specific_id)
88
+ assert_select "#{@error_tag}##{specific_id}", 1
89
+ end
90
+
91
+ test "should generate complex error with specific tag" do
92
+ specific_tag = CaseForm.error_tag = "span"
93
+ errors_case_form_for
94
+ assert_select specific_tag
95
+ end
96
+
97
+ test "should generate complex error with specific tag in options" do
98
+ specific_tag = "span"
99
+ errors_case_form_for(:tag => specific_tag)
100
+ assert_select specific_tag
101
+ end
102
+
103
+ test "should generate complex error with specific header tag" do
104
+ specific_tag = CaseForm.complex_error_header_tag = "h4"
105
+ errors_case_form_for
106
+ assert_select specific_tag
107
+ end
108
+
109
+ test "should generate complex error with specific header tag in options" do
110
+ specific_tag = "h4"
111
+ errors_case_form_for(:header_tag => specific_tag)
112
+ assert_select specific_tag
113
+ end
114
+
115
+ test "should generate complex error with specific message tag" do
116
+ specific_tag = CaseForm.complex_error_message_tag = "pre"
117
+ errors_case_form_for
118
+ assert_select specific_tag
119
+ end
120
+
121
+ test "should generate complex error with specific message tag in options" do
122
+ specific_tag = "h4"
123
+ errors_case_form_for(:message_tag => specific_tag)
124
+ assert_select specific_tag
125
+ end
126
+
127
+ test "should generate complex error without header message" do
128
+ errors_case_form_for(:header_message => false)
129
+ assert_select @header_tag.to_s, 0
130
+ end
131
+
132
+ test "should generate complex error without message" do
133
+ errors_case_form_for(:message => false)
134
+ assert_select @message_tag.to_s, 0
135
+ end
136
+
137
+ test "should generate hint with wrong options" do
138
+ assert_raise(ArgumentError) { errors_case_form_for(:foo => :bar) }
139
+ end
140
+ end
@@ -0,0 +1,92 @@
1
+ require 'test_helper'
2
+
3
+ class SimpleErrorTest < ActionView::TestCase
4
+ setup do
5
+ @error_tag = CaseForm.error_tag = :div
6
+ end
7
+
8
+ def error_case_form_for(method, options={})
9
+ concat(case_form_for(@invalid_user) { |f| concat(f.error method, options) })
10
+ end
11
+
12
+ test "should generate standard error" do
13
+ error_case_form_for(:firstname)
14
+ assert_select "#{@error_tag}.error", 1
15
+ end
16
+
17
+ test "shouldn't generate standard error for valid object" do
18
+ concat(case_form_for(@user) { |f| concat(f.error :firstname) })
19
+ assert_select "#{@error_tag}.error", 0 # No error :div
20
+ end
21
+
22
+ test "should generate standard error as sentence in config" do
23
+ CaseForm.error_type = :sentence
24
+ error_case_form_for(:firstname)
25
+ assert_select "#{@error_tag}.error", 1
26
+ end
27
+
28
+ test "should generate standard error as sentence in options" do
29
+ error_case_form_for(:firstname, :as => :sentence)
30
+ assert_select "#{@error_tag}.error", 1
31
+ end
32
+
33
+ test "should generate standard error as list in config" do
34
+ CaseForm.error_type = :list
35
+ error_case_form_for(:firstname)
36
+ assert_select "#{@error_tag}.error ul li"
37
+ end
38
+
39
+ test "should generate standard error as list in options" do
40
+ error_case_form_for(:firstname, :as => :list)
41
+ assert_select "#{@error_tag}.error ul li"
42
+ end
43
+
44
+ test "should generate standard error with default connectors" do
45
+ error_case_form_for(:firstname, :as => :sentence)
46
+ assert_select "#{@error_tag}.error", /,/
47
+ end
48
+
49
+ test "should generate standard error with special connectors" do
50
+ error_case_form_for(:firstname, :as => :sentence, :connector => " + ", :last_connector => " AND ")
51
+ assert_select "#{@error_tag}.error", /\+/
52
+ assert_select "#{@error_tag}.error", /AND/
53
+ end
54
+
55
+ test "should generate standard error with default HTML class" do
56
+ error_case_form_for(:firstname)
57
+ assert_select "#{@error_tag}.error", 1
58
+ end
59
+
60
+ test "should generate standard error with specific HTML class" do
61
+ specific_class = "some_class"
62
+ error_case_form_for(:firstname, :class => specific_class)
63
+ assert_select "#{@error_tag}.#{specific_class}"
64
+ end
65
+
66
+ test "should generate standard error with default HTML id" do
67
+ error_case_form_for(:firstname)
68
+ assert_select "#{@error_tag}#invalid_user_firstname_error"
69
+ end
70
+
71
+ test "should generate standard error with specific HTML id" do
72
+ specific_id = "some_id"
73
+ error_case_form_for(:firstname, :id => specific_id)
74
+ assert_select "#{@error_tag}##{specific_id}"
75
+ end
76
+
77
+ test "should generate standard error with specific tag" do
78
+ specific_tag = CaseForm.error_tag = "span"
79
+ error_case_form_for(:firstname)
80
+ assert_select specific_tag
81
+ end
82
+
83
+ test "should generate standard error with specific tag in options" do
84
+ specific_tag = "span"
85
+ error_case_form_for(:firstname, :tag => specific_tag)
86
+ assert_select specific_tag
87
+ end
88
+
89
+ test "should generate hint with wrong options" do
90
+ assert_raise(ArgumentError) { error_case_form_for(:firstname, :foo => :bar) }
91
+ end
92
+ end
@@ -0,0 +1,28 @@
1
+ require 'test_helper'
2
+
3
+ class FieldsetTest < ActionView::TestCase
4
+ def fieldset_case_form_for(object, method, options={})
5
+ concat(case_form_for(object) { |f| f.send(method, options) })
6
+ end
7
+
8
+ def fieldset_case_fields_for(object, method, attribute, options={})
9
+ concat(case_form_for(object) { |f| f.send(method, attribute, options) })
10
+ end
11
+
12
+ test "should generate fieldset for attributes" do
13
+ fieldset_case_form_for(@user, :attributes)
14
+ assert_select "fieldset", :count => 1
15
+ end
16
+
17
+ test "should generate fieldset for buttons" do
18
+ fieldset_case_form_for(@user, :buttons)
19
+ assert_select "fieldset", :count => 1
20
+ end
21
+
22
+ test "should generate fieldset with legend" do
23
+ legend = "Actions"
24
+ fieldset_case_form_for(@user, :attributes, :text => legend)
25
+ assert_select "fieldset", :count => 1
26
+ assert_select "legend", :count => 1, :text => legend
27
+ end
28
+ end
@@ -0,0 +1,81 @@
1
+ require 'test_helper'
2
+
3
+ class HintTest < ActionView::TestCase
4
+ setup do
5
+ @tag = CaseForm.hint_tag = :span
6
+ @text = "Your firstname"
7
+ end
8
+
9
+ def hint_form_for(method, options={})
10
+ concat(case_form_for(@user) { |f| f.hint(method, options) })
11
+ end
12
+
13
+ test "should generate hint" do
14
+ hint_form_for(:firstname, :text => @text)
15
+ assert_select @tag.to_s, @text
16
+ end
17
+
18
+ test "should generate hint with string" do
19
+ hint_form_for(@text)
20
+ assert_select @tag.to_s, @text
21
+ end
22
+
23
+ test "should generate hint with symbol as attribute" do
24
+ hint_form_for(:firstname)
25
+ assert_select @tag.to_s, "translation missing: en, case_form, hints, user, firstname"
26
+ end
27
+
28
+ test "should generate hint with default HTML class" do
29
+ hint_form_for(:firstname, :text => @text)
30
+ assert_select @tag.to_s, :class => "hint"
31
+ end
32
+
33
+ test "should generate hint with specific HTML class" do
34
+ specific_class = "some_class"
35
+ hint_form_for(:firstname, :class => specific_class, :text => @text)
36
+ assert_select @tag.to_s, :class => specific_class
37
+ end
38
+
39
+ test "should generate hint with default HTML id" do
40
+ hint_form_for(:firstname, :text => @text)
41
+ assert_select @tag.to_s, :id =>"user_firstname_hint"
42
+ end
43
+
44
+ test "should generate hint with specific HTML id" do
45
+ specific_id = "some_id"
46
+ hint_form_for(:firstname, :id => specific_id, :text => @text)
47
+ assert_select @tag.to_s, :id => specific_id
48
+ end
49
+
50
+ test "should generate hint with specific tag" do
51
+ specific_tag = CaseForm.hint_tag = "div"
52
+ hint_form_for(:firstname, :text => @text)
53
+ assert_select specific_tag, :id => "user_firstname_hint"
54
+ end
55
+
56
+ test "should generate hint with specific tag in options" do
57
+ specific_tag = "div"
58
+ hint_form_for(:firstname, :tag => specific_tag, :text => @text)
59
+ assert_select specific_tag
60
+ end
61
+
62
+ test "should generate hint with multiple options" do
63
+ specific_tag = "div"
64
+ specific_id = "some_id"
65
+ hint_form_for(:firstname, :tag => specific_tag, :id => specific_id)
66
+ assert_select specific_tag, :id => specific_id
67
+ end
68
+
69
+ test "should generate hint with wrong options" do
70
+ assert_raise(ArgumentError) { hint_form_for(:firstname, :foo => :bar) }
71
+ end
72
+
73
+ test "should generate hint with custom data (HTML attribute)" do
74
+ hint_form_for(:firstname, :custom => { :foo => :bar })
75
+ assert_select "#{@tag.to_s}[data-foo=bar]", 1
76
+ end
77
+
78
+ test "should generate hint with invalid custom data (HTML attribute)" do
79
+ assert_raise(ArgumentError) { hint_form_for(:firstname, :custom => :foo) }
80
+ end
81
+ end
@@ -0,0 +1,197 @@
1
+ # coding: utf-8
2
+ require 'test_helper'
3
+
4
+ class InputTest < ActionView::TestCase
5
+ def input_case_form_for(object, input, attribute, options={})
6
+ concat(case_form_for(object) { |f| f.send(input, attribute, options) })
7
+ end
8
+
9
+ test "should generate input" do
10
+ input_case_form_for(@user, :string, :firstname)
11
+ assert_select "input[type=text]", 1
12
+ end
13
+
14
+ test "should generate input without label" do
15
+ input_case_form_for(@user, :string, :firstname, :label => false)
16
+ assert_select "input[type=text]", 1
17
+ assert_select "label", 0
18
+ end
19
+
20
+ test "should generate input with label" do
21
+ text = "Some text"
22
+ input_case_form_for(@user, :string, :firstname, :label => text)
23
+ assert_select "input[type=text]", 1
24
+ assert_select "label", text
25
+ end
26
+
27
+ test "should generate input with label options" do
28
+ html_class = "super_html"
29
+ input_case_form_for(@user, :string, :firstname, :label => { :class => html_class })
30
+ assert_select "input[type=text]", 1
31
+ assert_select "label.#{html_class}", 1
32
+ end
33
+
34
+ test "should generate input without error" do
35
+ input_case_form_for(@user, :string, :firstname, :error => false)
36
+ assert_select "input[type=text]", 1
37
+ assert_select "#{cf_config(:error_tag)}#user_firstname_error", 0
38
+ end
39
+
40
+ test "should generate input with error" do
41
+ input_case_form_for(@invalid_user, :string, :firstname)
42
+ assert_select "input[type=text]", 1
43
+ assert_select "#{cf_config(:error_tag)}#invalid_user_firstname_error", 1
44
+ end
45
+
46
+ test "should generate input with error options" do
47
+ html_class = "super_html"
48
+ input_case_form_for(@invalid_user, :string, :firstname, :error => { :class => html_class })
49
+ assert_select "input[type=text]", 1
50
+ assert_select "#{cf_config(:error_tag)}.#{html_class}", 1
51
+ end
52
+
53
+ test "should generate input without hint" do
54
+ input_case_form_for(@user, :string, :firstname)
55
+ assert_select "input[type=text]", 1
56
+ assert_select "#{cf_config(:hint_tag)}#user_firstname_hint", 0
57
+ end
58
+
59
+ test "should generate input without hint in option" do
60
+ input_case_form_for(@user, :string, :firstname, :hint => false)
61
+ assert_select "input[type=text]", 1
62
+ assert_select "#{cf_config(:hint_tag)}#user_firstname_hint", 0
63
+ end
64
+
65
+ test "should generate input with hint" do
66
+ text = "Some hint"
67
+ input_case_form_for(@user, :string, :firstname, :hint => text)
68
+ assert_select "input[type=text]", 1
69
+ assert_select "#{cf_config(:hint_tag)}#user_firstname_hint", text
70
+ end
71
+
72
+ test "should generate input with hint options" do
73
+ html_class = "super_html"
74
+ input_case_form_for(@user, :string, :firstname, :hint => { :class => html_class })
75
+ assert_select "input[type=text]", 1
76
+ assert_select "#{cf_config(:hint_tag)}#user_firstname_hint.#{html_class}", 1
77
+ end
78
+
79
+ test "should generate input with size options" do
80
+ input_case_form_for(@user, :string, :firstname, :size => 55)
81
+ assert_select "input[type=text][size=55]", 1
82
+ end
83
+
84
+ test "should generate input with defined type" do
85
+ input_case_form_for(@user, :attribute, :firstname, :as => :string)
86
+ assert_select "input[type=text]", 1
87
+ end
88
+
89
+ test "shouldn't generate input as bad input type" do
90
+ assert_raise(ArgumentError) { input_case_form_for(@user, :attribute, :firstname, :as => :foo) }
91
+ end
92
+
93
+ test "should generate dynamic input as string" do
94
+ input_case_form_for(@user, :attribute, :firstname)
95
+ assert_select "input[type=text]", 1
96
+ end
97
+
98
+ test "should generate dynamic input as text" do
99
+ input_case_form_for(@user, :attribute, :description)
100
+ assert_select "textarea", 1
101
+ end
102
+
103
+ test "should generate dynamic input as number" do
104
+ input_case_form_for(@user, :attribute, :age)
105
+ assert_select "input[type=number]", 1
106
+ end
107
+
108
+ test "should generate dynamic input as datetime" do
109
+ input_case_form_for(@user, :attribute, :created_at)
110
+ assert_select "select", 5
111
+ end
112
+
113
+ test "should generate dynamic input as date" do
114
+ input_case_form_for(@user, :attribute, :born_at)
115
+ assert_select "select", 3
116
+ end
117
+
118
+ test "should generate dynamic input as time" do
119
+ input_case_form_for(@user, :attribute, :login_at)
120
+ assert_select "select", 2
121
+ end
122
+
123
+ test "should generate dynamic input as time zone" do
124
+ input_case_form_for(@user, :attribute, :user_zone)
125
+ assert_select "select", 1
126
+ end
127
+
128
+ test "should generate dynamic input as checkbox" do
129
+ input_case_form_for(@user, :attribute, :admin)
130
+ assert_select "input[type=checkbox]", 1
131
+ end
132
+
133
+ test "should generate dynamic input from name as password" do
134
+ input_case_form_for(@user, :attribute, :password_confirmation)
135
+ assert_select "input[type=password]", 1
136
+ end
137
+
138
+ test "should generate dynamic input from name as file" do
139
+ input_case_form_for(@user, :attribute, :file_path)
140
+ assert_select "input[type=file]", 1
141
+ end
142
+
143
+ test "should generate dynamic input from name as url" do
144
+ input_case_form_for(@user, :attribute, :twitter_url)
145
+ assert_select "input[type=url]", 1
146
+ end
147
+
148
+ test "should generate dynamic input from name as phone" do
149
+ input_case_form_for(@user, :attribute, :mobile_phone)
150
+ assert_select "input[type=tel]", 1
151
+ end
152
+
153
+ test "should generate input with invalid options" do
154
+ assert_raise(ArgumentError) { input_case_form_for(@user, :attribute, :firstname, :foo => :bar) }
155
+ end
156
+
157
+ test "should generate input with custom data (HTML attribute)" do
158
+ input_case_form_for(@user, :attribute, :firstname, :custom => { :foo => :bar })
159
+ assert_select "input[type=text][data-foo=bar]", 1
160
+ end
161
+
162
+ test "should generate input with invalid custom data (HTML attribute)" do
163
+ assert_raise(ArgumentError) { input_case_form_for(@user, :attribute, :firstname, :custom => :foo) }
164
+ end
165
+
166
+ test "should generate input as required" do
167
+ input_case_form_for(@user, :string, :firstname, :required => true)
168
+ assert_select "input[type=text][required=required]", 1
169
+ assert_select "label", "Firstname*"
170
+ end
171
+
172
+ test "should generate input as not required" do
173
+ input_case_form_for(@user, :string, :firstname, :required => false)
174
+ assert_select "input[type=text][required=required]", 0
175
+ assert_select "label", "Firstname"
176
+ end
177
+
178
+ test "should generate input as required from validation" do
179
+ input_case_form_for(@valid_user, :string, :firstname)
180
+ assert_select "input[type=text][required=required]", 1
181
+ assert_select "label", "Firstname*"
182
+ end
183
+
184
+ test "should generate input as required from column NULL" do
185
+ input_case_form_for(@user, :string, :lastname)
186
+ assert_select "input[type=text][required=required]", 1
187
+ assert_select "label", "Lastname*"
188
+ end
189
+
190
+ test "should generate input as required from config" do
191
+ CaseForm.all_fields_required = true
192
+ input_case_form_for(@user, :string, :firstname)
193
+ CaseForm.all_fields_required = false
194
+ assert_select "input[type=text][required=required]", 1
195
+ assert_select "label", "Firstname*"
196
+ end
197
+ end