josevalim-inherited_resources 0.6.3 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -5,7 +5,6 @@ class Folder; end
5
5
 
6
6
  class BooksController < InheritedResources::Base
7
7
  actions :index, :show
8
- defaults :route_prefix => nil
9
8
  end
10
9
 
11
10
  class ReadersController < InheritedResources::Base
@@ -15,28 +14,23 @@ end
15
14
  class FoldersController < InheritedResources::Base
16
15
  end
17
16
 
18
- # For belongs_to tests
19
- class GreatSchool
17
+ class Dean
18
+ def self.human_name; 'Dean'; end
20
19
  end
21
20
 
22
- class Professor
23
- def self.human_name; 'Professor'; end
21
+ class SchoolsController < InheritedResources::Base
22
+ has_scope :by_city
23
+ has_scope :featured, :boolean => true, :only => :index, :key => :by_featured
24
+ has_scope :limit, :default => 10, :except => :index, :on => :anything
24
25
  end
25
26
 
26
- BELONGS_TO_OPTIONS = {
27
- :parent_class => GreatSchool,
28
- :instance_name => :great_school,
29
- :finder => :find_by_title!,
30
- :param => :school_title
31
- }
32
-
33
- class ProfessorsController < InheritedResources::Base
34
- belongs_to :school, BELONGS_TO_OPTIONS
27
+ class DeansController < InheritedResources::Base
28
+ belongs_to :school
35
29
  end
36
30
 
37
31
 
38
32
  class ActionsClassMethodTest < ActiveSupport::TestCase
39
- def test_actions_are_undefined_when_only_option_is_given
33
+ def test_actions_are_undefined
40
34
  action_methods = BooksController.send(:action_methods)
41
35
  assert_equal 2, action_methods.size
42
36
 
@@ -93,90 +87,137 @@ class DefaultsClassMethodTest < ActiveSupport::TestCase
93
87
  end
94
88
  end
95
89
 
90
+ class BelongsToErrorsTest < ActiveSupport::TestCase
91
+ def test_belongs_to_raise_errors_with_invalid_arguments
92
+ assert_raise ArgumentError do
93
+ DeansController.send(:belongs_to)
94
+ end
96
95
 
97
- class BelongsToClassMethodTest < ActionController::TestCase
98
- tests ProfessorsController
99
-
100
- def setup
101
- GreatSchool.expects(:find_by_title!).with('nice').returns(mock_school(:professors => Professor))
102
-
103
- @controller.stubs(:resource_url).returns('/')
104
- @controller.stubs(:collection_url).returns('/')
96
+ assert_raise ArgumentError do
97
+ DeansController.send(:belongs_to, :nice, :invalid_key => '')
98
+ end
105
99
  end
106
100
 
107
- def test_expose_the_resquested_school_with_chosen_instance_variable_on_index
108
- Professor.stubs(:find).returns([mock_professor])
109
- get :index, :school_title => 'nice'
110
- assert_equal mock_school, assigns(:great_school)
101
+ def test_belongs_to_raises_an_error_when_multiple_associations_are_given_with_options
102
+ assert_raise ArgumentError do
103
+ DeansController.send(:belongs_to, :arguments, :with_options, :parent_class => Professor)
104
+ end
111
105
  end
112
106
 
113
- def test_expose_the_resquested_school_with_chosen_instance_variable_on_show
114
- Professor.stubs(:find).returns(mock_professor)
115
- get :show, :school_title => 'nice'
116
- assert_equal mock_school, assigns(:great_school)
107
+ def test_url_helpers_are_recreated_just_once_when_belongs_to_is_called_with_block
108
+ InheritedResources::UrlHelpers.expects(:create_resources_url_helpers!).returns(true).once
109
+ DeansController.send(:belongs_to, :school) do
110
+ belongs_to :association
111
+ end
112
+ ensure
113
+ DeansController.send(:parents_symbols=, [:school])
117
114
  end
118
115
 
119
- def test_expose_the_resquested_school_with_chosen_instance_variable_on_new
120
- Professor.stubs(:build).returns(mock_professor)
121
- get :new, :school_title => 'nice'
122
- assert_equal mock_school, assigns(:great_school)
116
+ def test_url_helpers_are_recreated_just_once_when_belongs_to_is_called_with_multiple_blocks
117
+ InheritedResources::UrlHelpers.expects(:create_resources_url_helpers!).returns(true).once
118
+ DeansController.send(:belongs_to, :school) do
119
+ belongs_to :association do
120
+ belongs_to :nested
121
+ end
122
+ end
123
+ ensure
124
+ DeansController.send(:parents_symbols=, [:school])
123
125
  end
124
126
 
125
- def test_expose_the_resquested_school_with_chosen_instance_variable_on_edit
126
- Professor.stubs(:find).returns(mock_professor)
127
- get :edit, :school_title => 'nice'
128
- assert_equal mock_school, assigns(:great_school)
127
+ def test_belongs_to_raises_an_error_when_multiple_associations_are_given_with_block
128
+ assert_raise ArgumentError, "You cannot define multiple associations and give a block to belongs_to." do
129
+ DeansController.send(:belongs_to, :school, :another) do
130
+ belongs_to :association
131
+ end
132
+ end
133
+ ensure
134
+ DeansController.send(:parents_symbols=, [:school])
129
135
  end
136
+ end
137
+
138
+ class HasScopeClassMethods < ActiveSupport::TestCase
130
139
 
131
- def test_expose_the_resquested_school_with_chosen_instance_variable_on_create
132
- Professor.stubs(:build).returns(mock_professor(:save => true))
133
- post :create, :school_title => 'nice'
134
- assert_equal mock_school, assigns(:great_school)
140
+ def test_scope_configuration_is_stored_as_hashes
141
+ config = SchoolsController.send(:scopes_configuration)
142
+ assert config.key?(:school)
143
+ assert config.key?(:anything)
144
+
145
+ assert config[:school].key?(:by_city)
146
+ assert config[:school].key?(:featured)
147
+ assert config[:anything].key?(:limit)
148
+
149
+ assert_equal config[:school][:by_city], { :key => :by_city, :only => [], :except => [] }
150
+ assert_equal config[:school][:featured], { :key => :by_featured, :only => [ :index ], :except => [], :boolean => true }
151
+ assert_equal config[:anything][:limit], { :key => :limit, :except => [ :index ], :only => [], :default => 10 }
135
152
  end
136
153
 
137
- def test_expose_the_resquested_school_with_chosen_instance_variable_on_update
138
- Professor.stubs(:find).returns(mock_professor(:update_attributes => true))
139
- put :update, :school_title => 'nice'
140
- assert_equal mock_school, assigns(:great_school)
154
+ def test_scope_on_value_is_guessed_inside_belongs_to_blocks
155
+ DeansController.send(:has_scope, :limit)
156
+ DeansController.send(:belongs_to, :school) do
157
+ has_scope :featured
158
+ has_scope :another, :on => :dean
159
+ end
160
+
161
+ config = DeansController.send(:scopes_configuration)
162
+ assert config[:school].key?(:featured)
163
+ assert config[:dean].key?(:limit)
164
+ assert config[:dean].key?(:another)
165
+ ensure
166
+ DeansController.send(:scopes_configuration=, {})
141
167
  end
142
168
 
143
- def test_expose_the_resquested_school_with_chosen_instance_variable_on_destroy
144
- Professor.stubs(:find).returns(mock_professor(:destroy => true))
145
- delete :destroy, :school_title => 'nice'
146
- assert_equal mock_school, assigns(:great_school)
169
+ def test_scope_is_loaded_from_another_controller
170
+ DeansController.send(:load_scopes_from, SchoolsController)
171
+ config = DeansController.send(:scopes_configuration)
172
+
173
+ assert config.key?(:school)
174
+ assert config.key?(:anything)
175
+
176
+ assert config[:school].key?(:by_city)
177
+ assert config[:school].key?(:featured)
178
+ assert config[:anything].key?(:limit)
179
+ ensure
180
+ DeansController.send(:scopes_configuration=, {})
147
181
  end
148
182
 
149
- protected
183
+ def test_scope_is_deep_merged_from_another_controller
184
+ config = DeansController.send(:scopes_configuration)
150
185
 
151
- def mock_school(stubs={})
152
- @mock_school ||= mock(stubs)
153
- end
186
+ DeansController.send(:has_scope, :featured, :on => :school)
187
+ assert_equal config[:school][:featured], { :key => :featured, :only => [ ], :except => [] }
154
188
 
155
- def mock_professor(stubs={})
156
- @mock_professor ||= mock(stubs)
157
- end
158
- end
189
+ DeansController.send(:load_scopes_from, SchoolsController)
190
+ assert config.key?(:school)
191
+ assert config[:school].key?(:by_city)
192
+ assert config[:school].key?(:featured)
193
+ assert_equal config[:school][:featured], { :key => :by_featured, :only => [ :index ], :except => [], :boolean => true }
194
+ end
159
195
 
160
- class BelongsToErrorsTest < ActiveSupport::TestCase
161
- def test_belongs_to_raise_errors_with_invalid_arguments
162
- assert_raise ArgumentError do
163
- ProfessorsController.send(:belongs_to)
164
- end
196
+ def test_scope_is_loaded_from_another_controller_with_on_specified
197
+ DeansController.send(:load_scopes_from, SchoolsController, :on => :school)
198
+ config = DeansController.send(:scopes_configuration)
165
199
 
166
- assert_raise ArgumentError do
167
- ProfessorsController.send(:belongs_to, :arguments, :with_options, :parent_class => Professor)
168
- end
200
+ assert config.key?(:school)
201
+ assert config[:school].key?(:by_city)
202
+ assert config[:school].key?(:featured)
169
203
 
170
- assert_raise ArgumentError do
171
- ProfessorsController.send(:belongs_to, :nice, :invalid_key => '')
172
- end
204
+ assert !config.key?(:anything)
205
+ ensure
206
+ DeansController.send(:scopes_configuration=, {})
173
207
  end
174
208
 
175
- def test_url_helpers_are_recreated_when_defaults_change
176
- InheritedResources::UrlHelpers.expects(:create_resources_url_helpers!).returns(true).once
177
- ProfessorsController.send(:defaults, BELONGS_TO_OPTIONS)
209
+ def test_scope_is_loaded_from_another_controller_with_on_guessed
210
+ DeansController.send(:belongs_to, :school) do
211
+ load_scopes_from SchoolsController
212
+ end
213
+ config = DeansController.send(:scopes_configuration)
214
+
215
+ assert config.key?(:school)
216
+ assert config[:school].key?(:by_city)
217
+ assert config[:school].key?(:featured)
218
+
219
+ assert !config.key?(:anything)
178
220
  ensure
179
- # Restore default settings
180
- ProfessorsController.send(:parents_symbols=, [:school])
221
+ DeansController.send(:scopes_configuration=, {})
181
222
  end
182
223
  end
@@ -0,0 +1,76 @@
1
+ require File.dirname(__FILE__) + '/test_helper'
2
+
3
+ class GreatSchool
4
+ end
5
+
6
+ class Professor
7
+ def self.human_name; 'Professor'; end
8
+ end
9
+
10
+ class ProfessorsController < InheritedResources::Base
11
+ belongs_to :school, :parent_class => GreatSchool, :instance_name => :great_school,
12
+ :finder => :find_by_title!, :param => :school_title
13
+ end
14
+
15
+ class CustomizedBelongsToTest < ActionController::TestCase
16
+ tests ProfessorsController
17
+
18
+ def setup
19
+ GreatSchool.expects(:find_by_title!).with('nice').returns(mock_school(:professors => Professor))
20
+ @controller.stubs(:resource_url).returns('/')
21
+ @controller.stubs(:collection_url).returns('/')
22
+ end
23
+
24
+ def test_expose_the_resquested_school_with_chosen_instance_variable_on_index
25
+ Professor.stubs(:find).returns([mock_professor])
26
+ get :index, :school_title => 'nice'
27
+ assert_equal mock_school, assigns(:great_school)
28
+ end
29
+
30
+ def test_expose_the_resquested_school_with_chosen_instance_variable_on_show
31
+ Professor.stubs(:find).returns(mock_professor)
32
+ get :show, :school_title => 'nice'
33
+ assert_equal mock_school, assigns(:great_school)
34
+ end
35
+
36
+ def test_expose_the_resquested_school_with_chosen_instance_variable_on_new
37
+ Professor.stubs(:build).returns(mock_professor)
38
+ get :new, :school_title => 'nice'
39
+ assert_equal mock_school, assigns(:great_school)
40
+ end
41
+
42
+ def test_expose_the_resquested_school_with_chosen_instance_variable_on_edit
43
+ Professor.stubs(:find).returns(mock_professor)
44
+ get :edit, :school_title => 'nice'
45
+ assert_equal mock_school, assigns(:great_school)
46
+ end
47
+
48
+ def test_expose_the_resquested_school_with_chosen_instance_variable_on_create
49
+ Professor.stubs(:build).returns(mock_professor(:save => true))
50
+ post :create, :school_title => 'nice'
51
+ assert_equal mock_school, assigns(:great_school)
52
+ end
53
+
54
+ def test_expose_the_resquested_school_with_chosen_instance_variable_on_update
55
+ Professor.stubs(:find).returns(mock_professor(:update_attributes => true))
56
+ put :update, :school_title => 'nice'
57
+ assert_equal mock_school, assigns(:great_school)
58
+ end
59
+
60
+ def test_expose_the_resquested_school_with_chosen_instance_variable_on_destroy
61
+ Professor.stubs(:find).returns(mock_professor(:destroy => true))
62
+ delete :destroy, :school_title => 'nice'
63
+ assert_equal mock_school, assigns(:great_school)
64
+ end
65
+
66
+ protected
67
+
68
+ def mock_school(stubs={})
69
+ @mock_school ||= mock(stubs)
70
+ end
71
+
72
+ def mock_professor(stubs={})
73
+ @mock_professor ||= mock(stubs)
74
+ end
75
+ end
76
+
@@ -5,7 +5,8 @@ class Malarz
5
5
  end
6
6
 
7
7
  class PaintersController < InheritedResources::Base
8
- defaults :instance_name => 'malarz', :collection_name => 'malarze', :resource_class => Malarz
8
+ defaults :instance_name => 'malarz', :collection_name => 'malarze',
9
+ :resource_class => Malarz, :route_prefix => nil
9
10
  end
10
11
 
11
12
  class DefaultsTest < ActionController::TestCase
@@ -0,0 +1,83 @@
1
+ require File.dirname(__FILE__) + '/test_helper'
2
+
3
+ class Address
4
+ def self.human_name; 'Address'; end
5
+ end
6
+
7
+ class AddressesController < InheritedResources::Base
8
+ protected
9
+ def interpolation_options
10
+ { :reference => 'Ocean Avenue' }
11
+ end
12
+ end
13
+
14
+ module Admin; end
15
+ class Admin::AddressesController < InheritedResources::Base
16
+ protected
17
+ def interpolation_options
18
+ { :reference => 'Ocean Avenue' }
19
+ end
20
+ end
21
+
22
+ class FlashBaseHelpersTest < ActionController::TestCase
23
+ tests AddressesController
24
+
25
+ def setup
26
+ @request.accept = 'application/xml'
27
+ end
28
+
29
+ def test_success_flash_message_on_create_with_yml
30
+ Address.stubs(:new).returns(mock_address(:save => true))
31
+ @controller.stubs(:address_url)
32
+ post :create
33
+ assert_equal 'You created a new address close to <b>Ocean Avenue</b>.', flash[:notice]
34
+ end
35
+
36
+ def test_success_flash_message_on_create_with_namespaced_controller
37
+ @controller = Admin::AddressesController.new
38
+ Address.stubs(:new).returns(mock_address(:save => true))
39
+ @controller.stubs(:address_url)
40
+ post :create
41
+ assert_equal 'Admin, you created a new address close to <b>Ocean Avenue</b>.', flash[:notice]
42
+ end
43
+
44
+ def test_failure_flash_message_on_create_with_namespaced_controller_actions
45
+ @controller = Admin::AddressesController.new
46
+ Address.stubs(:new).returns(mock_address(:save => false))
47
+ @controller.stubs(:address_url)
48
+ post :create
49
+ assert_equal 'Admin error message.', flash[:error]
50
+ end
51
+
52
+ def test_inherited_success_flash_message_on_update_on_namespaced_controllers
53
+ @controller = Admin::AddressesController.new
54
+ Address.stubs(:find).returns(mock_address(:update_attributes => true))
55
+ put :update
56
+ assert_response :success
57
+ assert_equal 'Nice! Address was updated with success!', flash[:notice]
58
+ end
59
+
60
+ def test_success_flash_message_on_update
61
+ Address.stubs(:find).returns(mock_address(:update_attributes => true))
62
+ put :update
63
+ assert_response :success
64
+ assert_equal 'Nice! Address was updated with success!', flash[:notice]
65
+ end
66
+
67
+ def test_failure_flash_message_on_update
68
+ Address.stubs(:find).returns(mock_address(:update_attributes => false, :errors => []))
69
+ put :update
70
+ assert_equal 'Oh no! We could not update your address!', flash[:error]
71
+ end
72
+
73
+ def test_success_flash_message_on_destroy
74
+ Address.stubs(:find).returns(mock_address(:destroy => true))
75
+ delete :destroy
76
+ assert_equal 'Address was successfully destroyed.', flash[:notice]
77
+ end
78
+
79
+ protected
80
+ def mock_address(stubs={})
81
+ @mock_address ||= mock(stubs)
82
+ end
83
+ end
@@ -0,0 +1,171 @@
1
+ require File.dirname(__FILE__) + '/test_helper'
2
+
3
+ class Tree
4
+ def self.human_name; 'Tree'; end
5
+ end
6
+
7
+ class Branch
8
+ def self.human_name; 'Branch'; end
9
+ end
10
+
11
+ class TreesController < InheritedResources::Base
12
+ has_scope :color
13
+ has_scope :only_tall, :boolean => true, :only => :index
14
+ has_scope :shadown_range, :default => 10, :except => [ :index, :show, :destroy ]
15
+ has_scope :root_type, :key => :root
16
+ has_scope :another, :on => :anything, :default => 10, :only => :destroy
17
+ end
18
+
19
+ class BranchesController < InheritedResources::Base
20
+ belongs_to :tree do
21
+ load_scopes_from TreesController
22
+ end
23
+
24
+ has_scope :by_size
25
+ end
26
+
27
+ class HasScopeTest < ActionController::TestCase
28
+ tests TreesController
29
+
30
+ def setup
31
+ @controller.stubs(:resource_url).returns('/')
32
+ @controller.stubs(:collection_url).returns('/')
33
+ end
34
+
35
+ def test_boolean_scope_is_called_when_boolean_param_is_true
36
+ Tree.expects(:only_tall).with().returns(Tree).in_sequence
37
+ Tree.expects(:find).with(:all).returns([mock_tree]).in_sequence
38
+ get :index, :only_tall => 'true'
39
+ assert_equal([mock_tree], assigns(:trees))
40
+ assert_equal({ :only_tall => 'true' }, assigns(:current_scopes))
41
+ end
42
+
43
+ def test_boolean_scope_is_called_when_boolean_param_is_false
44
+ Tree.expects(:only_tall).never
45
+ Tree.expects(:find).with(:all).returns([mock_tree])
46
+ get :index, :only_tall => 'false'
47
+ assert_equal([mock_tree], assigns(:trees))
48
+ assert_equal({ :only_tall => 'false' }, assigns(:current_scopes))
49
+ end
50
+
51
+ def test_scope_is_called_only_on_index
52
+ Tree.expects(:only_tall).never
53
+ Tree.expects(:find).with('42').returns(mock_tree)
54
+ get :show, :only_tall => 'true', :id => '42'
55
+ assert_equal(mock_tree, assigns(:tree))
56
+ assert_equal({ }, assigns(:current_scopes))
57
+ end
58
+
59
+ def test_scope_is_called_except_on_index
60
+ Tree.expects(:shadown_range).with().never
61
+ Tree.expects(:find).with(:all).returns([mock_tree])
62
+ get :index, :shadown_range => 20
63
+ assert_equal([mock_tree], assigns(:trees))
64
+ assert_equal({ }, assigns(:current_scopes))
65
+ end
66
+
67
+ def test_scope_is_called_with_arguments
68
+ Tree.expects(:color).with('blue').returns(Tree).in_sequence
69
+ Tree.expects(:find).with(:all).returns([mock_tree]).in_sequence
70
+ get :index, :color => 'blue'
71
+ assert_equal([mock_tree], assigns(:trees))
72
+ assert_equal({ :color => 'blue' }, assigns(:current_scopes))
73
+ end
74
+
75
+ def test_multiple_scopes_are_called
76
+ Tree.expects(:only_tall).with().returns(Tree)
77
+ Tree.expects(:color).with('blue').returns(Tree)
78
+ Tree.expects(:find).with(:all).returns([mock_tree])
79
+ get :index, :color => 'blue', :only_tall => 'true'
80
+ assert_equal([mock_tree], assigns(:trees))
81
+ assert_equal({ :color => 'blue', :only_tall => 'true' }, assigns(:current_scopes))
82
+ end
83
+
84
+ def test_scope_is_called_with_default_value
85
+ Tree.expects(:shadown_range).with(10).returns(Tree).in_sequence
86
+ Tree.expects(:find).with('42').returns(mock_tree).in_sequence
87
+ get :edit, :id => '42'
88
+ assert_equal(mock_tree, assigns(:tree))
89
+ assert_equal({ :shadown_range => 10 }, assigns(:current_scopes))
90
+ end
91
+
92
+ def test_default_scope_value_can_be_overwritten
93
+ Tree.expects(:shadown_range).with('20').returns(Tree).in_sequence
94
+ Tree.expects(:find).with('42').returns(mock_tree).in_sequence
95
+ get :edit, :id => '42', :shadown_range => '20'
96
+ assert_equal(mock_tree, assigns(:tree))
97
+ assert_equal({ :shadown_range => '20' }, assigns(:current_scopes))
98
+ end
99
+
100
+ def test_scope_with_different_key
101
+ Tree.expects(:root_type).with('outside').returns(Tree).in_sequence
102
+ Tree.expects(:find).with('42').returns(mock_tree).in_sequence
103
+ get :show, :id => '42', :root => 'outside'
104
+ assert_equal(mock_tree, assigns(:tree))
105
+ assert_equal({ :root => 'outside' }, assigns(:current_scopes))
106
+ end
107
+
108
+ def test_scope_on_another_object_is_never_called
109
+ Tree.expects(:another).never
110
+ Tree.expects(:find).with('42').returns(mock_tree)
111
+ mock_tree.expects(:destroy)
112
+ delete :destroy, :id => '42'
113
+ assert_equal(mock_tree, assigns(:tree))
114
+ assert_equal({ }, assigns(:current_scopes))
115
+ end
116
+
117
+ protected
118
+
119
+ def mock_tree(stubs={})
120
+ @mock_tree ||= mock(stubs)
121
+ end
122
+
123
+ end
124
+
125
+ class NestedHasScopeTest < ActionController::TestCase
126
+ tests BranchesController
127
+
128
+ def test_scope_is_applied_on_parent
129
+ Tree.expects(:only_tall).with().returns(Tree).in_sequence
130
+ Tree.expects(:find).with('42').returns(mock_tree).in_sequence
131
+ mock_tree.expects(:branches).returns(Branch).in_sequence
132
+ Branch.expects(:find).with(:all).returns([mock_branch]).in_sequence
133
+ get :index, :only_tall => 'true', :tree_id => '42'
134
+ assert_equal(mock_tree, assigns(:tree))
135
+ assert_equal([mock_branch], assigns(:branches))
136
+ assert_equal({ :only_tall => 'true' }, assigns(:current_scopes))
137
+ end
138
+
139
+ def test_scope_is_applied_on_resource
140
+ Tree.expects(:find).with('42').returns(mock_tree).in_sequence
141
+ mock_tree.expects(:branches).returns(Branch).in_sequence
142
+ Branch.expects(:by_size).with('10').returns(Branch).in_sequence
143
+ Branch.expects(:find).with(:all).returns([mock_branch]).in_sequence
144
+ get :index, :by_size => '10', :tree_id => '42'
145
+ assert_equal(mock_tree, assigns(:tree))
146
+ assert_equal([mock_branch], assigns(:branches))
147
+ assert_equal({ :by_size => '10' }, assigns(:current_scopes))
148
+ end
149
+
150
+ def test_scope_is_applied_on_both_resource_and_parent
151
+ Tree.expects(:only_tall).with().returns(Tree).in_sequence
152
+ Tree.expects(:find).with('42').returns(mock_tree).in_sequence
153
+ mock_tree.expects(:branches).returns(Branch).in_sequence
154
+ Branch.expects(:by_size).with('10').returns(Branch).in_sequence
155
+ Branch.expects(:find).with(:all).returns([mock_branch]).in_sequence
156
+ get :index, :only_tall => 'true', :by_size => '10', :tree_id => '42'
157
+ assert_equal(mock_tree, assigns(:tree))
158
+ assert_equal([mock_branch], assigns(:branches))
159
+ assert_equal({ :by_size => '10', :only_tall => 'true' }, assigns(:current_scopes))
160
+ end
161
+
162
+ protected
163
+
164
+ def mock_tree(stubs={})
165
+ @mock_tree ||= mock(stubs)
166
+ end
167
+
168
+ def mock_branch(stubs={})
169
+ @mock_branch ||= mock(stubs)
170
+ end
171
+ end
data/test/test_helper.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  require 'test/unit'
2
2
  require 'rubygems'
3
+ require 'ruby-debug'
3
4
  require 'mocha'
4
5
 
5
6
  ENV["RAILS_ENV"] = "test"
@@ -12,19 +13,14 @@ require 'action_controller/test_process'
12
13
  I18n.load_path << File.join(File.dirname(__FILE__), 'locales', 'en.yml')
13
14
  I18n.reload!
14
15
 
15
- # Load respond_to before defining ApplicationController
16
- require File.dirname(__FILE__) + '/../lib/inherited_resources/respond_to.rb'
16
+ # Add IR to load path and load the main file
17
+ ActiveSupport::Dependencies.load_paths << File.expand_path(File.dirname(__FILE__) + '/../lib')
18
+ require_dependency 'inherited_resources'
17
19
 
18
- # Define ApplicationController
19
20
  class ApplicationController < ActionController::Base; end
20
21
 
21
- # Load InheritedResources::Base after defining ApplicationController
22
- require File.dirname(__FILE__) + '/../lib/inherited_resources/base.rb'
23
-
24
- # Define view_paths
25
22
  ActionController::Base.view_paths = File.join(File.dirname(__FILE__), 'views')
26
23
 
27
- # Define default routes
28
24
  ActionController::Routing::Routes.draw do |map|
29
25
  map.connect ':controller/:action/:id'
30
26
  end
@@ -31,18 +31,18 @@ class ChairsController < InheritedResources::Base
31
31
  end
32
32
 
33
33
  class OwnersController < InheritedResources::Base
34
- belongs_to :house, :singleton => true
34
+ singleton_belongs_to :house
35
35
  end
36
36
 
37
37
  class Bed; end
38
38
  class BedsController < InheritedResources::Base
39
- belongs_to :house, :building, :polymorphic => true, :optional => true
39
+ optional_belongs_to :house, :building
40
40
  end
41
41
 
42
42
  class Dish; end
43
43
  class DishesController < InheritedResources::Base
44
44
  belongs_to :house do
45
- belongs_to :table, :kitchen, :polymorphic => true
45
+ polymorphic_belongs_to :table, :kitchen
46
46
  end
47
47
  end
48
48
 
@@ -0,0 +1 @@
1
+ Edit HTML
@@ -0,0 +1 @@
1
+ Index HTML
@@ -0,0 +1 @@
1
+ New HTML
@@ -0,0 +1 @@
1
+ Show HTML
@@ -0,0 +1 @@
1
+ Index HTML
@@ -0,0 +1 @@
1
+ New HTML
@@ -0,0 +1 @@
1
+ Show HTML
@@ -0,0 +1 @@
1
+ Edit HTML
@@ -0,0 +1 @@
1
+ Index HTML
@@ -0,0 +1 @@
1
+ New HTML
@@ -0,0 +1 @@
1
+ Show HTML