dynamic_fieldsets 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (119) hide show
  1. data/CHANGELOG +4 -0
  2. data/Gemfile +21 -0
  3. data/Gemfile.lock +157 -0
  4. data/MIT-LICENSE +20 -0
  5. data/README.rdoc +19 -0
  6. data/Rakefile +69 -0
  7. data/VERSION +1 -0
  8. data/app/controllers/dynamic_fieldsets/fields_controller.rb +75 -0
  9. data/app/controllers/dynamic_fieldsets/fieldset_associators_controller.rb +24 -0
  10. data/app/controllers/dynamic_fieldsets/fieldsets_controller.rb +89 -0
  11. data/app/helpers/dynamic_fieldsets/fields_helper.rb +19 -0
  12. data/app/helpers/dynamic_fieldsets_helper.rb +207 -0
  13. data/app/models/dynamic_fieldsets/field.rb +85 -0
  14. data/app/models/dynamic_fieldsets/field_default.rb +14 -0
  15. data/app/models/dynamic_fieldsets/field_html_attribute.rb +15 -0
  16. data/app/models/dynamic_fieldsets/field_option.rb +18 -0
  17. data/app/models/dynamic_fieldsets/field_record.rb +11 -0
  18. data/app/models/dynamic_fieldsets/fieldset.rb +57 -0
  19. data/app/models/dynamic_fieldsets/fieldset_associator.rb +76 -0
  20. data/app/views/dynamic_fieldsets/fields/_field_default_fields.html.erb +7 -0
  21. data/app/views/dynamic_fieldsets/fields/_field_html_attribute_fields.html.erb +8 -0
  22. data/app/views/dynamic_fieldsets/fields/_field_option_fields.html.erb +6 -0
  23. data/app/views/dynamic_fieldsets/fields/_form.html.erb +81 -0
  24. data/app/views/dynamic_fieldsets/fields/edit.html.erb +6 -0
  25. data/app/views/dynamic_fieldsets/fields/index.html.erb +29 -0
  26. data/app/views/dynamic_fieldsets/fields/new.html.erb +5 -0
  27. data/app/views/dynamic_fieldsets/fields/show.html.erb +70 -0
  28. data/app/views/dynamic_fieldsets/fieldset_associators/index.html.erb +18 -0
  29. data/app/views/dynamic_fieldsets/fieldset_associators/show.html.erb +26 -0
  30. data/app/views/dynamic_fieldsets/fieldsets/_form.html.erb +37 -0
  31. data/app/views/dynamic_fieldsets/fieldsets/children.html.erb +45 -0
  32. data/app/views/dynamic_fieldsets/fieldsets/edit.html.erb +6 -0
  33. data/app/views/dynamic_fieldsets/fieldsets/index.html.erb +31 -0
  34. data/app/views/dynamic_fieldsets/fieldsets/new.html.erb +5 -0
  35. data/app/views/dynamic_fieldsets/fieldsets/show.html.erb +31 -0
  36. data/config/routes.rb +9 -0
  37. data/dynamic_fieldsets.gemspec +195 -0
  38. data/lib/dynamic_fieldsets/config.rb +0 -0
  39. data/lib/dynamic_fieldsets/dynamic_fieldsets_in_model.rb +164 -0
  40. data/lib/dynamic_fieldsets/engine.rb +4 -0
  41. data/lib/dynamic_fieldsets/railtie.rb +13 -0
  42. data/lib/dynamic_fieldsets.rb +2 -0
  43. data/lib/generators/dynamic_fieldsets/install_generator.rb +44 -0
  44. data/lib/generators/dynamic_fieldsets/templates/config.rb +0 -0
  45. data/lib/generators/dynamic_fieldsets/templates/migrations/install_migration.rb +74 -0
  46. data/spec/dummy/Rakefile +7 -0
  47. data/spec/dummy/app/controllers/application_controller.rb +3 -0
  48. data/spec/dummy/app/controllers/information_forms_controller.rb +85 -0
  49. data/spec/dummy/app/helpers/application_helper.rb +5 -0
  50. data/spec/dummy/app/helpers/information_forms_helper.rb +2 -0
  51. data/spec/dummy/app/models/information_form.rb +3 -0
  52. data/spec/dummy/app/views/information_forms/_form.html.erb +22 -0
  53. data/spec/dummy/app/views/information_forms/edit.html.erb +6 -0
  54. data/spec/dummy/app/views/information_forms/index.html.erb +23 -0
  55. data/spec/dummy/app/views/information_forms/new.html.erb +5 -0
  56. data/spec/dummy/app/views/information_forms/show.html.erb +11 -0
  57. data/spec/dummy/app/views/layouts/application.html.erb +15 -0
  58. data/spec/dummy/config/application.rb +45 -0
  59. data/spec/dummy/config/boot.rb +10 -0
  60. data/spec/dummy/config/database.yml +22 -0
  61. data/spec/dummy/config/environment.rb +5 -0
  62. data/spec/dummy/config/environments/development.rb +26 -0
  63. data/spec/dummy/config/environments/production.rb +49 -0
  64. data/spec/dummy/config/environments/test.rb +35 -0
  65. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  66. data/spec/dummy/config/initializers/inflections.rb +10 -0
  67. data/spec/dummy/config/initializers/mime_types.rb +5 -0
  68. data/spec/dummy/config/initializers/secret_token.rb +7 -0
  69. data/spec/dummy/config/initializers/session_store.rb +8 -0
  70. data/spec/dummy/config/locales/en.yml +5 -0
  71. data/spec/dummy/config/routes.rb +60 -0
  72. data/spec/dummy/config.ru +4 -0
  73. data/spec/dummy/db/migrate/20110726215814_create_dynamic_fieldsets_tables.rb +74 -0
  74. data/spec/dummy/db/migrate/20110727210451_create_information_forms.rb +13 -0
  75. data/spec/dummy/db/schema.rb +83 -0
  76. data/spec/dummy/features/field.feature +54 -0
  77. data/spec/dummy/features/fieldset.feature +68 -0
  78. data/spec/dummy/features/fieldset_associator.feature +20 -0
  79. data/spec/dummy/features/step_definitions/debugging_steps.rb +8 -0
  80. data/spec/dummy/features/step_definitions/field_steps.rb +63 -0
  81. data/spec/dummy/features/step_definitions/fieldset_associator_steps.rb +11 -0
  82. data/spec/dummy/features/step_definitions/fieldset_steps.rb +57 -0
  83. data/spec/dummy/features/step_definitions/web_steps.rb +214 -0
  84. data/spec/dummy/features/support/env.rb +15 -0
  85. data/spec/dummy/features/support/paths.rb +46 -0
  86. data/spec/dummy/features/support/selectors.rb +39 -0
  87. data/spec/dummy/public/404.html +26 -0
  88. data/spec/dummy/public/422.html +26 -0
  89. data/spec/dummy/public/500.html +26 -0
  90. data/spec/dummy/public/favicon.ico +0 -0
  91. data/spec/dummy/public/javascripts/application.js +2 -0
  92. data/spec/dummy/public/javascripts/jquery.min.js +166 -0
  93. data/spec/dummy/public/stylesheets/.gitkeep +0 -0
  94. data/spec/dummy/public/stylesheets/scaffold.css +56 -0
  95. data/spec/dummy/script/rails +6 -0
  96. data/spec/dynamic_fieldsets_helper_spec.rb +254 -0
  97. data/spec/dynamic_fieldsets_in_model_spec.rb +175 -0
  98. data/spec/dynamic_fieldsets_spec.rb +7 -0
  99. data/spec/integration/navigation_spec.rb +9 -0
  100. data/spec/models/field_default_spec.rb +26 -0
  101. data/spec/models/field_html_attribute_spec.rb +30 -0
  102. data/spec/models/field_option_spec.rb +52 -0
  103. data/spec/models/field_record_spec.rb +44 -0
  104. data/spec/models/field_spec.rb +169 -0
  105. data/spec/models/fieldset_associator_spec.rb +128 -0
  106. data/spec/models/fieldset_spec.rb +169 -0
  107. data/spec/reports/SPEC-ActsAsMultipartForm.xml +9 -0
  108. data/spec/reports/SPEC-MultipartForm-InProgressForm-validations.xml +47 -0
  109. data/spec/reports/SPEC-MultipartForm-InProgressForm.xml +7 -0
  110. data/spec/reports/SPEC-Navigation.xml +9 -0
  111. data/spec/spec_helper.rb +37 -0
  112. data/spec/support/field_default_helper.rb +12 -0
  113. data/spec/support/field_helper.rb +16 -0
  114. data/spec/support/field_html_attribute_helper.rb +14 -0
  115. data/spec/support/field_option_helper.rb +13 -0
  116. data/spec/support/field_record_helper.rb +12 -0
  117. data/spec/support/fieldset_associator_helper.rb +12 -0
  118. data/spec/support/fieldset_helper.rb +28 -0
  119. metadata +328 -0
@@ -0,0 +1,254 @@
1
+ require 'spec_helper'
2
+ include DynamicFieldsets
3
+
4
+ describe DynamicFieldsetsHelper do
5
+ include DynamicFieldsetsHelper
6
+ include FieldsetHelper
7
+ describe ".dynamic_fieldset_renderer" do
8
+ before(:each) do
9
+ @fsa = mock_model(FieldsetAssociator)
10
+ @fsa.stub!(:fieldset).and_return mock_model(Fieldset)
11
+ @fsa.stub!(:field_values).and_return []
12
+ stub!(:fieldset_renderer).and_return []
13
+ end
14
+
15
+ it "should include a form object and a field set associator object" do
16
+ lambda { dynamic_fieldset_renderer(@fsa, "form") }.should_not raise_error
17
+ end
18
+
19
+ it "should call the fieldset_renderer with the fsa's root fieldset" do
20
+ @fsa.should_receive(:fieldset)
21
+ dynamic_fieldset_renderer(@fsa, "form")
22
+ end
23
+
24
+ it "should return a string of html" do
25
+ dynamic_fieldset_renderer(@fsa, "form").should be_a_kind_of String
26
+ end
27
+ end
28
+
29
+ describe "dynamic_fieldset_form_renderer method" do
30
+ it "should call dynamic_fieldset_renderer with 'form'" do
31
+ fsa = mock_model(FieldsetAssociator)
32
+ self.should_receive(:dynamic_fieldset_renderer).with(fsa, "form")
33
+ dynamic_fieldset_form_renderer(fsa)
34
+ end
35
+ end
36
+
37
+ describe "dynamic_fieldset_show_renderer" do
38
+ it "should call dynamic_fieldset_renderer with 'show'" do
39
+ fsa = mock_model(FieldsetAssociator)
40
+ self.should_receive(:dynamic_fieldset_renderer).with(fsa, "show")
41
+ dynamic_fieldset_show_renderer(fsa)
42
+ end
43
+ end
44
+
45
+ describe ".fieldset_renderer" do
46
+ before(:each) do
47
+ @fsa = mock_model(FieldsetAssociator)
48
+ @fieldset = Fieldset.new
49
+ @fieldset.stub!(:id).and_return 326
50
+ @values = {}
51
+ @form_type = "form"
52
+ end
53
+
54
+ it "should include the fsa object, fieldset object, and a values hash" do
55
+ lambda { fieldset_renderer(@fsa,@fieldset,@values, @form_type) }.should_not raise_error
56
+ end
57
+
58
+ it "should call the children method on the fieldset object" do
59
+ @fieldset.should_receive(:children).and_return []
60
+ fieldset_renderer(@fsa,@fieldset,@values, @form_type)
61
+ end
62
+
63
+ it "should call the field_renderer method if the current child is a field" do
64
+ @field = mock_model(Field)
65
+ @fieldset.stub!(:children).and_return [@field]
66
+ self.should_receive(:field_renderer).and_return []
67
+ fieldset_renderer(@fsa,@fieldset,@values, @form_type)
68
+ end
69
+
70
+ it "should call the fieldset_renderer recursively if the current child is a fieldset" do
71
+ @child_fieldset = mock_model(Fieldset)
72
+ @fieldset.stub!(:children).and_return [@child_fieldset]
73
+ self.should_receive(:fieldset_renderer)
74
+ fieldset_renderer(@fsa,@fieldset,@values, @form_type)
75
+ end
76
+
77
+ it "should include markup for the fieldset itself" do
78
+ fieldset_renderer(@fsa,@fieldset,@values, @form_type).should satisfy {
79
+ |x| !x.select{ |v| v =~ /id='fieldset-326'/ }.nil?
80
+ }
81
+ end
82
+
83
+ it "should return a array of html elements" do
84
+ fieldset_renderer(@fsa,@fieldset,@values, @form_type).should be_a_kind_of Array
85
+ end
86
+ end
87
+
88
+ describe ".field_form_renderer" do
89
+ before(:each) do
90
+ @fsa = mock_model(FieldsetAssociator)
91
+ @field = Field.new
92
+ @field.stub!(:id).and_return 420
93
+ @field.stub!(:html_attributes).and_return []
94
+ @field.stub!(:has_default?).and_return false
95
+ @field.stub!(:default).and_return ""
96
+ @field.stub!(:field_type).and_return ""
97
+ @field.stub!(:options).and_return []
98
+ @values = []
99
+ end
100
+
101
+ it "should include the form object, the field object, and an array of values" do
102
+ lambda { field_form_renderer(@fsa,@field,@values) }.should_not raise_error
103
+ end
104
+
105
+ it "should call the html_attributes method for the field" do
106
+ @field.should_receive(:field_html_attributes).and_return([])
107
+ field_form_renderer(@fsa,@field,@values)
108
+ end
109
+
110
+ it "should call the field_options method for the field if it is a select" do
111
+ @field.stub!(:field_type).and_return 'select'
112
+ @field.should_receive(:options)
113
+ field_form_renderer(@fsa,@field,@values)
114
+ end
115
+
116
+ it "should call the field_options method for the field if it is a multiple select" do
117
+ @field.stub!(:field_type).and_return 'multiple_select'
118
+ @field.should_receive(:options)
119
+ field_form_renderer(@fsa,@field,@values)
120
+ end
121
+
122
+ it "should call the field_options method for the field if it is a checkbox" do
123
+ @field.stub!(:field_type).and_return 'checkbox'
124
+ @field.should_receive(:options)
125
+ field_form_renderer(@fsa,@field,@values)
126
+ end
127
+
128
+ it "should call the field_options method for the field if it is a radio" do
129
+ @field.stub!(:field_type).and_return 'radio'
130
+ @field.should_receive(:options)
131
+ field_form_renderer(@fsa,@field,@values)
132
+ end
133
+
134
+
135
+ ## HELPER TAGS
136
+
137
+ it "should have a label tag" do
138
+ field_form_renderer(@fsa,@field,@values).should satisfy {
139
+ |x| !x.select{ |v| v =~ /<label for=/ }.nil?
140
+ }
141
+ end
142
+
143
+ it "should call select_tag if the type is select" do
144
+ @field.stub!(:field_type).and_return 'select'
145
+ should_receive(:select_tag)
146
+ field_form_renderer(@fsa,@field,@values)
147
+ end
148
+
149
+ it "should call select_tag if the type is multiple select" do
150
+ @field.stub!(:field_type).and_return 'multiple_select'
151
+ should_receive(:select_tag)
152
+ field_form_renderer(@fsa,@field,@values)
153
+ end
154
+
155
+ it "should call text_field if the type is textfield" do
156
+ @field.stub!(:field_type).and_return 'textfield'
157
+ should_receive(:text_field)
158
+ field_form_renderer(@fsa,@field,@values)
159
+ end
160
+
161
+ it "should call check_box if the type is checkbox" do
162
+ option = mock_model(FieldOption)
163
+ option.stub!(:name).and_return ""
164
+ @field.stub!(:field_type).and_return 'checkbox'
165
+ @field.stub!(:options).and_return [option]
166
+ should_receive(:check_box)
167
+ field_form_renderer(@fsa,@field,@values)
168
+ end
169
+
170
+ it "should call radio_button if the type is radio" do
171
+ option = mock_model(FieldOption)
172
+ option.stub!(:name).and_return ""
173
+ @field.stub!(:field_type).and_return 'radio'
174
+ @field.stub!(:options).and_return [option]
175
+ should_receive(:radio_button)
176
+ field_form_renderer(@fsa,@field,@values)
177
+ end
178
+
179
+ it "should have a text_area tag if the type is textarea" do
180
+ field_form_renderer(@fsa,@field,@values).should satisfy {
181
+ |x| !x.select{ |v| v =~ /<textarea/ }.nil?
182
+ }
183
+ end
184
+
185
+ it "should call date_select if the type is date" do
186
+ @field.stub!(:field_type).and_return 'date'
187
+ should_receive(:date_select)
188
+ field_form_renderer(@fsa,@field,@values)
189
+ end
190
+
191
+ it "should call datetime_select if the type is datetime" do
192
+ @field.stub!(:field_type).and_return 'datetime'
193
+ should_receive(:datetime_select)
194
+ field_form_renderer(@fsa,@field,@values)
195
+ end
196
+
197
+
198
+ it "should return an array of html" do
199
+ field_form_renderer(@fsa,@field,@values).should be_a_kind_of Array
200
+ end
201
+ end
202
+
203
+ describe "field_show_renderer method" do
204
+ before(:each) do
205
+ @fsa = mock_model(FieldsetAssociator)
206
+ @field = Field.new
207
+ @field.stub!(:id).and_return 420
208
+ @values = []
209
+ end
210
+
211
+ it "should return an array of strings" do
212
+ result = field_show_renderer(@fsa, @field, @values)
213
+ result.should be_a_kind_of Array
214
+ end
215
+
216
+ it "should include the class dynamic_fieldsets_field" do
217
+ field_show_renderer(@fsa, @field, @values).join().should match /dynamic_fieldsets_field/
218
+ end
219
+
220
+ it "should include the class dynamic_fieldsets_field_label" do
221
+ field_show_renderer(@fsa, @field, @values).join().should match /dynamic_fieldsets_field_label/
222
+ end
223
+
224
+ it "should include the class dynamic_fieldsets_field_value" do
225
+ field_show_renderer(@fsa, @field, @values).join().should match /dynamic_fieldsets_field_value/
226
+ end
227
+
228
+ it "should return 'No answer given' if the field has no answer for the current fieldset associator" do
229
+ field_show_renderer(@fsa, @field, nil).join().should match /No answer given/
230
+ end
231
+ end
232
+
233
+ describe "field_renderer method" do
234
+ before(:each) do
235
+ @fsa = mock_model(FieldsetAssociator)
236
+ @field = Field.new
237
+ @values = []
238
+ end
239
+
240
+ it "should call the form helper if the form_type is form" do
241
+ self.should_receive(:field_form_renderer)
242
+ field_renderer(@fsa, @field, @values, "form")
243
+ end
244
+
245
+ it "should default to the show helper if the form_type is not form" do
246
+ self.should_receive(:field_show_renderer)
247
+ field_renderer(@fsa, @field, @values, "show")
248
+ end
249
+ end
250
+
251
+ describe "populate method" do
252
+ it "needs tests"
253
+ end
254
+ end
@@ -0,0 +1,175 @@
1
+ require 'spec_helper'
2
+
3
+ include DynamicFieldsets
4
+
5
+ describe DynamicFieldsetsInModel do
6
+
7
+ it "should respond to acts_as_dynamic_fieldset" do
8
+ InformationForm.should respond_to :acts_as_dynamic_fieldset
9
+ end
10
+
11
+ it "should respond to fieldset_associator" do
12
+ InformationForm.new.should respond_to :fieldset
13
+ end
14
+
15
+ it "should respond to fieldset" do
16
+ InformationForm.new.should respond_to :fieldset_associator
17
+ end
18
+
19
+ describe "acts_as_dynamic_fieldset class method" do
20
+ before(:each) do
21
+ @model = InformationForm.new
22
+ end
23
+
24
+ it "should initialize the dynamic_fieldsets field" do
25
+ @model.should respond_to :dynamic_fieldsets
26
+ end
27
+
28
+ it "should include the instance methods" do
29
+ @model.should be_a_kind_of (DynamicFieldsets::DynamicFieldsetsInModel::InstanceMethods)
30
+ end
31
+ end
32
+
33
+ describe "method missing method" do
34
+ before(:each) do
35
+ @model = InformationForm.new
36
+ @model.stub!(:fieldset_associator)
37
+ @model.stub!(:fieldset)
38
+ end
39
+
40
+ it "should call match_fieldset_associator?" do
41
+ @model.should_receive(:match_fieldset_associator?).and_return(true)
42
+ @model.some_method
43
+ end
44
+
45
+ it "should call fieldset_associator if match_fieldset_associator? returns true" do
46
+ @model.stub!(:match_fieldset_associator?).and_return(true)
47
+ @model.should_receive(:fieldset_associator)
48
+ @model.some_method
49
+ end
50
+
51
+ it "should call match_fieldset?" do
52
+ @model.stub!(:match_fieldset_associator?).and_return(false)
53
+ @model.should_receive(:match_fieldset?).and_return(true)
54
+ @model.some_method
55
+ end
56
+
57
+ it "should call fieldset if match_fieldset? returns true" do
58
+ @model.stub!(:match_fieldset_associator?).and_return(false)
59
+ @model.stub!(:match_fieldset?).and_return(true)
60
+ @model.should_receive(:fieldset)
61
+ @model.some_method
62
+ end
63
+ end
64
+
65
+ describe "respond_to? method" do
66
+ before(:each) do
67
+ @model = InformationForm.new
68
+ end
69
+
70
+ it "should call match_fieldset_associator?" do
71
+ @model.should_receive(:match_fieldset_associator?)
72
+ @model.respond_to?(:some_method)
73
+ end
74
+
75
+ it "should call match_fieldset?" do
76
+ @model.stub!(:match_fieldset_associator?).and_return(false)
77
+ @model.should_receive(:match_fieldset?)
78
+ @model.respond_to?(:some_method)
79
+ end
80
+ end
81
+
82
+ describe "match_fieldset_associator? method" do
83
+ before(:each) do
84
+ @model = InformationForm.new
85
+ @model.stub!(:dynamic_fieldsets).and_return({:child_form => []})
86
+ end
87
+
88
+ it "should call dynamic_fieldsets" do
89
+ @model.should_receive(:dynamic_fieldsets).and_return({:child_form => []})
90
+ @model.match_fieldset_associator?(:some_method)
91
+ end
92
+
93
+ it "should return true if the sym parameter matches a key in dynamic_fieldsets" do
94
+ @model.match_fieldset_associator?(:child_form).should be_true
95
+ end
96
+
97
+ it "should return false if the sym parameter does not match a key in dynamic_fieldsets" do
98
+ @model.match_fieldset_associator?(:not_child_form).should be_false
99
+ end
100
+ end
101
+
102
+ # need to be abvle to call child_form_fieldset to get the fieldset object
103
+ # because child_form does not exist in the fsa model until after it is created
104
+ describe "match_fieldset? method" do
105
+ before(:each) do
106
+ @model = InformationForm.new
107
+ @model.stub!(:dynamic_fieldsets).and_return({:child_form => []})
108
+ end
109
+
110
+ it "should call dynamic_fieldsets if the calling method includes _fieldset" do
111
+ @model.should_receive(:dynamic_fieldsets).and_return({:child_form => []})
112
+ @model.match_fieldset?(:some_method_fieldset)
113
+ end
114
+
115
+ it "should return true if the sym parameter matches a key in dynamic_fieldsets followed by the word fieldset" do
116
+ @model.match_fieldset?(:child_form_fieldset).should be_true
117
+ end
118
+
119
+ it "should return false if the sym parameter does not match a key in dynamic_fieldsets followed by the word fieldset" do
120
+ @model.match_fieldset?(:not_child_form_fieldset).should be_false
121
+ end
122
+
123
+ it "should return false if the sym parameter matches a key in dynamic_fieldsets not followed by the word fieldset" do
124
+ @model.match_fieldset?(:child_form).should be_false
125
+ end
126
+ end
127
+
128
+ describe "fieldset_associator method" do
129
+ before(:each) do
130
+ @model = InformationForm.new
131
+ @model.stub!(:dynamic_fieldsets).and_return({:child_form => {:fieldset => :fingerprint_form}})
132
+ @fsa = DynamicFieldsets::FieldsetAssociator.new(:fieldset_model_id => 1234, :fieldset_model_type => "InformationForm", :fieldset_model_name => :child_form)
133
+ DynamicFieldsets::FieldsetAssociator.stub!(:find_by_fieldset_model_parameters).and_return(@fsa)
134
+ end
135
+
136
+ it "should return the fieldset associator object for the specified dynamic fieldset" do
137
+ DynamicFieldsets::FieldsetAssociator.should_receive(:find_by_fieldset_model_parameters).and_return([@fsa])
138
+ @model.fieldset_associator(:child_form).should == @fsa
139
+ end
140
+
141
+ it "should create a new fieldset associator object if one does not exist" do
142
+ DynamicFieldsets::FieldsetAssociator.stub!(:find_by_fieldset_model_parameters).and_return([])
143
+ DynamicFieldsets::FieldsetAssociator.stub!(:create).and_return(@fsa)
144
+
145
+ # don't know why I need this, should be handled by the create stub
146
+ @model.fieldset_associator(:child_form).should == @fsa
147
+ end
148
+
149
+ it "should return nil if the sym param does not match a key in the dynamic_fieldsets field" do
150
+ @model.fieldset_associator(:not_child_form).should be_nil
151
+ end
152
+ end
153
+
154
+ describe "fieldset method" do
155
+ before(:each) do
156
+ @model = InformationForm.new
157
+ @model.stub!(:dynamic_fieldsets).and_return({:child_form => {:fieldset => :fingerprint_form}})
158
+ @fieldset = DynamicFieldsets::Fieldset.new(:nkey => :fingerprint_form)
159
+ DynamicFieldsets::Fieldset.stub!(:find_by_nkey).and_return(@fieldset)
160
+ end
161
+
162
+ it "should call find_by_nkey for the fieldset model" do
163
+ DynamicFieldsets::Fieldset.should_receive(:find_by_nkey).and_return(@fieldset)
164
+ @model.fieldset(:child_form)
165
+ end
166
+
167
+ it "should return the fieldset object for the specified dynamic fieldset" do
168
+ @model.fieldset(:child_form).should == @fieldset
169
+ end
170
+
171
+ it "should return nil if the sym param does not match a kyer in the dynamic_fieldsets field" do
172
+ @model.fieldset(:not_child_form).should be_nil
173
+ end
174
+ end
175
+ end
@@ -0,0 +1,7 @@
1
+ require 'spec_helper'
2
+
3
+ describe DynamicFieldsets do
4
+ it "should be valid" do
5
+ DynamicFieldsets.should be_a(Module)
6
+ end
7
+ end
@@ -0,0 +1,9 @@
1
+ require 'spec_helper'
2
+
3
+ describe "Navigation" do
4
+ include Capybara
5
+
6
+ it "should be a valid app" do
7
+ ::Rails.application.should be_a(Dummy::Application)
8
+ end
9
+ end
@@ -0,0 +1,26 @@
1
+ require 'spec_helper'
2
+ include DynamicFieldsets
3
+
4
+ describe FieldDefault do
5
+ include FieldDefaultHelper
6
+
7
+ it "should respond to field" do
8
+ field_default = FieldDefault.new
9
+ field_default.should respond_to :field
10
+ end
11
+
12
+ describe "validations" do
13
+ before(:each) do
14
+ @field_default = FieldDefault.new
15
+ end
16
+
17
+ it "should be valid" do
18
+ @field_default.attributes = valid_attributes
19
+ @field_default.should be_valid
20
+ end
21
+
22
+ it "should require a label" do
23
+ @field_default.should have(1).error_on(:value)
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,30 @@
1
+ require 'spec_helper'
2
+ include DynamicFieldsets
3
+
4
+ describe FieldHtmlAttribute do
5
+ include FieldHtmlAttributeHelper
6
+
7
+ it "should respond to field" do
8
+ field_html_attribute = FieldHtmlAttribute.new
9
+ field_html_attribute.should respond_to :field
10
+ end
11
+
12
+ describe "validations" do
13
+ before(:each) do
14
+ @field_html_attribute = FieldHtmlAttribute.new
15
+ end
16
+
17
+ it "should be valid" do
18
+ @field_html_attribute.attributes = valid_attributes
19
+ @field_html_attribute.should be_valid
20
+ end
21
+
22
+ it "should require an attribute" do
23
+ @field_html_attribute.should have(1).error_on(:attribute_name)
24
+ end
25
+
26
+ it "should require a value" do
27
+ @field_html_attribute.should have(1).error_on(:value)
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,52 @@
1
+ require 'spec_helper'
2
+ include DynamicFieldsets
3
+
4
+ describe FieldOption do
5
+ include FieldOptionHelper
6
+
7
+ it "should respond to field" do
8
+ field_option = FieldOption.new
9
+ field_option.should respond_to :field
10
+ end
11
+
12
+ describe "validations" do
13
+ before(:each) do
14
+ @field_option = FieldOption.new
15
+ end
16
+
17
+ it "should be valid" do
18
+ @field_option.attributes = valid_attributes
19
+ @field_option.should be_valid
20
+ end
21
+
22
+ it "should require a name" do
23
+ @field_option.should have(1).error_on(:name)
24
+ end
25
+ it "should require enabled is a boolean value" do
26
+ @field_option.enabled = nil
27
+ @field_option.should have(1).error_on(:enabled)
28
+ end
29
+ end
30
+
31
+ describe "enabled scope" do
32
+ before(:each) do
33
+ @field_option1 = FieldOption.new
34
+ @field_option1.attributes = valid_attributes
35
+ @field_option1.enabled = true
36
+ @field_option1.save
37
+
38
+ @field_option2 = FieldOption.new
39
+ @field_option2.attributes = valid_attributes
40
+ @field_option2.enabled = false
41
+ @field_option2.save
42
+ end
43
+
44
+ it "should return enabled field options" do
45
+ FieldOption.enabled.should include @field_option1
46
+ end
47
+
48
+ it "should not return disabled field options" do
49
+ FieldOption.enabled.should_not include @field_option2
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,44 @@
1
+ require 'spec_helper'
2
+ include DynamicFieldsets
3
+
4
+ describe FieldRecord do
5
+ include FieldRecordHelper
6
+
7
+ it "should respond to field" do
8
+ FieldRecord.new.should respond_to :field
9
+ end
10
+
11
+ it "should respond to fieldset_associator" do
12
+ FieldRecord.new.should respond_to :fieldset_associator
13
+ end
14
+
15
+ describe "validations" do
16
+ before(:each) do
17
+ @field_record = FieldRecord.new
18
+ end
19
+
20
+ it "should be valid" do
21
+ @field_record.field = Field.new
22
+ @field_record.fieldset_associator = FieldsetAssociator.new
23
+ @field_record.value = "42"
24
+ @field_record.should be_valid
25
+ end
26
+
27
+ it "should require field" do
28
+ @field_record.should have(1).error_on(:field)
29
+ end
30
+
31
+ it "should require fieldset_associator" do
32
+ @field_record.should have(1).error_on(:fieldset_associator)
33
+ end
34
+
35
+ it "should require value" do
36
+ @field_record.should have(1).error_on(:value)
37
+ end
38
+
39
+ it "should not error if value is a blank string" do
40
+ @field_record.value = ""
41
+ @field_record.should have(0).error_on(:value)
42
+ end
43
+ end
44
+ end