resources_controller 1.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.
Files changed (249) hide show
  1. data/LICENSE +22 -0
  2. data/README.rdoc +330 -0
  3. data/TODO +0 -0
  4. data/VERSION.yml +4 -0
  5. data/generators/scaffold_resource/USAGE +29 -0
  6. data/generators/scaffold_resource/scaffold_resource_generator.rb +179 -0
  7. data/generators/scaffold_resource/templates/controller.rb +2 -0
  8. data/generators/scaffold_resource/templates/fixtures.yml +10 -0
  9. data/generators/scaffold_resource/templates/functional_test.rb +57 -0
  10. data/generators/scaffold_resource/templates/helper.rb +2 -0
  11. data/generators/scaffold_resource/templates/migration.rb +15 -0
  12. data/generators/scaffold_resource/templates/model.rb +2 -0
  13. data/generators/scaffold_resource/templates/old_migration.rb +13 -0
  14. data/generators/scaffold_resource/templates/rspec/functional_spec.rb +255 -0
  15. data/generators/scaffold_resource/templates/rspec/helper_spec.rb +11 -0
  16. data/generators/scaffold_resource/templates/rspec/routing_spec.rb +61 -0
  17. data/generators/scaffold_resource/templates/rspec/unit_spec.rb +11 -0
  18. data/generators/scaffold_resource/templates/rspec/views/edit_spec.rb +28 -0
  19. data/generators/scaffold_resource/templates/rspec/views/index_spec.rb +26 -0
  20. data/generators/scaffold_resource/templates/rspec/views/new_spec.rb +30 -0
  21. data/generators/scaffold_resource/templates/rspec/views/show_spec.rb +25 -0
  22. data/generators/scaffold_resource/templates/shoulda_functional_test.rb +19 -0
  23. data/generators/scaffold_resource/templates/unit_test.rb +7 -0
  24. data/generators/scaffold_resource/templates/view__form.erb +6 -0
  25. data/generators/scaffold_resource/templates/view__form.haml +5 -0
  26. data/generators/scaffold_resource/templates/view_edit.erb +16 -0
  27. data/generators/scaffold_resource/templates/view_edit.haml +11 -0
  28. data/generators/scaffold_resource/templates/view_index.erb +22 -0
  29. data/generators/scaffold_resource/templates/view_index.haml +19 -0
  30. data/generators/scaffold_resource/templates/view_new.erb +12 -0
  31. data/generators/scaffold_resource/templates/view_new.haml +9 -0
  32. data/generators/scaffold_resource/templates/view_show.erb +9 -0
  33. data/generators/scaffold_resource/templates/view_show.haml +9 -0
  34. data/lib/resource_controller/accessors.rb +77 -0
  35. data/lib/resource_controller/action_options.rb +40 -0
  36. data/lib/resource_controller/actions.rb +75 -0
  37. data/lib/resource_controller/base.rb +15 -0
  38. data/lib/resource_controller/controller.rb +69 -0
  39. data/lib/resource_controller/failable_action_options.rb +25 -0
  40. data/lib/resource_controller/helpers/current_objects.rb +82 -0
  41. data/lib/resource_controller/helpers/internal.rb +80 -0
  42. data/lib/resource_controller/helpers/nested.rb +82 -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 +34 -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 +54 -0
  49. data/lib/urligence.rb +52 -0
  50. data/rails/init.rb +6 -0
  51. data/test/Gemfile +11 -0
  52. data/test/Rakefile +10 -0
  53. data/test/app/controllers/accounts_controller.rb +6 -0
  54. data/test/app/controllers/application_controller.rb +5 -0
  55. data/test/app/controllers/cms/options_controller.rb +3 -0
  56. data/test/app/controllers/cms/personnel_controller.rb +2 -0
  57. data/test/app/controllers/cms/photos_controller.rb +6 -0
  58. data/test/app/controllers/cms/products_controller.rb +3 -0
  59. data/test/app/controllers/comments_controller.rb +3 -0
  60. data/test/app/controllers/images_controller.rb +4 -0
  61. data/test/app/controllers/options_controller.rb +8 -0
  62. data/test/app/controllers/people_controller.rb +9 -0
  63. data/test/app/controllers/photos_controller.rb +12 -0
  64. data/test/app/controllers/posts_controller.rb +10 -0
  65. data/test/app/controllers/projects_controller.rb +3 -0
  66. data/test/app/controllers/somethings_controller.rb +3 -0
  67. data/test/app/controllers/tags_controller.rb +13 -0
  68. data/test/app/controllers/users_controller.rb +12 -0
  69. data/test/app/helpers/accounts_helper.rb +2 -0
  70. data/test/app/helpers/application_helper.rb +3 -0
  71. data/test/app/helpers/cms/products_helper.rb +2 -0
  72. data/test/app/helpers/comments_helper.rb +2 -0
  73. data/test/app/helpers/images_helper.rb +2 -0
  74. data/test/app/helpers/options_helper.rb +2 -0
  75. data/test/app/helpers/people_helper.rb +2 -0
  76. data/test/app/helpers/photos_helper.rb +2 -0
  77. data/test/app/helpers/posts_helper.rb +2 -0
  78. data/test/app/helpers/projects_helper.rb +2 -0
  79. data/test/app/helpers/somethings_helper.rb +2 -0
  80. data/test/app/helpers/tags_helper.rb +2 -0
  81. data/test/app/helpers/users_helper.rb +2 -0
  82. data/test/app/models/account.rb +4 -0
  83. data/test/app/models/comment.rb +3 -0
  84. data/test/app/models/image.rb +3 -0
  85. data/test/app/models/option.rb +3 -0
  86. data/test/app/models/personnel.rb +3 -0
  87. data/test/app/models/photo.rb +5 -0
  88. data/test/app/models/post.rb +3 -0
  89. data/test/app/models/product.rb +3 -0
  90. data/test/app/models/project.rb +2 -0
  91. data/test/app/models/something.rb +2 -0
  92. data/test/app/models/tag.rb +3 -0
  93. data/test/app/models/user.rb +3 -0
  94. data/test/app/views/accounts/_form.html.erb +4 -0
  95. data/test/app/views/accounts/edit.html.erb +14 -0
  96. data/test/app/views/accounts/new.html.erb +12 -0
  97. data/test/app/views/accounts/show.html.erb +5 -0
  98. data/test/app/views/cms/options/edit.rhtml +17 -0
  99. data/test/app/views/cms/options/index.rhtml +20 -0
  100. data/test/app/views/cms/options/new.rhtml +16 -0
  101. data/test/app/views/cms/options/show.rhtml +8 -0
  102. data/test/app/views/cms/photos/edit.rhtml +17 -0
  103. data/test/app/views/cms/photos/index.rhtml +20 -0
  104. data/test/app/views/cms/photos/new.rhtml +16 -0
  105. data/test/app/views/cms/photos/show.rhtml +8 -0
  106. data/test/app/views/cms/products/edit.rhtml +17 -0
  107. data/test/app/views/cms/products/index.rhtml +20 -0
  108. data/test/app/views/cms/products/new.rhtml +16 -0
  109. data/test/app/views/cms/products/show.rhtml +8 -0
  110. data/test/app/views/comments/edit.rhtml +27 -0
  111. data/test/app/views/comments/index.rhtml +24 -0
  112. data/test/app/views/comments/new.rhtml +26 -0
  113. data/test/app/views/comments/show.rhtml +18 -0
  114. data/test/app/views/images/_form.html.erb +4 -0
  115. data/test/app/views/images/edit.html.erb +14 -0
  116. data/test/app/views/images/new.html.erb +12 -0
  117. data/test/app/views/layouts/application.rhtml +17 -0
  118. data/test/app/views/layouts/comments.rhtml +17 -0
  119. data/test/app/views/layouts/options.rhtml +17 -0
  120. data/test/app/views/layouts/people.rhtml +17 -0
  121. data/test/app/views/layouts/photos.rhtml +17 -0
  122. data/test/app/views/layouts/projects.rhtml +17 -0
  123. data/test/app/views/layouts/somethings.rhtml +17 -0
  124. data/test/app/views/layouts/tags.rhtml +17 -0
  125. data/test/app/views/options/_form.html.erb +8 -0
  126. data/test/app/views/options/edit.html.erb +16 -0
  127. data/test/app/views/options/index.html.erb +21 -0
  128. data/test/app/views/options/new.html.erb +12 -0
  129. data/test/app/views/options/show.html.erb +10 -0
  130. data/test/app/views/people/edit.rhtml +17 -0
  131. data/test/app/views/people/index.rhtml +20 -0
  132. data/test/app/views/people/new.rhtml +16 -0
  133. data/test/app/views/people/show.rhtml +8 -0
  134. data/test/app/views/photos/edit.rhtml +17 -0
  135. data/test/app/views/photos/index.rhtml +20 -0
  136. data/test/app/views/photos/new.rhtml +16 -0
  137. data/test/app/views/photos/show.rhtml +8 -0
  138. data/test/app/views/posts/edit.rhtml +22 -0
  139. data/test/app/views/posts/index.rhtml +22 -0
  140. data/test/app/views/posts/new.rhtml +21 -0
  141. data/test/app/views/posts/show.rhtml +13 -0
  142. data/test/app/views/projects/edit.rhtml +17 -0
  143. data/test/app/views/projects/index.rhtml +20 -0
  144. data/test/app/views/projects/new.rhtml +16 -0
  145. data/test/app/views/projects/show.rhtml +8 -0
  146. data/test/app/views/somethings/edit.rhtml +17 -0
  147. data/test/app/views/somethings/index.rhtml +20 -0
  148. data/test/app/views/somethings/new.rhtml +16 -0
  149. data/test/app/views/somethings/show.rhtml +8 -0
  150. data/test/app/views/tags/edit.rhtml +17 -0
  151. data/test/app/views/tags/index.rhtml +20 -0
  152. data/test/app/views/tags/index.rjs +0 -0
  153. data/test/app/views/tags/new.rhtml +16 -0
  154. data/test/app/views/tags/show.rhtml +8 -0
  155. data/test/app/views/users/edit.rhtml +17 -0
  156. data/test/app/views/users/index.rhtml +20 -0
  157. data/test/app/views/users/new.rhtml +16 -0
  158. data/test/app/views/users/show.rhtml +8 -0
  159. data/test/config/application.rb +41 -0
  160. data/test/config/boot.rb +6 -0
  161. data/test/config/database.yml +9 -0
  162. data/test/config/environment.rb +5 -0
  163. data/test/config/environments/development.rb +19 -0
  164. data/test/config/environments/test.rb +32 -0
  165. data/test/config/initializers/inflections.rb +14 -0
  166. data/test/config/initializers/secret_token.rb +7 -0
  167. data/test/config/initializers/session_store.rb +8 -0
  168. data/test/config/routes.rb +35 -0
  169. data/test/config.ru +4 -0
  170. data/test/db/migrate/001_create_posts.rb +12 -0
  171. data/test/db/migrate/002_create_products.rb +11 -0
  172. data/test/db/migrate/003_create_comments.rb +13 -0
  173. data/test/db/migrate/004_create_options.rb +13 -0
  174. data/test/db/migrate/005_create_photos.rb +11 -0
  175. data/test/db/migrate/006_create_tags.rb +17 -0
  176. data/test/db/migrate/007_create_somethings.rb +11 -0
  177. data/test/db/migrate/008_create_accounts.rb +11 -0
  178. data/test/db/migrate/009_add_account_id_to_photos.rb +9 -0
  179. data/test/db/migrate/010_create_projects.rb +11 -0
  180. data/test/db/migrate/011_create_images.rb +12 -0
  181. data/test/db/migrate/012_create_users.rb +11 -0
  182. data/test/db/migrate/013_create_personnel.rb +11 -0
  183. data/test/db/migrate/014_add_personnel_id_to_photos.rb +9 -0
  184. data/test/db/schema.rb +78 -0
  185. data/test/script/console +3 -0
  186. data/test/script/destroy +3 -0
  187. data/test/script/generate +3 -0
  188. data/test/script/rails +6 -0
  189. data/test/script/server +3 -0
  190. data/test/test/fixtures/accounts.yml +7 -0
  191. data/test/test/fixtures/comments.yml +11 -0
  192. data/test/test/fixtures/images.yml +6 -0
  193. data/test/test/fixtures/options.yml +9 -0
  194. data/test/test/fixtures/personnel.yml +5 -0
  195. data/test/test/fixtures/photos.yml +9 -0
  196. data/test/test/fixtures/photos_tags.yml +3 -0
  197. data/test/test/fixtures/posts.yml +9 -0
  198. data/test/test/fixtures/products.yml +7 -0
  199. data/test/test/fixtures/projects.yml +7 -0
  200. data/test/test/fixtures/somethings.yml +7 -0
  201. data/test/test/fixtures/tags.yml +7 -0
  202. data/test/test/fixtures/users.yml +5 -0
  203. data/test/test/functional/cms/options_controller_test.rb +140 -0
  204. data/test/test/functional/cms/photos_controller_test.rb +37 -0
  205. data/test/test/functional/cms/products_controller_test.rb +37 -0
  206. data/test/test/functional/comments_controller_test.rb +140 -0
  207. data/test/test/functional/images_controller_test.rb +30 -0
  208. data/test/test/functional/people_controller_test.rb +147 -0
  209. data/test/test/functional/photos_controller_test.rb +199 -0
  210. data/test/test/functional/posts_controller_test.rb +21 -0
  211. data/test/test/functional/projects_controller_test.rb +137 -0
  212. data/test/test/functional/somethings_controller_test.rb +15 -0
  213. data/test/test/functional/tags_controller_test.rb +53 -0
  214. data/test/test/functional/users_controller_test.rb +137 -0
  215. data/test/test/test_helper.rb +14 -0
  216. data/test/test/unit/accessors_test.rb +110 -0
  217. data/test/test/unit/account_test.rb +7 -0
  218. data/test/test/unit/action_options_test.rb +109 -0
  219. data/test/test/unit/base_test.rb +11 -0
  220. data/test/test/unit/comment_test.rb +10 -0
  221. data/test/test/unit/failable_action_options_test.rb +77 -0
  222. data/test/test/unit/helpers/current_objects_test.rb +133 -0
  223. data/test/test/unit/helpers/internal_test.rb +106 -0
  224. data/test/test/unit/helpers/nested_test.rb +86 -0
  225. data/test/test/unit/helpers/singleton_current_objects_test.rb +68 -0
  226. data/test/test/unit/helpers/singleton_nested_test.rb +77 -0
  227. data/test/test/unit/helpers/singleton_urls_test.rb +67 -0
  228. data/test/test/unit/helpers/urls_test.rb +75 -0
  229. data/test/test/unit/helpers_test.rb +25 -0
  230. data/test/test/unit/image_test.rb +7 -0
  231. data/test/test/unit/option_test.rb +10 -0
  232. data/test/test/unit/photo_test.rb +10 -0
  233. data/test/test/unit/post_test.rb +10 -0
  234. data/test/test/unit/project_test.rb +10 -0
  235. data/test/test/unit/response_collector_test.rb +49 -0
  236. data/test/test/unit/something_test.rb +10 -0
  237. data/test/test/unit/tag_test.rb +10 -0
  238. data/test/test/unit/urligence_test.rb +205 -0
  239. data/test/vendor/plugins/d +1 -0
  240. data/test/vendor/plugins/dynamic_form/MIT-LICENSE +20 -0
  241. data/test/vendor/plugins/dynamic_form/README +13 -0
  242. data/test/vendor/plugins/dynamic_form/Rakefile +10 -0
  243. data/test/vendor/plugins/dynamic_form/init.rb +5 -0
  244. data/test/vendor/plugins/dynamic_form/lib/action_view/helpers/dynamic_form.rb +300 -0
  245. data/test/vendor/plugins/dynamic_form/lib/action_view/locale/en.yml +8 -0
  246. data/test/vendor/plugins/dynamic_form/test/dynamic_form_i18n_test.rb +42 -0
  247. data/test/vendor/plugins/dynamic_form/test/dynamic_form_test.rb +370 -0
  248. data/test/vendor/plugins/dynamic_form/test/test_helper.rb +9 -0
  249. metadata +403 -0
@@ -0,0 +1,53 @@
1
+ require 'test_helper'
2
+
3
+ class TagsControllerTest < ActionController::TestCase
4
+ def setup
5
+ @tag = Tag.find 1
6
+ end
7
+
8
+ context "with photo as parent" do
9
+ context "get to :index" do
10
+ setup do
11
+ get :index, :photo_id => 1
12
+ end
13
+
14
+ should assign_to :products
15
+ should render_template "index"
16
+ should respond_with :success
17
+
18
+ should "respond with html" do
19
+ assert_equal 'text/html', @response.content_type
20
+ end
21
+ end
22
+
23
+ context "xhr to :index" do
24
+ setup do
25
+ xhr :get, :index, :photo_id => 1
26
+ end
27
+
28
+ should assign_to :products
29
+ should respond_with :success
30
+
31
+ should "respond with rjs" do
32
+ assert_equal 'text/javascript', @response.content_type
33
+ end
34
+ end
35
+
36
+ context "post to create" do
37
+ setup do
38
+ post :create, :photo_id => 1, :tag => {:name => "Hello!"}
39
+ end
40
+
41
+ should "add tag to photo" do
42
+ assert assigns(:photo).tags.include?(assigns(:tag)), "photo does not include new tag"
43
+ end
44
+ end
45
+ end
46
+
47
+ context "without photo as parent" do
48
+ should "render text for a missing object" do
49
+ get :show, :id => 50000
50
+ assert @response.body.match(/not found/i), @response.body
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,137 @@
1
+ require 'test_helper'
2
+
3
+ class UsersControllerTest < ActionController::TestCase
4
+ def setup
5
+ @dude = accounts :one
6
+ end
7
+
8
+ context "on GET to index" do
9
+ setup do
10
+ get :index
11
+ end
12
+
13
+ should assign_to(:dudes).with_kind_of(Array)
14
+ should respond_with :success
15
+ should render_with_layout
16
+ should render_template :index
17
+ should_not set_the_flash
18
+ end
19
+
20
+ context "on GET to :show" do
21
+ setup do
22
+ get :show, :id => 1
23
+ end
24
+
25
+ should assign_to(:dude)
26
+ should respond_with(:success)
27
+ should render_template(:show)
28
+ should_not set_the_flash
29
+ end
30
+
31
+ context "on GET to :new" do
32
+ setup do
33
+ get :new
34
+ end
35
+
36
+ should assign_to(:dude).with_kind_of(Account)
37
+ should respond_with :success
38
+ should render_with_layout :application
39
+ should render_template :new
40
+ should_not set_the_flash
41
+ end
42
+
43
+ context "on POST to :create" do
44
+ context "that succeeds" do
45
+ setup do
46
+ post :create, :dude => {:name => "My User"}
47
+ end
48
+
49
+ should assign_to(:dude).with_kind_of(Account)
50
+ should redirect_to("dude page") { dude_url(assigns(:dude)) }
51
+ should set_the_flash.to "Successfully created!"
52
+
53
+ should "create the record" do
54
+ assert Account.find_by_name("My User")
55
+ end
56
+ end
57
+
58
+ context "that fails" do
59
+ setup do
60
+ Account.any_instance.stubs(:save).returns(false)
61
+ post :create, :account => {}
62
+ end
63
+
64
+ should assign_to(:dude).with_kind_of(Account)
65
+ should respond_with :success
66
+ should render_with_layout :application
67
+ should render_template :new
68
+ should_not set_the_flash
69
+ end
70
+ end
71
+
72
+ context "on GET to :edit" do
73
+ setup do
74
+ get :edit, :id => @dude.id
75
+ end
76
+
77
+ should assign_to(:dude).with(@dude)
78
+ should respond_with :success
79
+ should render_with_layout :application
80
+ should render_template :edit
81
+ should_not set_the_flash
82
+ end
83
+
84
+ context "on PUT to :update" do
85
+ context "that succeeds" do
86
+ setup do
87
+ put :update, :id => @dude.id, :dude => {:name => 'My new user'}
88
+ end
89
+
90
+ should assign_to(:dude){ @dude }
91
+ should redirect_to("dude page") { dude_path(assigns(:dude)) }
92
+ should set_the_flash.to "Successfully updated!"
93
+
94
+ should "update the record" do
95
+ @dude.reload
96
+ assert_equal 'My new user', @dude.name
97
+ end
98
+ end
99
+
100
+ context "that fails" do
101
+ setup do
102
+ Account.any_instance.stubs(:update_attributes).returns(false)
103
+ put :update, :id => @dude.id, :user => {:name => 'My new user'}
104
+ end
105
+
106
+ should assign_to(:object).with_kind_of(Account)
107
+ should assign_to(:dude).with_kind_of(Account)
108
+ should respond_with :success
109
+ should render_with_layout :application
110
+ should render_template :edit
111
+ should_not set_the_flash
112
+ end
113
+ end
114
+
115
+ context "on DELETE to :destroy" do
116
+ context "that succeeds" do
117
+ setup do
118
+ delete :destroy, :id => @dude.id
119
+ end
120
+
121
+ should assign_to(:dude){ @dude }
122
+ should redirect_to("dudes index"){ dudes_url }
123
+ should set_the_flash.to "Successfully removed!"
124
+ end
125
+
126
+ context "that fails" do
127
+ setup do
128
+ Account.any_instance.stubs(:destroy).returns(false)
129
+ delete :destroy, :id => @dude.to_param
130
+ end
131
+
132
+ should respond_with(:redirect)
133
+ should redirect_to("dude url") { dude_url assigns(:dude) }
134
+ end
135
+ end
136
+
137
+ end
@@ -0,0 +1,14 @@
1
+ ENV["RAILS_ENV"] = "test"
2
+ require File.expand_path('../../config/environment', __FILE__)
3
+ require 'rails/test_help'
4
+ require "shoulda"
5
+
6
+ class ActiveSupport::TestCase
7
+ # Setup all fixtures in test/fixtures/*.(yml|csv) for all tests in alphabetical order.
8
+ #
9
+ # Note: You'll currently still have to declare fixtures explicitly in integration tests
10
+ # -- they do not yet inherit this setting
11
+ fixtures :all
12
+
13
+ # Add more helper methods to be used by all tests here...
14
+ end
@@ -0,0 +1,110 @@
1
+ require File.dirname(__FILE__)+'/../test_helper'
2
+
3
+ class AccessorsTest < ActiveSupport::TestCase
4
+ def setup
5
+ PostsController.class_eval do
6
+ extend ResourceController::Accessors
7
+ end
8
+ end
9
+
10
+ context "scoping reader" do
11
+ setup do
12
+ PostsController.class_eval do
13
+ class_scoping_reader :create, ResourceController::ActionOptions.new
14
+ end
15
+ end
16
+
17
+ should "access create as usual" do
18
+ PostsController.class_eval do
19
+ create.flash "asdf"
20
+ end
21
+
22
+ assert_equal "asdf", PostsController.create.flash
23
+ end
24
+
25
+ should "scope to create object in a block" do
26
+ PostsController.class_eval do
27
+ create do
28
+ flash "asdf"
29
+ end
30
+ end
31
+
32
+ assert_equal "asdf", PostsController.create.flash
33
+ end
34
+ end
35
+
36
+ context "reader/writer method" do
37
+ setup do
38
+ PostsController.class_eval do
39
+ reader_writer :flash
40
+ end
41
+
42
+ @controller = PostsController.new
43
+ end
44
+
45
+ should "set and get var" do
46
+ @controller.flash "something"
47
+ assert_equal "something", @controller.flash
48
+ end
49
+ end
50
+
51
+ context "class reader/writer method" do
52
+ setup do
53
+ PostsController.class_eval do
54
+ class_reader_writer :flash
55
+ end
56
+
57
+ @controller = PostsController.new
58
+ end
59
+
60
+ should "initialize var" do
61
+ assert_nil PostsController.flash
62
+ assert_nil @controller.flash
63
+ end
64
+
65
+ should "set and get var" do
66
+ PostsController.flash "something"
67
+ assert_equal "something", PostsController.flash
68
+ end
69
+ end
70
+
71
+ context "block accessor" do
72
+ setup do
73
+ PostsController.class_eval do
74
+ block_accessor :something
75
+ end
76
+ @controller = PostsController.new
77
+ end
78
+
79
+ should "store blocks" do
80
+ @controller.something {}
81
+ assert @controller.something.first
82
+ end
83
+
84
+ should "store symbols as well" do
85
+ @controller.something(:method, :method_two) {}
86
+ assert_equal :method, @controller.something[0]
87
+ assert_equal :method_two, @controller.something[1]
88
+ assert @controller.something[2].is_a?(Proc)
89
+ end
90
+ end
91
+
92
+ context "reader writer" do
93
+ setup do
94
+ PostsController.class_eval do
95
+ reader_writer :rw
96
+ end
97
+
98
+ @controller = PostsController.new
99
+ end
100
+
101
+ should "store blocks" do
102
+ @controller.rw do
103
+ "asdf"
104
+ end
105
+
106
+ assert @controller.rw.is_a?(Proc), @controller.rw
107
+ end
108
+ end
109
+
110
+ end
@@ -0,0 +1,7 @@
1
+ require File.dirname(__FILE__) + '/../test_helper'
2
+
3
+ class PersonTest < ActiveSupport::TestCase
4
+ def test_truth
5
+ assert true
6
+ end
7
+ end
@@ -0,0 +1,109 @@
1
+ require File.dirname(__FILE__)+'/../test_helper'
2
+
3
+ class ActionOptionsTest < ActiveSupport::TestCase
4
+ def setup
5
+ @controller = PostsController.new
6
+ @create = ResourceController::ActionOptions.new
7
+ end
8
+
9
+ should "have attr accessor for flash" do
10
+ @create.flash "Successfully created."
11
+ assert_equal "Successfully created.", @create.flash
12
+ end
13
+
14
+ should "have attr accessor for flash_now" do
15
+ @create.flash_now "Successfully created."
16
+ assert_equal "Successfully created.", @create.flash_now
17
+ end
18
+
19
+ %w(before after).each do |accessor|
20
+ should "have a block accessor for #{accessor}" do
21
+ @create.send(accessor) do
22
+ "return_something"
23
+ end
24
+
25
+ assert_equal "return_something", @create.send(accessor).first.call(nil)
26
+ end
27
+ end
28
+
29
+ context "response yielding to response collector" do
30
+ setup do
31
+ @create.response do |wants|
32
+ wants.html
33
+ end
34
+ end
35
+
36
+ should "accept symbols" do
37
+ @create.response :html, :js, :xml
38
+ assert @create.wants[:html]
39
+ assert @create.wants[:js]
40
+ assert @create.wants[:xml]
41
+ end
42
+
43
+ should "accept symbols and blocks" do
44
+ @create.responds_to :html do |wants| # note the aliasing of response here
45
+ wants.js
46
+ end
47
+
48
+ assert @create.wants[:html]
49
+ assert @create.wants[:js]
50
+ end
51
+
52
+ should "collect responses" do
53
+ assert @create.wants[:html]
54
+ end
55
+
56
+ should "clear the collector on a subsequent call" do
57
+ @create.respond_to do |wants| # note the other aliasing of response
58
+ wants.js
59
+ end
60
+
61
+ assert_nil @create.wants[:html]
62
+ assert @create.wants[:js]
63
+ end
64
+
65
+ should "add response without clearing" do
66
+ @create.wants.js
67
+ assert @create.wants[:js]
68
+ assert @create.wants[:html]
69
+ end
70
+ end
71
+
72
+ context "duplicating action options" do
73
+ setup do
74
+ @opts = ResourceController::ActionOptions.new
75
+ @opts.wants.js
76
+ @opts.after {}
77
+ @opts.before {}
78
+ @opts.flash ''
79
+ @opts.flash_now ''
80
+ @dup = @opts.dup
81
+ end
82
+
83
+ should "duplicate the response collector" do
84
+ assert !@opts.wants.equal?(@dup.wants)
85
+ assert @dup.wants[:js]
86
+ end
87
+
88
+ should "duplicate the after block" do
89
+ assert !@opts.after.equal?(@dup.after)
90
+ assert @dup.after
91
+ end
92
+
93
+ should "duplicate the before block" do
94
+ assert !@opts.before.equal?(@dup.before)
95
+ assert @dup.before
96
+ end
97
+
98
+ should "duplicate the flash" do
99
+ assert !@opts.flash.equal?(@dup.flash)
100
+ assert @dup.flash
101
+ end
102
+
103
+ should "duplicate the flash_now" do
104
+ assert !@opts.flash_now.equal?(@dup.flash_now)
105
+ assert @dup.flash_now
106
+ end
107
+ end
108
+
109
+ end
@@ -0,0 +1,11 @@
1
+ require File.dirname(__FILE__)+'/../test_helper'
2
+
3
+ class BaseTest < ActiveSupport::TestCase
4
+ def setup
5
+ @controller = ResourceController::Base.new
6
+ end
7
+
8
+ def test_case_name
9
+
10
+ end
11
+ end
@@ -0,0 +1,10 @@
1
+ require File.dirname(__FILE__) + '/../test_helper'
2
+
3
+ class CommentTest < ActiveSupport::TestCase
4
+ fixtures :comments
5
+
6
+ # Replace this with your real tests.
7
+ def test_truth
8
+ assert true
9
+ end
10
+ end
@@ -0,0 +1,77 @@
1
+ require File.dirname(__FILE__)+'/../test_helper'
2
+
3
+ class FailableActionOptionsTest < ActiveSupport::TestCase
4
+ def setup
5
+ @controller = PostsController.new
6
+ @create = ResourceController::FailableActionOptions.new
7
+ end
8
+
9
+ should "have success and fails" do
10
+ assert ResourceController::ActionOptions, @create.success.class
11
+ assert ResourceController::ActionOptions, @create.fails.class
12
+ end
13
+
14
+ %w(before).each do |accessor|
15
+ should "have a block accessor for #{accessor}" do
16
+ @create.send(accessor) do
17
+ "return_something"
18
+ end
19
+
20
+ assert_equal "return_something", @create.send(accessor).first.call(nil)
21
+ end
22
+ end
23
+
24
+ should "delegate flash to success" do
25
+ @create.flash "Successfully created."
26
+ assert_equal "Successfully created.", @create.success.flash
27
+ end
28
+
29
+ should "delegate after to success" do
30
+ @create.after do
31
+ "something"
32
+ end
33
+
34
+ assert_equal "something", @create.success.after.first.call
35
+ end
36
+
37
+ should "delegate response to success" do
38
+ @create.response do |wants|
39
+ wants.html
40
+ end
41
+
42
+ assert @create.wants[:html]
43
+ end
44
+
45
+ should "delegate wants to success" do
46
+ @create.wants.html
47
+
48
+ assert @create.wants[:html]
49
+ end
50
+
51
+ context "duplication" do
52
+ setup do
53
+ @opts = ResourceController::FailableActionOptions.new
54
+ @opts.wants.js
55
+ @opts.failure.wants.js
56
+ @opts.before {}
57
+
58
+ @dup = @opts.dup
59
+ end
60
+
61
+ should "duplicate success" do
62
+ assert !@dup.success.equal?(@opts.success)
63
+ assert @dup.success.wants[:js]
64
+ end
65
+
66
+ should "duplicate failure" do
67
+ assert !@dup.failure.equal?(@opts.failure)
68
+ assert @dup.failure.wants[:js]
69
+ end
70
+
71
+ should "duplicate before" do
72
+ assert !@dup.before.equal?(@opts.before)
73
+ assert @dup.before
74
+ end
75
+ end
76
+
77
+ end
@@ -0,0 +1,133 @@
1
+ require File.dirname(__FILE__)+'/../../test_helper'
2
+
3
+ class ResourceController::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