dynamic_fieldsets 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- 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
|