radar-resource_controller 0.6.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (233) hide show
  1. data/LICENSE +22 -0
  2. data/README.rdoc +336 -0
  3. data/VERSION.yml +4 -0
  4. data/generators/scaffold_resource/USAGE +29 -0
  5. data/generators/scaffold_resource/scaffold_resource_generator.rb +179 -0
  6. data/generators/scaffold_resource/templates/controller.rb +2 -0
  7. data/generators/scaffold_resource/templates/fixtures.yml +10 -0
  8. data/generators/scaffold_resource/templates/functional_test.rb +57 -0
  9. data/generators/scaffold_resource/templates/helper.rb +2 -0
  10. data/generators/scaffold_resource/templates/migration.rb +15 -0
  11. data/generators/scaffold_resource/templates/model.rb +2 -0
  12. data/generators/scaffold_resource/templates/old_migration.rb +13 -0
  13. data/generators/scaffold_resource/templates/rspec/functional_spec.rb +255 -0
  14. data/generators/scaffold_resource/templates/rspec/helper_spec.rb +11 -0
  15. data/generators/scaffold_resource/templates/rspec/routing_spec.rb +61 -0
  16. data/generators/scaffold_resource/templates/rspec/unit_spec.rb +11 -0
  17. data/generators/scaffold_resource/templates/rspec/views/edit_spec.rb +28 -0
  18. data/generators/scaffold_resource/templates/rspec/views/index_spec.rb +26 -0
  19. data/generators/scaffold_resource/templates/rspec/views/new_spec.rb +30 -0
  20. data/generators/scaffold_resource/templates/rspec/views/show_spec.rb +25 -0
  21. data/generators/scaffold_resource/templates/shoulda_functional_test.rb +19 -0
  22. data/generators/scaffold_resource/templates/unit_test.rb +7 -0
  23. data/generators/scaffold_resource/templates/view__form.erb +6 -0
  24. data/generators/scaffold_resource/templates/view__form.haml +5 -0
  25. data/generators/scaffold_resource/templates/view_edit.erb +16 -0
  26. data/generators/scaffold_resource/templates/view_edit.haml +11 -0
  27. data/generators/scaffold_resource/templates/view_index.erb +22 -0
  28. data/generators/scaffold_resource/templates/view_index.haml +19 -0
  29. data/generators/scaffold_resource/templates/view_new.erb +12 -0
  30. data/generators/scaffold_resource/templates/view_new.haml +9 -0
  31. data/generators/scaffold_resource/templates/view_show.erb +9 -0
  32. data/generators/scaffold_resource/templates/view_show.haml +9 -0
  33. data/lib/resource_controller/accessors.rb +77 -0
  34. data/lib/resource_controller/action_options.rb +40 -0
  35. data/lib/resource_controller/actions.rb +75 -0
  36. data/lib/resource_controller/base.rb +15 -0
  37. data/lib/resource_controller/class_methods.rb +24 -0
  38. data/lib/resource_controller/controller.rb +70 -0
  39. data/lib/resource_controller/failable_action_options.rb +25 -0
  40. data/lib/resource_controller/helpers/current_objects.rb +73 -0
  41. data/lib/resource_controller/helpers/internal.rb +90 -0
  42. data/lib/resource_controller/helpers/nested.rb +67 -0
  43. data/lib/resource_controller/helpers/singleton_customizations.rb +64 -0
  44. data/lib/resource_controller/helpers/urls.rb +132 -0
  45. data/lib/resource_controller/helpers.rb +28 -0
  46. data/lib/resource_controller/response_collector.rb +27 -0
  47. data/lib/resource_controller/singleton.rb +15 -0
  48. data/lib/resource_controller.rb +26 -0
  49. data/lib/urligence.rb +50 -0
  50. data/rails/init.rb +6 -0
  51. data/test/Rakefile +10 -0
  52. data/test/app/controllers/accounts_controller.rb +6 -0
  53. data/test/app/controllers/application_controller.rb +6 -0
  54. data/test/app/controllers/cms/options_controller.rb +3 -0
  55. data/test/app/controllers/cms/personnel_controller.rb +2 -0
  56. data/test/app/controllers/cms/photos_controller.rb +6 -0
  57. data/test/app/controllers/cms/products_controller.rb +3 -0
  58. data/test/app/controllers/comments_controller.rb +3 -0
  59. data/test/app/controllers/images_controller.rb +4 -0
  60. data/test/app/controllers/options_controller.rb +8 -0
  61. data/test/app/controllers/people_controller.rb +9 -0
  62. data/test/app/controllers/photos_controller.rb +12 -0
  63. data/test/app/controllers/posts_controller.rb +10 -0
  64. data/test/app/controllers/projects_controller.rb +11 -0
  65. data/test/app/controllers/somethings_controller.rb +3 -0
  66. data/test/app/controllers/tags_controller.rb +13 -0
  67. data/test/app/controllers/users_controller.rb +12 -0
  68. data/test/app/helpers/accounts_helper.rb +2 -0
  69. data/test/app/helpers/application_helper.rb +3 -0
  70. data/test/app/helpers/cms/products_helper.rb +2 -0
  71. data/test/app/helpers/comments_helper.rb +2 -0
  72. data/test/app/helpers/images_helper.rb +2 -0
  73. data/test/app/helpers/options_helper.rb +2 -0
  74. data/test/app/helpers/people_helper.rb +2 -0
  75. data/test/app/helpers/photos_helper.rb +2 -0
  76. data/test/app/helpers/posts_helper.rb +2 -0
  77. data/test/app/helpers/projects_helper.rb +2 -0
  78. data/test/app/helpers/somethings_helper.rb +2 -0
  79. data/test/app/helpers/tags_helper.rb +2 -0
  80. data/test/app/helpers/users_helper.rb +2 -0
  81. data/test/app/models/account.rb +4 -0
  82. data/test/app/models/comment.rb +3 -0
  83. data/test/app/models/image.rb +3 -0
  84. data/test/app/models/option.rb +3 -0
  85. data/test/app/models/personnel.rb +3 -0
  86. data/test/app/models/photo.rb +5 -0
  87. data/test/app/models/post.rb +3 -0
  88. data/test/app/models/product.rb +3 -0
  89. data/test/app/models/project.rb +3 -0
  90. data/test/app/models/something.rb +2 -0
  91. data/test/app/models/tag.rb +3 -0
  92. data/test/app/models/user.rb +3 -0
  93. data/test/app/views/accounts/_form.html.erb +4 -0
  94. data/test/app/views/accounts/edit.html.erb +14 -0
  95. data/test/app/views/accounts/new.html.erb +12 -0
  96. data/test/app/views/accounts/show.html.erb +5 -0
  97. data/test/app/views/cms/options/edit.rhtml +17 -0
  98. data/test/app/views/cms/options/index.rhtml +20 -0
  99. data/test/app/views/cms/options/new.rhtml +16 -0
  100. data/test/app/views/cms/options/show.rhtml +8 -0
  101. data/test/app/views/cms/photos/edit.rhtml +17 -0
  102. data/test/app/views/cms/photos/index.rhtml +20 -0
  103. data/test/app/views/cms/photos/new.rhtml +16 -0
  104. data/test/app/views/cms/photos/show.rhtml +8 -0
  105. data/test/app/views/cms/products/edit.rhtml +17 -0
  106. data/test/app/views/cms/products/index.rhtml +20 -0
  107. data/test/app/views/cms/products/new.rhtml +16 -0
  108. data/test/app/views/cms/products/show.rhtml +8 -0
  109. data/test/app/views/comments/edit.rhtml +27 -0
  110. data/test/app/views/comments/index.rhtml +24 -0
  111. data/test/app/views/comments/new.rhtml +26 -0
  112. data/test/app/views/comments/show.rhtml +18 -0
  113. data/test/app/views/images/_form.html.erb +4 -0
  114. data/test/app/views/images/edit.html.erb +14 -0
  115. data/test/app/views/images/new.html.erb +12 -0
  116. data/test/app/views/layouts/application.rhtml +17 -0
  117. data/test/app/views/layouts/comments.rhtml +17 -0
  118. data/test/app/views/layouts/options.rhtml +17 -0
  119. data/test/app/views/layouts/people.rhtml +17 -0
  120. data/test/app/views/layouts/photos.rhtml +17 -0
  121. data/test/app/views/layouts/projects.rhtml +17 -0
  122. data/test/app/views/layouts/somethings.rhtml +17 -0
  123. data/test/app/views/layouts/tags.rhtml +17 -0
  124. data/test/app/views/options/_form.html.erb +8 -0
  125. data/test/app/views/options/edit.html.erb +16 -0
  126. data/test/app/views/options/index.html.erb +21 -0
  127. data/test/app/views/options/new.html.erb +12 -0
  128. data/test/app/views/options/show.html.erb +10 -0
  129. data/test/app/views/people/edit.rhtml +17 -0
  130. data/test/app/views/people/index.rhtml +20 -0
  131. data/test/app/views/people/new.rhtml +16 -0
  132. data/test/app/views/people/show.rhtml +8 -0
  133. data/test/app/views/photos/edit.rhtml +17 -0
  134. data/test/app/views/photos/index.rhtml +20 -0
  135. data/test/app/views/photos/new.rhtml +16 -0
  136. data/test/app/views/photos/show.rhtml +8 -0
  137. data/test/app/views/posts/edit.rhtml +22 -0
  138. data/test/app/views/posts/index.rhtml +22 -0
  139. data/test/app/views/posts/new.rhtml +21 -0
  140. data/test/app/views/posts/show.rhtml +13 -0
  141. data/test/app/views/projects/edit.rhtml +17 -0
  142. data/test/app/views/projects/index.rhtml +20 -0
  143. data/test/app/views/projects/new.rhtml +16 -0
  144. data/test/app/views/projects/show.rhtml +8 -0
  145. data/test/app/views/somethings/edit.rhtml +17 -0
  146. data/test/app/views/somethings/index.rhtml +20 -0
  147. data/test/app/views/somethings/new.rhtml +16 -0
  148. data/test/app/views/somethings/show.rhtml +8 -0
  149. data/test/app/views/tags/edit.rhtml +17 -0
  150. data/test/app/views/tags/index.rhtml +20 -0
  151. data/test/app/views/tags/index.rjs +0 -0
  152. data/test/app/views/tags/new.rhtml +16 -0
  153. data/test/app/views/tags/show.rhtml +8 -0
  154. data/test/app/views/users/edit.rhtml +17 -0
  155. data/test/app/views/users/index.rhtml +20 -0
  156. data/test/app/views/users/new.rhtml +16 -0
  157. data/test/app/views/users/show.rhtml +8 -0
  158. data/test/config/boot.rb +110 -0
  159. data/test/config/database.yml +9 -0
  160. data/test/config/environment.rb +49 -0
  161. data/test/config/environments/development.rb +17 -0
  162. data/test/config/environments/test.rb +19 -0
  163. data/test/config/initializers/inflections.rb +14 -0
  164. data/test/config/routes.rb +61 -0
  165. data/test/db/migrate/001_create_posts.rb +12 -0
  166. data/test/db/migrate/002_create_products.rb +11 -0
  167. data/test/db/migrate/003_create_comments.rb +13 -0
  168. data/test/db/migrate/004_create_options.rb +13 -0
  169. data/test/db/migrate/005_create_photos.rb +11 -0
  170. data/test/db/migrate/006_create_tags.rb +17 -0
  171. data/test/db/migrate/007_create_somethings.rb +11 -0
  172. data/test/db/migrate/008_create_accounts.rb +11 -0
  173. data/test/db/migrate/009_add_account_id_to_photos.rb +9 -0
  174. data/test/db/migrate/010_create_projects.rb +11 -0
  175. data/test/db/migrate/011_create_images.rb +12 -0
  176. data/test/db/migrate/012_create_users.rb +11 -0
  177. data/test/db/migrate/013_create_personnel.rb +11 -0
  178. data/test/db/migrate/014_add_personnel_id_to_photos.rb +9 -0
  179. data/test/db/schema.rb +78 -0
  180. data/test/script/console +3 -0
  181. data/test/script/destroy +3 -0
  182. data/test/script/generate +3 -0
  183. data/test/script/server +3 -0
  184. data/test/test/fixtures/accounts.yml +7 -0
  185. data/test/test/fixtures/comments.yml +11 -0
  186. data/test/test/fixtures/images.yml +6 -0
  187. data/test/test/fixtures/options.yml +9 -0
  188. data/test/test/fixtures/personnel.yml +5 -0
  189. data/test/test/fixtures/photos.yml +9 -0
  190. data/test/test/fixtures/photos_tags.yml +3 -0
  191. data/test/test/fixtures/posts.yml +9 -0
  192. data/test/test/fixtures/products.yml +7 -0
  193. data/test/test/fixtures/projects.yml +7 -0
  194. data/test/test/fixtures/somethings.yml +7 -0
  195. data/test/test/fixtures/tags.yml +7 -0
  196. data/test/test/fixtures/users.yml +5 -0
  197. data/test/test/functional/cms/options_controller_test.rb +23 -0
  198. data/test/test/functional/cms/photos_controller_test.rb +43 -0
  199. data/test/test/functional/cms/products_controller_test.rb +23 -0
  200. data/test/test/functional/comments_controller_test.rb +26 -0
  201. data/test/test/functional/images_controller_test.rb +37 -0
  202. data/test/test/functional/people_controller_test.rb +34 -0
  203. data/test/test/functional/photos_controller_test.rb +130 -0
  204. data/test/test/functional/posts_controller_test.rb +34 -0
  205. data/test/test/functional/projects_controller_test.rb +44 -0
  206. data/test/test/functional/somethings_controller_test.rb +28 -0
  207. data/test/test/functional/tags_controller_test.rb +64 -0
  208. data/test/test/functional/users_controller_test.rb +24 -0
  209. data/test/test/test_helper.rb +13 -0
  210. data/test/test/unit/accessors_test.rb +110 -0
  211. data/test/test/unit/account_test.rb +7 -0
  212. data/test/test/unit/action_options_test.rb +109 -0
  213. data/test/test/unit/base_test.rb +11 -0
  214. data/test/test/unit/comment_test.rb +10 -0
  215. data/test/test/unit/failable_action_options_test.rb +77 -0
  216. data/test/test/unit/helpers/current_objects_test.rb +133 -0
  217. data/test/test/unit/helpers/internal_test.rb +106 -0
  218. data/test/test/unit/helpers/nested_test.rb +86 -0
  219. data/test/test/unit/helpers/singleton_current_objects_test.rb +68 -0
  220. data/test/test/unit/helpers/singleton_nested_test.rb +77 -0
  221. data/test/test/unit/helpers/singleton_urls_test.rb +67 -0
  222. data/test/test/unit/helpers/urls_test.rb +75 -0
  223. data/test/test/unit/helpers_test.rb +25 -0
  224. data/test/test/unit/image_test.rb +7 -0
  225. data/test/test/unit/option_test.rb +10 -0
  226. data/test/test/unit/photo_test.rb +10 -0
  227. data/test/test/unit/post_test.rb +10 -0
  228. data/test/test/unit/project_test.rb +10 -0
  229. data/test/test/unit/response_collector_test.rb +49 -0
  230. data/test/test/unit/something_test.rb +10 -0
  231. data/test/test/unit/tag_test.rb +10 -0
  232. data/test/test/unit/urligence_test.rb +203 -0
  233. metadata +383 -0
@@ -0,0 +1,133 @@
1
+ require File.dirname(__FILE__)+'/../../test_helper'
2
+
3
+ class Helpers::CurrentObjectsTest < Test::Unit::TestCase
4
+ def setup
5
+ @controller = PostsController.new
6
+
7
+ @params = stub :[] => "1"
8
+ @controller.stubs(:params).returns(@params)
9
+
10
+ @request = stub :path => ""
11
+ @controller.stubs(:request).returns(@request)
12
+
13
+ @object = Post.new
14
+ Post.stubs(:find).with("1").returns(@object)
15
+
16
+ @collection = mock()
17
+ Post.stubs(:find).with(:all).returns(@collection)
18
+ end
19
+
20
+ context "model helper" do
21
+ should "return constant" do
22
+ assert_equal Post, @controller.send(:model)
23
+ end
24
+ end
25
+
26
+ context "collection helper" do
27
+ should "find all" do
28
+ assert_equal @collection, @controller.send(:collection)
29
+ end
30
+ end
31
+
32
+ context "param helper" do
33
+ should "return the correct param" do
34
+ assert_equal "1", @controller.send(:param)
35
+ end
36
+ end
37
+
38
+ context "object helper" do
39
+ should "find the correct object" do
40
+ assert_equal @object, @controller.send(:object)
41
+ end
42
+ end
43
+
44
+ context "load object helper" do
45
+ setup do
46
+ @controller.send(:load_object)
47
+ end
48
+
49
+ should "load object as instance variable" do
50
+ assert_equal @object, @controller.instance_variable_get("@post")
51
+ end
52
+
53
+ context "with an alternate object_name" do
54
+ setup do
55
+ @controller.stubs(:object_name).returns('asdf')
56
+ @controller.send(:load_object)
57
+ end
58
+
59
+ should "use the variable name" do
60
+ assert_equal @object, @controller.instance_variable_get("@asdf")
61
+ end
62
+ end
63
+ end
64
+
65
+ context "load_collection helper" do
66
+ context "with resource_name" do
67
+ setup do
68
+ @controller.send(:load_collection)
69
+ end
70
+
71
+ should "load collection in to instance variable with plural model_name" do
72
+ assert_equal @collection, @controller.instance_variable_get("@posts")
73
+ end
74
+ end
75
+ end
76
+
77
+ context "object params helper" do
78
+ context "without alternate variable name" do
79
+ setup do
80
+ @params.expects(:[]).with("post").returns(2)
81
+ end
82
+
83
+ should "get params for object" do
84
+ assert_equal 2, @controller.send(:object_params)
85
+ end
86
+ end
87
+
88
+ context "with alternate object_name" do
89
+ setup do
90
+ @params.expects(:[]).with("something").returns(3)
91
+ @controller.expects(:object_name).returns("something")
92
+ end
93
+
94
+ should "use variable name" do
95
+ assert_equal 3, @controller.send(:object_params)
96
+ end
97
+ end
98
+ end
99
+
100
+ context "build object helper" do
101
+ context "with no parents" do
102
+ setup do
103
+ Post.expects(:new).with("1").returns("a new post")
104
+ end
105
+
106
+ should "build new object" do
107
+ assert_equal "a new post", @controller.send(:build_object)
108
+ end
109
+ end
110
+
111
+ context "with parent" do
112
+ setup do
113
+ @comments_controller = CommentsController.new
114
+ @comment_params = stub()
115
+ @comment_params.stubs(:[]).with(:post_id).returns 2
116
+ @comment_params.stubs(:[]).with('comment').returns ""
117
+ @comments_controller.stubs(:params).returns(@comment_params)
118
+
119
+ @request = stub :path => ""
120
+ @comments_controller.stubs(:request).returns(@request)
121
+
122
+ Post.expects(:find).with(2).returns(Post.new)
123
+ @comments = stub()
124
+ @comments.expects(:build).with("").returns("a new comment")
125
+ Post.any_instance.stubs(:comments).returns(@comments)
126
+ end
127
+
128
+ should "build new object" do
129
+ assert_equal "a new comment", @comments_controller.send(:build_object)
130
+ end
131
+ end
132
+ end
133
+ end
@@ -0,0 +1,106 @@
1
+ require File.dirname(__FILE__)+'/../../test_helper'
2
+
3
+ class Helpers::InternalTest < Test::Unit::TestCase
4
+ def setup
5
+ @controller = PostsController.new
6
+
7
+ @params = stub :[] => "1"
8
+ @controller.stubs(:params).returns(@params)
9
+
10
+ @object = Post.new
11
+ Post.stubs(:find).with("1").returns(@object)
12
+
13
+ @collection = mock()
14
+ Post.stubs(:find).with(:all).returns(@collection)
15
+ end
16
+
17
+ context "response_for" do
18
+ setup do
19
+ @options = ResourceController::ActionOptions.new
20
+ @options.response {|wants| wants.html}
21
+ @controller.expects(:respond_to).yields(mock(:html => ""))
22
+ @controller.stubs(:options_for).with(:create).returns( @options )
23
+ end
24
+
25
+ should "yield a wants object to the response block" do
26
+ @controller.send :response_for, :create
27
+ end
28
+ end
29
+
30
+ context "after" do
31
+ setup do
32
+ @options = ResourceController::FailableActionOptions.new
33
+ @options.success.after { }
34
+ @controller.stubs(:options_for).with(:create).returns( @options )
35
+ @nil_options = ResourceController::FailableActionOptions.new
36
+ @controller.stubs(:options_for).with(:non_existent).returns(@nil_options)
37
+ end
38
+
39
+ should "grab the correct block for after create" do
40
+ @controller.send :after, :create
41
+ end
42
+
43
+ should "not choke if there is no block" do
44
+ assert_nothing_raised do
45
+ @controller.send :after, :non_existent
46
+ end
47
+ end
48
+ end
49
+
50
+ context "before" do
51
+ setup do
52
+ PostsController.stubs(:non_existent).returns ResourceController::ActionOptions.new
53
+ end
54
+
55
+ should "not choke if there is no block" do
56
+ assert_nothing_raised do
57
+ @controller.send :before, :non_existent
58
+ end
59
+ end
60
+ end
61
+
62
+ context "get options for action" do
63
+ setup do
64
+ @create = ResourceController::FailableActionOptions.new
65
+ PostsController.stubs(:create).returns @create
66
+ end
67
+
68
+ should "get correct object for failure action" do
69
+ assert_equal @create.fails, @controller.send(:options_for, :create_fails)
70
+ end
71
+
72
+ should "get correct object for successful action" do
73
+ assert_equal @create.success, @controller.send(:options_for, :create)
74
+ end
75
+
76
+ should "get correct object for non-failable action" do
77
+ @index = ResourceController::ActionOptions.new
78
+ PostsController.stubs(:index).returns @index
79
+ assert_equal @index, @controller.send(:options_for, :index)
80
+ end
81
+
82
+ should "understand new_action to mean new" do
83
+ @new_action = ResourceController::ActionOptions.new
84
+ PostsController.stubs(:new_action).returns @new_action
85
+ assert_equal @new_action, @controller.send(:options_for, :new_action)
86
+ end
87
+ end
88
+
89
+ context "flash now helper" do
90
+ setup do
91
+ klass = Class.new do
92
+ include ResourceController::Helpers::Internal
93
+ end
94
+
95
+ @c = klass.new
96
+ @c.stubs(:options_for).returns(stub(:flash_now => 'something'))
97
+ flash_now = mock()
98
+ flash_now.expects(:[]=).with(:notice, 'something')
99
+ @c.stubs(:flash).returns(stub(:now => flash_now))
100
+ end
101
+
102
+ should "set the flash_now" do
103
+ @c.send :set_flash_now, :new
104
+ end
105
+ end
106
+ end
@@ -0,0 +1,86 @@
1
+ require File.dirname(__FILE__)+'/../../test_helper'
2
+
3
+ class PostsControllerMock
4
+ include ResourceController::Helpers
5
+ extend ResourceController::Accessors
6
+ class_reader_writer :belongs_to
7
+ end
8
+
9
+ class CommentsControllerMock
10
+ include ResourceController::Helpers
11
+ extend ResourceController::Accessors
12
+ class_reader_writer :belongs_to
13
+ belongs_to :post
14
+ end
15
+
16
+ class Helpers::NestedTest < Test::Unit::TestCase
17
+ def setup
18
+ @controller = PostsControllerMock.new
19
+
20
+ @params = stub :[] => "1"
21
+ @controller.stubs(:params).returns(@params)
22
+
23
+ @request = stub :path => ""
24
+ @controller.stubs(:request).returns(@request)
25
+
26
+ @object = Post.new
27
+ Post.stubs(:find).with("1").returns(@object)
28
+
29
+ @collection = mock()
30
+ Post.stubs(:find).with(:all).returns(@collection)
31
+ end
32
+
33
+ context "parent type helper" do
34
+ setup do
35
+ @comments_controller = CommentsControllerMock.new
36
+ @comment_params = stub()
37
+ @comment_params.stubs(:[]).with(:post_id).returns 2
38
+
39
+ @comments_controller.stubs(:params).returns(@comment_params)
40
+ end
41
+
42
+ should "get the params for the current parent" do
43
+ assert_equal :post, @comments_controller.send(:parent_type)
44
+ end
45
+
46
+ context "with multiple possible parents" do
47
+ setup do
48
+ CommentsControllerMock.class_eval do
49
+ belongs_to :post, :product
50
+ end
51
+
52
+ @comment_params = stub()
53
+ @comment_params.stubs(:[]).with(:product_id).returns 5
54
+ @comment_params.stubs(:[]).with(:post_id).returns nil
55
+ @comments_controller.stubs(:params).returns(@comment_params)
56
+ end
57
+
58
+ should "get the params for whatever models are available" do
59
+ assert_equal :product, @comments_controller.send(:parent_type)
60
+ end
61
+ end
62
+
63
+ context "with no possible parent" do
64
+ should "return nil" do
65
+ assert_nil @controller.send(:parent_type)
66
+ end
67
+ end
68
+ end
69
+
70
+ context "parent object helper" do
71
+ setup do
72
+ @comments_controller = CommentsControllerMock.new
73
+ @comment_params = stub()
74
+ @comment_params.stubs(:[]).with(:post_id).returns 2
75
+ @request = stub :path => ""
76
+ @comments_controller.stubs(:request).returns(@request)
77
+ @comments_controller.stubs(:params).returns(@comment_params)
78
+ @post = Post.new
79
+ Post.stubs(:find).with(2).returns @post
80
+ end
81
+
82
+ should "return post with id 2" do
83
+ assert_equal @post, @comments_controller.send(:parent_object)
84
+ end
85
+ end
86
+ end
@@ -0,0 +1,68 @@
1
+ require File.dirname(__FILE__)+'/../../test_helper'
2
+
3
+ class Helpers::SingletonCurrentObjectsTest < Test::Unit::TestCase
4
+ context "singleton" do
5
+ setup do
6
+ @image_controller = ImagesController.new
7
+ @image_params = stub()
8
+ @image_params.stubs(:[]).with(:user_id).returns 2
9
+ @image_params.stubs(:[]).with('image').returns ""
10
+ @image_controller.stubs(:params).returns(@image_params)
11
+
12
+ @request = stub :path => ""
13
+ @image_controller.stubs(:request).returns(@request)
14
+ @user = stub()
15
+ User.expects(:find).with(2).returns(@user)
16
+ @image = stub()
17
+ end
18
+
19
+ context "build object helper with parent" do
20
+ should "build new object" do
21
+ @user.expects(:build_image).with("").returns("a new image")
22
+ assert_equal "a new image", @image_controller.send(:build_object)
23
+ end
24
+ end
25
+
26
+ context "object helper with parent" do
27
+ should "fetch the correct object" do
28
+ @user.expects(:image).returns(@image)
29
+ assert_equal @image, @image_controller.send(:object)
30
+ end
31
+ end
32
+ end
33
+
34
+ context "with singleton parent" do
35
+ setup do
36
+ @options_controller = OptionsController.new
37
+ @options_params = stub :[] => "1"
38
+ @options_params.stubs(:[]).with('option').returns ""
39
+ @options_params.stubs(:[]).with(:id).returns 1
40
+ @options_controller.stubs(:params).returns(@options_params)
41
+
42
+ @option = Option.new
43
+
44
+ @account = Account.new
45
+ @options_controller.stubs(:parent_object).returns(@account)
46
+
47
+ @request = stub :path => "account/options/1"
48
+ @options_controller.stubs(:request).returns(@request)
49
+
50
+ @options = stub()
51
+ Account.any_instance.stubs(:options).returns(@options)
52
+ end
53
+
54
+ context "build object helper" do
55
+ should "build new object" do
56
+ @options.expects(:build).with("").returns("a new option")
57
+ assert_equal "a new option", @options_controller.send(:build_object)
58
+ end
59
+ end
60
+
61
+ context "object helper" do
62
+ should "fetch the correct object" do
63
+ @options.expects(:find).with(1).returns(@option)
64
+ assert_equal @option, @options_controller.send(:object)
65
+ end
66
+ end
67
+ end
68
+ end
@@ -0,0 +1,77 @@
1
+ require File.dirname(__FILE__)+'/../../test_helper'
2
+
3
+ class UsersControllerMock
4
+ include ResourceController::Helpers
5
+ extend ResourceController::Accessors
6
+ class_reader_writer :belongs_to
7
+ end
8
+
9
+ class ImagesControllerMock
10
+ include ResourceController::Helpers
11
+ extend ResourceController::Accessors
12
+ include ResourceController::Helpers::SingletonCustomizations
13
+ class_reader_writer :belongs_to
14
+ belongs_to :user
15
+ end
16
+
17
+ class Helpers::SingletonNestedTest < Test::Unit::TestCase
18
+ def setup
19
+ @controller = UsersControllerMock.new
20
+ @params = stub :[] => "1"
21
+ @controller.stubs(:params).returns(@params)
22
+ @request = stub :path => ""
23
+ @controller.stubs(:request).returns(@request)
24
+ end
25
+
26
+ context "singleton parent_type helper" do
27
+ setup do
28
+ @image_controller = ImagesControllerMock.new
29
+ @image_params = stub()
30
+ @image_params.stubs(:[]).with(:user_id).returns 2
31
+ @image_controller.stubs(:params).returns(@image_params)
32
+ end
33
+
34
+ should "get the params for the current parent" do
35
+ assert_equal :user, @image_controller.send(:parent_type)
36
+ end
37
+
38
+ context "with multiple possible parents" do
39
+ setup do
40
+ ImagesControllerMock.class_eval do
41
+ belongs_to :user, :group
42
+ end
43
+ @image_params = stub()
44
+ @image_params.stubs(:[]).with(:group_id).returns 5
45
+ @image_params.stubs(:[]).with(:user_id).returns nil
46
+ @image_controller.stubs(:params).returns(@image_params)
47
+ end
48
+
49
+ should "get the params for whatever models are available" do
50
+ assert_equal :group, @image_controller.send(:parent_type)
51
+ end
52
+ end
53
+
54
+ context "with no possible parent" do
55
+ should "return nil" do
56
+ assert_nil @controller.send(:parent_type)
57
+ end
58
+ end
59
+ end
60
+
61
+ context "singleton parent_object helper" do
62
+ setup do
63
+ @image_controller = ImagesControllerMock.new
64
+ @request = stub :path => ""
65
+ @image_controller.stubs(:request).returns(@request)
66
+ @image_params = stub()
67
+ @image_params.stubs(:[]).with(:user_id).returns 2
68
+ @image_controller.stubs(:params).returns(@image_params)
69
+ @user = User.new
70
+ User.stubs(:find).with(2).returns @user
71
+ end
72
+
73
+ should "return image with id 2" do
74
+ assert_equal @user, @image_controller.send(:parent_object)
75
+ end
76
+ end
77
+ end
@@ -0,0 +1,67 @@
1
+ require File.dirname(__FILE__)+'/../../test_helper'
2
+
3
+ class Helpers::SingletonUrlsTest < Test::Unit::TestCase
4
+
5
+ context "*_url_options helpers" do
6
+ setup do
7
+ @account_controller = AccountsController.new
8
+ @params = stub :[] => ""
9
+ @account_controller.stubs(:params).returns(@params)
10
+ @request = stub :path => ""
11
+ @account_controller.stubs(:request).returns(@request)
12
+ end
13
+
14
+ should "return the correct object options" do
15
+ assert_equal [nil, nil, :account], @account_controller.send(:object_url_options)
16
+ end
17
+
18
+ context "with parent" do
19
+ setup do
20
+ @user = mock
21
+ @image = stub()
22
+ @image_controller = ImagesController.new
23
+ @image_params = stub()
24
+ @image_params.stubs(:[]).with(:user_id).returns 2
25
+ @image_controller.stubs(:params).returns(@image_params)
26
+ @image_controller.expects(:parent_object).returns @user
27
+ @image_request = stub :path => ""
28
+ @image_controller.stubs(:request).returns(@image_request)
29
+ end
30
+
31
+ should "return the correct object options" do
32
+ assert_equal [:edit, [:user, @user], :image], @image_controller.send(:object_url_options, :edit)
33
+ end
34
+ end
35
+
36
+ context "with singleton parent" do
37
+ setup do
38
+ @options_controller = OptionsController.new
39
+ @options_params = stub()
40
+ @options_params.stubs(:[]).with('option').returns ""
41
+ @options_params.stubs(:[]).with(:id).returns 1
42
+ @options_params.stubs(:[]).with(:account_id).returns nil
43
+ @options_controller.stubs(:params).returns(@options_params)
44
+
45
+ @option = Option.new
46
+
47
+ @account = Account.new
48
+ @options_controller.stubs(:parent_object).returns(@account)
49
+
50
+ @request = stub :path => "account/options/1"
51
+ @options_controller.stubs(:request).returns(@request)
52
+
53
+ @options = stub()
54
+ Account.any_instance.stubs(:options).returns(@options)
55
+ end
56
+
57
+ should "return the correct object options" do
58
+ @options.expects(:find).with(1).returns(@option)
59
+ assert_equal [:edit, :account, [:option, @option]], @options_controller.send(:object_url_options, :edit)
60
+ end
61
+
62
+ should "return the correct object options for collection" do
63
+ assert_equal [:account, :options], @options_controller.send(:collection_url_options)
64
+ end
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,75 @@
1
+ require File.dirname(__FILE__)+'/../../test_helper'
2
+
3
+ class Helpers::UrlsTest < Test::Unit::TestCase
4
+ def setup
5
+ @controller = PostsController.new
6
+
7
+ @params = stub :[] => "1"
8
+ @controller.stubs(:params).returns(@params)
9
+
10
+ @request = stub :path => ""
11
+ @controller.stubs(:request).returns(@request)
12
+
13
+ @object = Post.new
14
+ Post.stubs(:find).with("1").returns(@object)
15
+
16
+ @collection = mock()
17
+ Post.stubs(:find).with(:all).returns(@collection)
18
+ end
19
+
20
+ context "*_url_options helpers" do
21
+ setup do
22
+ @products_controller = ::Cms::ProductsController.new
23
+
24
+ @products_controller.stubs(:params).returns(@params)
25
+ @request = stub :path => ""
26
+ @products_controller.stubs(:request).returns(@request)
27
+ @product = Product.new
28
+ Product.stubs(:find).with("1").returns(@product)
29
+ end
30
+
31
+ should "return the correct collection options" do
32
+ assert_equal [nil, :posts], @controller.send(:collection_url_options)
33
+ end
34
+
35
+ should "return the correct object options" do
36
+ assert_equal [nil, nil, [:post, @object]], @controller.send(:object_url_options)
37
+ end
38
+
39
+ should "return the correct collection options for a namespaced controller" do
40
+ assert_equal [:cms, nil, :products], @products_controller.send(:collection_url_options)
41
+ end
42
+
43
+ should "return the correct object options for a namespaced controller" do
44
+ assert_equal [nil, :cms, nil, [:product, @product]], @products_controller.send(:object_url_options)
45
+ end
46
+
47
+ should "return the correct object options when passed an action" do
48
+ assert_equal [:edit, :cms, nil, [:product, @product]], @products_controller.send(:object_url_options, :edit)
49
+ end
50
+
51
+ should "accept an alternate object when passed one" do
52
+ p = Product.new
53
+ assert_equal [nil, :cms, nil, [:product, p]], @products_controller.send(:object_url_options, nil, p)
54
+ end
55
+
56
+ context "with parent" do
57
+ setup do
58
+ @params = stub :parent_type => 'user'
59
+ @user = mock
60
+ @controller.expects(:parent_object).returns @user
61
+ @controller.expects(:parent?).returns(true)
62
+ @controller.expects(:parent_type).returns "user"
63
+ end
64
+
65
+ should "return the correct object options for object_url_options" do
66
+ @controller.expects(:object).returns @object
67
+ assert_equal [:edit, [:user, @user], [:post, @object]], @controller.send(:object_url_options, :edit)
68
+ end
69
+
70
+ should "return the correct object options for collection" do
71
+ assert_equal [[:user, @user], :posts], @controller.send(:collection_url_options)
72
+ end
73
+ end
74
+ end
75
+ end
@@ -0,0 +1,25 @@
1
+ require File.dirname(__FILE__)+'/../test_helper'
2
+
3
+ class HelpersTest < ActiveSupport::TestCase
4
+
5
+ def setup
6
+ @controller = PostsController.new
7
+
8
+ @params = stub :[] => "1"
9
+ @controller.stubs(:params).returns(@params)
10
+
11
+ @object = Post.new
12
+ Post.stubs(:find).with("1").returns(@object)
13
+
14
+ @collection = mock()
15
+ Post.stubs(:find).with(:all).returns(@collection)
16
+ end
17
+
18
+ ResourceController::NAME_ACCESSORS.each do |accessor|
19
+ context "#{accessor} accessor" do
20
+ should "default to returning the singular name of the controller" do
21
+ assert_equal "post", @controller.send(accessor)
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,7 @@
1
+ require File.dirname(__FILE__) + '/../test_helper'
2
+
3
+ class ImageTest < ActiveSupport::TestCase
4
+ def test_truth
5
+ assert true
6
+ end
7
+ end
@@ -0,0 +1,10 @@
1
+ require File.dirname(__FILE__) + '/../test_helper'
2
+
3
+ class OptionTest < ActiveSupport::TestCase
4
+ fixtures :options
5
+
6
+ # Replace this with your real tests.
7
+ def test_truth
8
+ assert true
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ require File.dirname(__FILE__) + '/../test_helper'
2
+
3
+ class PhotoTest < ActiveSupport::TestCase
4
+ fixtures :photos
5
+
6
+ # Replace this with your real tests.
7
+ def test_truth
8
+ assert true
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ require File.dirname(__FILE__) + '/../test_helper'
2
+
3
+ class PostTest < ActiveSupport::TestCase
4
+ fixtures :posts
5
+
6
+ # Replace this with your real tests.
7
+ def test_truth
8
+ assert true
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ require File.dirname(__FILE__) + '/../test_helper'
2
+
3
+ class ProjectTest < ActiveSupport::TestCase
4
+ fixtures :projects
5
+
6
+ # Replace this with your real tests.
7
+ def test_truth
8
+ assert true
9
+ end
10
+ end