dynamic_fieldsets 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG +4 -0
- data/Gemfile +21 -0
- data/Gemfile.lock +157 -0
- data/MIT-LICENSE +20 -0
- data/README.rdoc +19 -0
- data/Rakefile +69 -0
- data/VERSION +1 -0
- data/app/controllers/dynamic_fieldsets/fields_controller.rb +75 -0
- data/app/controllers/dynamic_fieldsets/fieldset_associators_controller.rb +24 -0
- data/app/controllers/dynamic_fieldsets/fieldsets_controller.rb +89 -0
- data/app/helpers/dynamic_fieldsets/fields_helper.rb +19 -0
- data/app/helpers/dynamic_fieldsets_helper.rb +207 -0
- data/app/models/dynamic_fieldsets/field.rb +85 -0
- data/app/models/dynamic_fieldsets/field_default.rb +14 -0
- data/app/models/dynamic_fieldsets/field_html_attribute.rb +15 -0
- data/app/models/dynamic_fieldsets/field_option.rb +18 -0
- data/app/models/dynamic_fieldsets/field_record.rb +11 -0
- data/app/models/dynamic_fieldsets/fieldset.rb +57 -0
- data/app/models/dynamic_fieldsets/fieldset_associator.rb +76 -0
- data/app/views/dynamic_fieldsets/fields/_field_default_fields.html.erb +7 -0
- data/app/views/dynamic_fieldsets/fields/_field_html_attribute_fields.html.erb +8 -0
- data/app/views/dynamic_fieldsets/fields/_field_option_fields.html.erb +6 -0
- data/app/views/dynamic_fieldsets/fields/_form.html.erb +81 -0
- data/app/views/dynamic_fieldsets/fields/edit.html.erb +6 -0
- data/app/views/dynamic_fieldsets/fields/index.html.erb +29 -0
- data/app/views/dynamic_fieldsets/fields/new.html.erb +5 -0
- data/app/views/dynamic_fieldsets/fields/show.html.erb +70 -0
- data/app/views/dynamic_fieldsets/fieldset_associators/index.html.erb +18 -0
- data/app/views/dynamic_fieldsets/fieldset_associators/show.html.erb +26 -0
- data/app/views/dynamic_fieldsets/fieldsets/_form.html.erb +37 -0
- data/app/views/dynamic_fieldsets/fieldsets/children.html.erb +45 -0
- data/app/views/dynamic_fieldsets/fieldsets/edit.html.erb +6 -0
- data/app/views/dynamic_fieldsets/fieldsets/index.html.erb +31 -0
- data/app/views/dynamic_fieldsets/fieldsets/new.html.erb +5 -0
- data/app/views/dynamic_fieldsets/fieldsets/show.html.erb +31 -0
- data/config/routes.rb +9 -0
- data/dynamic_fieldsets.gemspec +195 -0
- data/lib/dynamic_fieldsets/config.rb +0 -0
- data/lib/dynamic_fieldsets/dynamic_fieldsets_in_model.rb +164 -0
- data/lib/dynamic_fieldsets/engine.rb +4 -0
- data/lib/dynamic_fieldsets/railtie.rb +13 -0
- data/lib/dynamic_fieldsets.rb +2 -0
- data/lib/generators/dynamic_fieldsets/install_generator.rb +44 -0
- data/lib/generators/dynamic_fieldsets/templates/config.rb +0 -0
- data/lib/generators/dynamic_fieldsets/templates/migrations/install_migration.rb +74 -0
- data/spec/dummy/Rakefile +7 -0
- data/spec/dummy/app/controllers/application_controller.rb +3 -0
- data/spec/dummy/app/controllers/information_forms_controller.rb +85 -0
- data/spec/dummy/app/helpers/application_helper.rb +5 -0
- data/spec/dummy/app/helpers/information_forms_helper.rb +2 -0
- data/spec/dummy/app/models/information_form.rb +3 -0
- data/spec/dummy/app/views/information_forms/_form.html.erb +22 -0
- data/spec/dummy/app/views/information_forms/edit.html.erb +6 -0
- data/spec/dummy/app/views/information_forms/index.html.erb +23 -0
- data/spec/dummy/app/views/information_forms/new.html.erb +5 -0
- data/spec/dummy/app/views/information_forms/show.html.erb +11 -0
- data/spec/dummy/app/views/layouts/application.html.erb +15 -0
- data/spec/dummy/config/application.rb +45 -0
- data/spec/dummy/config/boot.rb +10 -0
- data/spec/dummy/config/database.yml +22 -0
- data/spec/dummy/config/environment.rb +5 -0
- data/spec/dummy/config/environments/development.rb +26 -0
- data/spec/dummy/config/environments/production.rb +49 -0
- data/spec/dummy/config/environments/test.rb +35 -0
- data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/spec/dummy/config/initializers/inflections.rb +10 -0
- data/spec/dummy/config/initializers/mime_types.rb +5 -0
- data/spec/dummy/config/initializers/secret_token.rb +7 -0
- data/spec/dummy/config/initializers/session_store.rb +8 -0
- data/spec/dummy/config/locales/en.yml +5 -0
- data/spec/dummy/config/routes.rb +60 -0
- data/spec/dummy/config.ru +4 -0
- data/spec/dummy/db/migrate/20110726215814_create_dynamic_fieldsets_tables.rb +74 -0
- data/spec/dummy/db/migrate/20110727210451_create_information_forms.rb +13 -0
- data/spec/dummy/db/schema.rb +83 -0
- data/spec/dummy/features/field.feature +54 -0
- data/spec/dummy/features/fieldset.feature +68 -0
- data/spec/dummy/features/fieldset_associator.feature +20 -0
- data/spec/dummy/features/step_definitions/debugging_steps.rb +8 -0
- data/spec/dummy/features/step_definitions/field_steps.rb +63 -0
- data/spec/dummy/features/step_definitions/fieldset_associator_steps.rb +11 -0
- data/spec/dummy/features/step_definitions/fieldset_steps.rb +57 -0
- data/spec/dummy/features/step_definitions/web_steps.rb +214 -0
- data/spec/dummy/features/support/env.rb +15 -0
- data/spec/dummy/features/support/paths.rb +46 -0
- data/spec/dummy/features/support/selectors.rb +39 -0
- data/spec/dummy/public/404.html +26 -0
- data/spec/dummy/public/422.html +26 -0
- data/spec/dummy/public/500.html +26 -0
- data/spec/dummy/public/favicon.ico +0 -0
- data/spec/dummy/public/javascripts/application.js +2 -0
- data/spec/dummy/public/javascripts/jquery.min.js +166 -0
- data/spec/dummy/public/stylesheets/.gitkeep +0 -0
- data/spec/dummy/public/stylesheets/scaffold.css +56 -0
- data/spec/dummy/script/rails +6 -0
- data/spec/dynamic_fieldsets_helper_spec.rb +254 -0
- data/spec/dynamic_fieldsets_in_model_spec.rb +175 -0
- data/spec/dynamic_fieldsets_spec.rb +7 -0
- data/spec/integration/navigation_spec.rb +9 -0
- data/spec/models/field_default_spec.rb +26 -0
- data/spec/models/field_html_attribute_spec.rb +30 -0
- data/spec/models/field_option_spec.rb +52 -0
- data/spec/models/field_record_spec.rb +44 -0
- data/spec/models/field_spec.rb +169 -0
- data/spec/models/fieldset_associator_spec.rb +128 -0
- data/spec/models/fieldset_spec.rb +169 -0
- data/spec/reports/SPEC-ActsAsMultipartForm.xml +9 -0
- data/spec/reports/SPEC-MultipartForm-InProgressForm-validations.xml +47 -0
- data/spec/reports/SPEC-MultipartForm-InProgressForm.xml +7 -0
- data/spec/reports/SPEC-Navigation.xml +9 -0
- data/spec/spec_helper.rb +37 -0
- data/spec/support/field_default_helper.rb +12 -0
- data/spec/support/field_helper.rb +16 -0
- data/spec/support/field_html_attribute_helper.rb +14 -0
- data/spec/support/field_option_helper.rb +13 -0
- data/spec/support/field_record_helper.rb +12 -0
- data/spec/support/fieldset_associator_helper.rb +12 -0
- data/spec/support/fieldset_helper.rb +28 -0
- metadata +328 -0
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
include DynamicFieldsets
|
|
3
|
+
|
|
4
|
+
describe Field do
|
|
5
|
+
include FieldHelper
|
|
6
|
+
|
|
7
|
+
it "should respond to fieldset" do
|
|
8
|
+
Field.new.should respond_to :fieldset
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
it "should respond to field_options" do
|
|
12
|
+
Field.new.should respond_to :field_options
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
it "should respond to field_defaults" do
|
|
16
|
+
Field.new.should respond_to :field_defaults
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
it "should respond to field_html_attributes" do
|
|
20
|
+
Field.new.should respond_to :field_html_attributes
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
describe "validations" do
|
|
24
|
+
before(:each) do
|
|
25
|
+
@field = Field.new
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
it "should be valid" do
|
|
29
|
+
@field.attributes = valid_attributes
|
|
30
|
+
@field.should be_valid
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
it "should require name" do
|
|
34
|
+
@field.should have(1).error_on(:name)
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
it "should require label" do
|
|
38
|
+
@field.should have(1).error_on(:label)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
it "should require field_type" do
|
|
42
|
+
@field.should have(2).error_on(:field_type)
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
it "should require order number" do
|
|
46
|
+
@field.should have(1).error_on(:order_num)
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
it "should require type within the allowable types" do
|
|
50
|
+
@field.field_type = "unsupported_type"
|
|
51
|
+
@field.should have(1).error_on(:field_type)
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
it "should require type within the allowable types" do
|
|
55
|
+
@field.field_type = "select"
|
|
56
|
+
@field.should have(0).error_on(:field_type)
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
it "should require enabled true or false" do
|
|
61
|
+
@field.enabled = true
|
|
62
|
+
@field.should have(0).error_on(:enabled)
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
it "should require required true or false" do
|
|
66
|
+
@field.required = false
|
|
67
|
+
@field.should have(0).error_on(:required)
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
it "should require options if the type is one that requires options" do
|
|
71
|
+
@field.field_type = "select"
|
|
72
|
+
@field.should have(1).error_on(:field_options)
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
describe "options?" do
|
|
77
|
+
before(:each) do
|
|
78
|
+
@field = Field.new
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
it "should return true if the field type requires options" do
|
|
82
|
+
@field.field_type = "select"
|
|
83
|
+
@field.options?.should be_true
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
it "should return false if the field does not have options" do
|
|
87
|
+
@field.field_type = "textfield"
|
|
88
|
+
@field.options?.should be_false
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
describe "options" do
|
|
93
|
+
it "should return options from the field options table if enabled" do
|
|
94
|
+
field = Field.new
|
|
95
|
+
field_option = mock_model(DynamicFieldsets::FieldOption)
|
|
96
|
+
field_option.stub!(:enabled).and_return(true)
|
|
97
|
+
field.should_receive(:field_options).and_return([field_option])
|
|
98
|
+
field.options.should include field_option
|
|
99
|
+
end
|
|
100
|
+
it "should not return disabled options from the field options table" do
|
|
101
|
+
field = Field.new
|
|
102
|
+
field_option = mock_model(DynamicFieldsets::FieldOption)
|
|
103
|
+
field_option.stub!(:enabled).and_return(false)
|
|
104
|
+
field.should_receive(:field_options).and_return([field_option])
|
|
105
|
+
field.options.should_not include field_option
|
|
106
|
+
end
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
describe "has_defaults?" do
|
|
110
|
+
before(:each) do
|
|
111
|
+
@field = Field.new
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
it "should return true if the field default has a value" do
|
|
115
|
+
@field.should_receive(:field_defaults).and_return(["default value"])
|
|
116
|
+
@field.has_defaults?.should be_true
|
|
117
|
+
end
|
|
118
|
+
it "should return false if the field default has no values" do
|
|
119
|
+
@field.should_receive(:field_defaults).and_return([])
|
|
120
|
+
@field.has_defaults?.should be_false
|
|
121
|
+
end
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
describe "default" do
|
|
125
|
+
before(:each) do
|
|
126
|
+
@field = Field.new
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
it "should return a string if the type does not support multiple options" do
|
|
130
|
+
@field.stub!(:options?).and_return(false)
|
|
131
|
+
@field.should_receive(:field_defaults).and_return(["default value"])
|
|
132
|
+
@field.default.should == "default value"
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
it "should return nil if the type supports multiple options" do
|
|
136
|
+
@field.stub!(:options?).and_return(true)
|
|
137
|
+
@field.default.should be_nil
|
|
138
|
+
end
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
describe "defaults" do
|
|
142
|
+
before(:each) do
|
|
143
|
+
@field = Field.new
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
it "should return an array if the type supports multiple options" do
|
|
147
|
+
@field.stub!(:options?).and_return(true)
|
|
148
|
+
@field.should_receive(:field_defaults).and_return(["default value"])
|
|
149
|
+
@field.defaults.should == ["default value"]
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
it "should return nil if the type does not support multiple options" do
|
|
153
|
+
@field.stub!(:options?).and_return(false)
|
|
154
|
+
@field.defaults.should be_nil
|
|
155
|
+
end
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
describe "field_types method" do
|
|
159
|
+
it "should return an array" do
|
|
160
|
+
Field.field_types.should be_a_kind_of Array
|
|
161
|
+
end
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
describe "option_field_types method" do
|
|
165
|
+
it "should return an array" do
|
|
166
|
+
Field.option_field_types.should be_a_kind_of Array
|
|
167
|
+
end
|
|
168
|
+
end
|
|
169
|
+
end
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
include DynamicFieldsets
|
|
3
|
+
|
|
4
|
+
describe FieldsetAssociator do
|
|
5
|
+
include FieldsetAssociatorHelper
|
|
6
|
+
|
|
7
|
+
it "should respond to fieldset" do
|
|
8
|
+
FieldsetAssociator.new.should respond_to :fieldset
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
it "should respond to field_records" do
|
|
12
|
+
FieldsetAssociator.new.should respond_to :field_records
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
describe "validations" do
|
|
16
|
+
before(:each) do
|
|
17
|
+
@fsa = FieldsetAssociator.new
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
it "should be valid" do
|
|
21
|
+
@fsa.attributes = valid_attributes
|
|
22
|
+
@fsa.should be_valid
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
it "should require a fieldset" do
|
|
26
|
+
@fsa.should have(1).error_on(:fieldset_id)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
it "should require a field model id" do
|
|
30
|
+
@fsa.should have(1).error_on(:fieldset_model_id)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
it "should require a field model type" do
|
|
34
|
+
@fsa.should have(1).error_on(:fieldset_model_type)
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
it "should require a field model name" do
|
|
38
|
+
@fsa.should have(1).error_on(:fieldset_model_name)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
it "should error require a unique field model, field model name pair" do
|
|
42
|
+
@fsa.attributes = valid_attributes
|
|
43
|
+
@fsa.save
|
|
44
|
+
fsa2 = FieldsetAssociator.new
|
|
45
|
+
fsa2.should have(1).error_on(:fieldset_model_name)
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
describe "find_by_fieldset_model_parameters" do
|
|
50
|
+
before(:each) do
|
|
51
|
+
@fieldset = mock_model(Fieldset)
|
|
52
|
+
@fieldset.stub!(:nkey).and_return(":hire_form")
|
|
53
|
+
@fieldset.stub!(:id).and_return(1)
|
|
54
|
+
@fsa = FieldsetAssociator.create(valid_attributes)
|
|
55
|
+
|
|
56
|
+
@fieldset_model_attributes = valid_attributes
|
|
57
|
+
@fieldset_model_attributes[:fieldset] = :hire_form
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
it "should respond to find_by_fieldset_model_parameters" do
|
|
61
|
+
FieldsetAssociator.should respond_to :find_by_fieldset_model_parameters
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
it "should call Fieldset find_by_nkey" do
|
|
65
|
+
Fieldset.should_receive(:find_by_nkey).and_return(@fieldset)
|
|
66
|
+
FieldsetAssociator.find_by_fieldset_model_parameters(@fieldset_model_attributes)
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
it "should return the correct fieldset associator" do
|
|
70
|
+
Fieldset.stub!(:find_by_nkey).and_return(@fieldset)
|
|
71
|
+
# this is a fun hack because of all the fsas being made during tests
|
|
72
|
+
FieldsetAssociator.find_by_fieldset_model_parameters(@fieldset_model_attributes).should include @fsa
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
describe "field_values method" do
|
|
77
|
+
before(:each) do
|
|
78
|
+
@fsa = FieldsetAssociator.new
|
|
79
|
+
|
|
80
|
+
@field = mock_model(DynamicFieldsets::Field)
|
|
81
|
+
@field.stub!(:id).and_return(37)
|
|
82
|
+
|
|
83
|
+
@field_record = mock_model(DynamicFieldsets::FieldRecord)
|
|
84
|
+
@field_record.stub!(:field).and_return(@field)
|
|
85
|
+
@field_record.stub!(:value).and_return("forty two")
|
|
86
|
+
@field_record.stub!(:id).and_return(42)
|
|
87
|
+
|
|
88
|
+
@fsa.stub!(:field_records).and_return([@field_record, @field_record])
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
it "should return a hash" do
|
|
92
|
+
@field.stub!(:field_type).and_return("")
|
|
93
|
+
@fsa.field_values.should be_a_kind_of Hash
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
it "should call field_records" do
|
|
97
|
+
@fsa.should_receive(:field_records).and_return([])
|
|
98
|
+
@fsa.field_values
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
# I am aware these two tests aren't really realistic because ids should be different
|
|
102
|
+
# Results should be consistent with these when ids are different
|
|
103
|
+
it "should return multiple select values as an array of ids" do
|
|
104
|
+
@field.stub!(:field_type).and_return("multiple_select")
|
|
105
|
+
@fsa.field_values.should == { 37 => [42, 42] }
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
it "should return checkboxes values as an array of ids" do
|
|
109
|
+
@field.stub!(:field_type).and_return("checkbox")
|
|
110
|
+
@fsa.field_values.should == { 37 => [42, 42] }
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
it "should return select values as an id" do
|
|
114
|
+
@field.stub!(:field_type).and_return("select")
|
|
115
|
+
@fsa.field_values.should == { 37 => 42 }
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
it "should return radio values as an id" do
|
|
119
|
+
@field.stub!(:field_type).and_return("radio")
|
|
120
|
+
@fsa.field_values.should == { 37 => 42 }
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
it "should return all other field types as strings" do
|
|
124
|
+
@field.stub!(:field_type).and_return("text")
|
|
125
|
+
@fsa.field_values.should == { 37 => "forty two" }
|
|
126
|
+
end
|
|
127
|
+
end
|
|
128
|
+
end
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
include DynamicFieldsets
|
|
3
|
+
|
|
4
|
+
describe Fieldset do
|
|
5
|
+
include FieldsetHelper
|
|
6
|
+
|
|
7
|
+
it "should respond to fields" do
|
|
8
|
+
fieldset = Fieldset.new
|
|
9
|
+
fieldset.should respond_to :fields
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
it "should respond to parent_fieldset" do
|
|
13
|
+
fieldset = Fieldset.new
|
|
14
|
+
fieldset.should respond_to :parent_fieldset
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
it "should respond to child_fieldsets" do
|
|
18
|
+
fieldset = Fieldset.new
|
|
19
|
+
fieldset.should respond_to :child_fieldsets
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
describe "validations" do
|
|
23
|
+
before(:each) do
|
|
24
|
+
@fieldset = Fieldset.new
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
it "should be valid as a top level fieldset" do
|
|
28
|
+
@fieldset.attributes = valid_root_attributes
|
|
29
|
+
@fieldset.nkey = "top_level_nkey"
|
|
30
|
+
@fieldset.should be_valid
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
it "should be valid as a child fieldset" do
|
|
34
|
+
@fieldset.attributes = valid_child_attributes
|
|
35
|
+
@fieldset.nkey = "child_level_nkey"
|
|
36
|
+
@fieldset.should be_valid
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
it "should require a name" do
|
|
40
|
+
@fieldset.should have(1).error_on(:name)
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
it "should require a description" do
|
|
44
|
+
@fieldset.should have(1).error_on(:description)
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
it "should require an nkey" do # permalink
|
|
48
|
+
@fieldset.should have(1).error_on(:nkey)
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
it "should require a unique nkey" do
|
|
52
|
+
Fieldset.create(valid_root_attributes)
|
|
53
|
+
@fieldset.attributes = valid_root_attributes
|
|
54
|
+
@fieldset.should have(1).error_on(:nkey)
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
it "should not require an order number if there is no parent fieldset" do
|
|
58
|
+
@fieldset.should have(0).error_on(:order_num)
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
it "should require an order number if there is a parent fieldset" do
|
|
62
|
+
@fieldset.parent_fieldset = Fieldset.new
|
|
63
|
+
@fieldset.should have(1).error_on(:order_num)
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
it "should not allow a parent fieldset when it would create a cycle" do
|
|
67
|
+
fieldset1 = Fieldset.new(:nkey => "fieldset1")
|
|
68
|
+
fieldset2 = Fieldset.new(:parent_fieldset => fieldset1, :nkey => "fieldset2")
|
|
69
|
+
fieldset3 = Fieldset.new(:parent_fieldset => fieldset2, :nkey => "fieldset3")
|
|
70
|
+
fieldset1.parent_fieldset = fieldset3
|
|
71
|
+
|
|
72
|
+
fieldset1.should have(1).error_on(:parent_fieldset)
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
describe "roots scope" do
|
|
77
|
+
before(:each) do
|
|
78
|
+
@root_fieldset = Fieldset.new( valid_root_attributes )
|
|
79
|
+
@root_fieldset.save
|
|
80
|
+
|
|
81
|
+
@child_fieldset = Fieldset.new( valid_child_attributes )
|
|
82
|
+
@child_fieldset.save
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
it "should respond to roots scope" do
|
|
86
|
+
Fieldset.should respond_to :roots
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
it "should return fieldsets with no parent fieldset" do
|
|
90
|
+
roots = Fieldset.roots
|
|
91
|
+
roots.select{ |f| f.parent_fieldset.nil? }.should have(1).fieldset
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
it "should not return fieldsets with a parent fieldset" do
|
|
95
|
+
roots = Fieldset.roots
|
|
96
|
+
roots.select{ |f| !f.parent_fieldset.nil? }.should have(0).fieldset
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
describe "parent_fieldset_list static method" do
|
|
101
|
+
it "should include values for any fieldset" do
|
|
102
|
+
fieldset = Fieldset.new(:name => "parent_fieldset_list test", :nkey => "parent_fieldset_list_test")
|
|
103
|
+
fieldset.save(:validate => false)
|
|
104
|
+
DynamicFieldsets::Fieldset.parent_fieldset_list.should include [fieldset.name, fieldset.id]
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
describe "children method" do
|
|
109
|
+
before(:each) do
|
|
110
|
+
@root_fieldset = Fieldset.new( valid_root_attributes )
|
|
111
|
+
|
|
112
|
+
@child_fieldset = mock_model Fieldset
|
|
113
|
+
@child_fieldset.stub!(:id).and_return 2
|
|
114
|
+
@child_fieldset.stub!(:order_num).and_return 1
|
|
115
|
+
@child_fieldset.stub!(:name).and_return
|
|
116
|
+
|
|
117
|
+
@field1 = mock_model Field
|
|
118
|
+
@field1.stub!(:id).and_return 1
|
|
119
|
+
@field1.stub!(:order_num).and_return 2
|
|
120
|
+
@field1.stub!(:name).and_return 'z-field'
|
|
121
|
+
@field1.stub!(:enabled).and_return true
|
|
122
|
+
|
|
123
|
+
@field2 = mock_model Field
|
|
124
|
+
@field2.stub!(:id).and_return 2
|
|
125
|
+
@field2.stub!(:order_num).and_return 2
|
|
126
|
+
@field2.stub!(:name).and_return 'a-field'
|
|
127
|
+
@field2.stub!(:enabled).and_return true
|
|
128
|
+
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
it "should respond to children" do
|
|
132
|
+
@root_fieldset.should respond_to :children
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
it "should call fields and return them" do
|
|
136
|
+
@root_fieldset.should_receive(:fields).and_return [@field1]
|
|
137
|
+
@root_fieldset.children.should include @field1
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
it "should call child_fieldsets and return them" do
|
|
141
|
+
@root_fieldset.should_receive(:child_fieldsets).and_return [@child_fieldset]
|
|
142
|
+
@root_fieldset.children.should include @child_fieldset
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
it "should return a mixture of fieldsets and fields" do
|
|
146
|
+
@root_fieldset.stub!(:fields).and_return [@field1]
|
|
147
|
+
@root_fieldset.stub!(:child_fieldsets).and_return [@child_fieldset]
|
|
148
|
+
children = @root_fieldset.children
|
|
149
|
+
children.should include @field1
|
|
150
|
+
children.should include @child_fieldset
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
it "should maintain the order of the children regardless of class" do
|
|
154
|
+
@root_fieldset.stub!(:fields).and_return [@field1]
|
|
155
|
+
@root_fieldset.stub!(:child_fieldsets).and_return [@child_fieldset]
|
|
156
|
+
children = @root_fieldset.children
|
|
157
|
+
children.first.should == @child_fieldset
|
|
158
|
+
children.last.should == @field1
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
it "should handle duplicate order numbers by alphabetical order of name" do
|
|
162
|
+
@root_fieldset.stub!(:fields).and_return [@field1, @field2]
|
|
163
|
+
children = @root_fieldset.children
|
|
164
|
+
children.first.should == @field2
|
|
165
|
+
children.last.should == @field1
|
|
166
|
+
end
|
|
167
|
+
end
|
|
168
|
+
|
|
169
|
+
end
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<testsuite name="ActsAsMultipartForm" tests="1" time="0.04001929" failures="0" errors="0" skipped="0">
|
|
3
|
+
<testcase name="ActsAsMultipartForm should be valid" time="0.039701244">
|
|
4
|
+
</testcase>
|
|
5
|
+
<system-out>
|
|
6
|
+
</system-out>
|
|
7
|
+
<system-err>
|
|
8
|
+
</system-err>
|
|
9
|
+
</testsuite>
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<testsuite name="MultipartForm::InProgressForm validations" tests="5" time="0.00780956" failures="0" errors="5" skipped="0">
|
|
3
|
+
<testcase name="MultipartForm::InProgressForm validations should be valid" time="0.001769442">
|
|
4
|
+
<failure type="ActiveRecord::StatementInvalid" message="Could not find table 'in_progress_forms'">
|
|
5
|
+
Could not find table 'in_progress_forms' (ActiveRecord::StatementInvalid)
|
|
6
|
+
ActiveRecord::StatementInvalid:
|
|
7
|
+
Could not find table 'in_progress_forms'
|
|
8
|
+
./spec/in_progress_form_spec.rb:6:in `new'
|
|
9
|
+
./spec/in_progress_form_spec.rb:6:in `block (3 levels) in <top (required)>' </failure>
|
|
10
|
+
</testcase>
|
|
11
|
+
<testcase name="MultipartForm::InProgressForm validations should require a form subject" time="0.00119303">
|
|
12
|
+
<failure type="ActiveRecord::StatementInvalid" message="Could not find table 'in_progress_forms'">
|
|
13
|
+
Could not find table 'in_progress_forms' (ActiveRecord::StatementInvalid)
|
|
14
|
+
ActiveRecord::StatementInvalid:
|
|
15
|
+
Could not find table 'in_progress_forms'
|
|
16
|
+
./spec/in_progress_form_spec.rb:6:in `new'
|
|
17
|
+
./spec/in_progress_form_spec.rb:6:in `block (3 levels) in <top (required)>' </failure>
|
|
18
|
+
</testcase>
|
|
19
|
+
<testcase name="MultipartForm::InProgressForm validations should require a form name" time="0.001504453">
|
|
20
|
+
<failure type="ActiveRecord::StatementInvalid" message="Could not find table 'in_progress_forms'">
|
|
21
|
+
Could not find table 'in_progress_forms' (ActiveRecord::StatementInvalid)
|
|
22
|
+
ActiveRecord::StatementInvalid:
|
|
23
|
+
Could not find table 'in_progress_forms'
|
|
24
|
+
./spec/in_progress_form_spec.rb:6:in `new'
|
|
25
|
+
./spec/in_progress_form_spec.rb:6:in `block (3 levels) in <top (required)>' </failure>
|
|
26
|
+
</testcase>
|
|
27
|
+
<testcase name="MultipartForm::InProgressForm validations should require a last completed step" time="0.001388378">
|
|
28
|
+
<failure type="ActiveRecord::StatementInvalid" message="Could not find table 'in_progress_forms'">
|
|
29
|
+
Could not find table 'in_progress_forms' (ActiveRecord::StatementInvalid)
|
|
30
|
+
ActiveRecord::StatementInvalid:
|
|
31
|
+
Could not find table 'in_progress_forms'
|
|
32
|
+
./spec/in_progress_form_spec.rb:6:in `new'
|
|
33
|
+
./spec/in_progress_form_spec.rb:6:in `block (3 levels) in <top (required)>' </failure>
|
|
34
|
+
</testcase>
|
|
35
|
+
<testcase name="MultipartForm::InProgressForm validations should require completed" time="0.001450073">
|
|
36
|
+
<failure type="ActiveRecord::StatementInvalid" message="Could not find table 'in_progress_forms'">
|
|
37
|
+
Could not find table 'in_progress_forms' (ActiveRecord::StatementInvalid)
|
|
38
|
+
ActiveRecord::StatementInvalid:
|
|
39
|
+
Could not find table 'in_progress_forms'
|
|
40
|
+
./spec/in_progress_form_spec.rb:6:in `new'
|
|
41
|
+
./spec/in_progress_form_spec.rb:6:in `block (3 levels) in <top (required)>' </failure>
|
|
42
|
+
</testcase>
|
|
43
|
+
<system-out>
|
|
44
|
+
</system-out>
|
|
45
|
+
<system-err>
|
|
46
|
+
</system-err>
|
|
47
|
+
</testsuite>
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<testsuite name="Navigation" tests="1" time="0.004622105" failures="0" errors="0" skipped="0">
|
|
3
|
+
<testcase name="Navigation should be a valid app" time="0.002294373">
|
|
4
|
+
</testcase>
|
|
5
|
+
<system-out>
|
|
6
|
+
</system-out>
|
|
7
|
+
<system-err>
|
|
8
|
+
</system-err>
|
|
9
|
+
</testsuite>
|
data/spec/spec_helper.rb
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# Configure Rails Envinronment
|
|
2
|
+
ENV["RAILS_ENV"] = "test"
|
|
3
|
+
|
|
4
|
+
require "ruby-debug"
|
|
5
|
+
require File.expand_path("../dummy/config/environment.rb", __FILE__)
|
|
6
|
+
require "rails/test_help"
|
|
7
|
+
require "rspec/rails"
|
|
8
|
+
|
|
9
|
+
ActionMailer::Base.delivery_method = :test
|
|
10
|
+
ActionMailer::Base.perform_deliveries = true
|
|
11
|
+
ActionMailer::Base.default_url_options[:host] = "test.com"
|
|
12
|
+
|
|
13
|
+
Rails.backtrace_cleaner.remove_silencers!
|
|
14
|
+
|
|
15
|
+
# Configure capybara for integration testing
|
|
16
|
+
require "capybara/rails"
|
|
17
|
+
Capybara.default_driver = :rack_test
|
|
18
|
+
Capybara.default_selector = :css
|
|
19
|
+
|
|
20
|
+
# Run any available migration
|
|
21
|
+
ActiveRecord::Migrator.migrate File.expand_path("../dummy/db/migrate/", __FILE__)
|
|
22
|
+
|
|
23
|
+
# Load support files
|
|
24
|
+
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
|
|
25
|
+
|
|
26
|
+
RSpec.configure do |config|
|
|
27
|
+
# Remove this line if you don't want RSpec's should and should_not
|
|
28
|
+
# methods or matchers
|
|
29
|
+
require 'rspec/expectations'
|
|
30
|
+
config.include RSpec::Matchers
|
|
31
|
+
|
|
32
|
+
# == Mock Framework
|
|
33
|
+
config.mock_with :rspec
|
|
34
|
+
|
|
35
|
+
# use transactions
|
|
36
|
+
config.use_transactional_fixtures = true
|
|
37
|
+
end
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# Helper for the field_defaults to create valid attributes and other data used in multiple tests
|
|
2
|
+
module FieldDefaultHelper
|
|
3
|
+
# attributes for a field default
|
|
4
|
+
# @returns [Hash] all attributes needed to pass validations
|
|
5
|
+
def valid_attributes
|
|
6
|
+
{
|
|
7
|
+
:id => 1,
|
|
8
|
+
:field_id => 1,
|
|
9
|
+
:value => "Scott Sampson",
|
|
10
|
+
}
|
|
11
|
+
end
|
|
12
|
+
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# Helper for the field model to create valid attributes
|
|
2
|
+
module FieldHelper
|
|
3
|
+
# this has issues with not being able to set type
|
|
4
|
+
# I am manually setting it where it is needed to avoid problems
|
|
5
|
+
def valid_attributes
|
|
6
|
+
{
|
|
7
|
+
:fieldset_id => 1,
|
|
8
|
+
:name => "Test field name",
|
|
9
|
+
:label => "Test field label",
|
|
10
|
+
:field_type => "textfield",
|
|
11
|
+
:required => true,
|
|
12
|
+
:enabled => true,
|
|
13
|
+
:order_num => 1
|
|
14
|
+
}
|
|
15
|
+
end
|
|
16
|
+
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# Helper for the fieldset to create valid attributes and other data used in multiple tests
|
|
2
|
+
module FieldHtmlAttributeHelper
|
|
3
|
+
# attributes for a html attribute
|
|
4
|
+
# @returns [Hash] all attributes needed to pass validations
|
|
5
|
+
def valid_attributes
|
|
6
|
+
{
|
|
7
|
+
:id => 1,
|
|
8
|
+
:field_id => 1,
|
|
9
|
+
:attribute_name => "class",
|
|
10
|
+
:value => "on"
|
|
11
|
+
}
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
end
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# Helper for the field_options to create valid attributes and other data used in multiple tests
|
|
2
|
+
module FieldOptionHelper
|
|
3
|
+
# attributes for a field option
|
|
4
|
+
# @returns [Hash] all attributes needed to pass validations
|
|
5
|
+
def valid_attributes
|
|
6
|
+
{
|
|
7
|
+
:id => 1,
|
|
8
|
+
:field_id => 1,
|
|
9
|
+
:name => "Supervisor",
|
|
10
|
+
:enabled => true
|
|
11
|
+
}
|
|
12
|
+
end
|
|
13
|
+
end
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# Helper for the field record model
|
|
2
|
+
module FieldRecordHelper
|
|
3
|
+
# attributes for the field reocrd that should pass validations
|
|
4
|
+
# @returns [Hash] All attributes needed to pass validations
|
|
5
|
+
def valid_attributes
|
|
6
|
+
{
|
|
7
|
+
:field_id => 1,
|
|
8
|
+
:fieldset_associator_id => 1,
|
|
9
|
+
:value => "forty two"
|
|
10
|
+
}
|
|
11
|
+
end
|
|
12
|
+
end
|