makandra_resource_controller 0.7.0

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 (251) hide show
  1. data/LICENSE +22 -0
  2. data/README.rdoc +343 -0
  3. data/TODO +0 -0
  4. data/VERSION.yml +5 -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.rb +37 -0
  35. data/lib/resource_controller/accessors.rb +77 -0
  36. data/lib/resource_controller/action_options.rb +40 -0
  37. data/lib/resource_controller/actions.rb +75 -0
  38. data/lib/resource_controller/base.rb +15 -0
  39. data/lib/resource_controller/class_methods.rb +25 -0
  40. data/lib/resource_controller/controller.rb +69 -0
  41. data/lib/resource_controller/failable_action_options.rb +25 -0
  42. data/lib/resource_controller/helpers.rb +34 -0
  43. data/lib/resource_controller/helpers/current_objects.rb +73 -0
  44. data/lib/resource_controller/helpers/internal.rb +80 -0
  45. data/lib/resource_controller/helpers/nested.rb +67 -0
  46. data/lib/resource_controller/helpers/singleton_customizations.rb +64 -0
  47. data/lib/resource_controller/helpers/urls.rb +132 -0
  48. data/lib/resource_controller/response_collector.rb +27 -0
  49. data/lib/resource_controller/singleton.rb +15 -0
  50. data/lib/urligence.rb +52 -0
  51. data/rails/init.rb +6 -0
  52. data/test/Gemfile +13 -0
  53. data/test/Gemfile.lock +95 -0
  54. data/test/Rakefile +10 -0
  55. data/test/app/controllers/accounts_controller.rb +6 -0
  56. data/test/app/controllers/application_controller.rb +5 -0
  57. data/test/app/controllers/cms/options_controller.rb +3 -0
  58. data/test/app/controllers/cms/personnel_controller.rb +2 -0
  59. data/test/app/controllers/cms/photos_controller.rb +6 -0
  60. data/test/app/controllers/cms/products_controller.rb +3 -0
  61. data/test/app/controllers/comments_controller.rb +3 -0
  62. data/test/app/controllers/images_controller.rb +4 -0
  63. data/test/app/controllers/options_controller.rb +8 -0
  64. data/test/app/controllers/people_controller.rb +9 -0
  65. data/test/app/controllers/photos_controller.rb +12 -0
  66. data/test/app/controllers/posts_controller.rb +10 -0
  67. data/test/app/controllers/projects_controller.rb +3 -0
  68. data/test/app/controllers/somethings_controller.rb +3 -0
  69. data/test/app/controllers/tags_controller.rb +13 -0
  70. data/test/app/controllers/users_controller.rb +12 -0
  71. data/test/app/helpers/accounts_helper.rb +2 -0
  72. data/test/app/helpers/application_helper.rb +3 -0
  73. data/test/app/helpers/cms/products_helper.rb +2 -0
  74. data/test/app/helpers/comments_helper.rb +2 -0
  75. data/test/app/helpers/images_helper.rb +2 -0
  76. data/test/app/helpers/options_helper.rb +2 -0
  77. data/test/app/helpers/people_helper.rb +2 -0
  78. data/test/app/helpers/photos_helper.rb +2 -0
  79. data/test/app/helpers/posts_helper.rb +2 -0
  80. data/test/app/helpers/projects_helper.rb +2 -0
  81. data/test/app/helpers/somethings_helper.rb +2 -0
  82. data/test/app/helpers/tags_helper.rb +2 -0
  83. data/test/app/helpers/users_helper.rb +2 -0
  84. data/test/app/models/account.rb +4 -0
  85. data/test/app/models/comment.rb +3 -0
  86. data/test/app/models/image.rb +3 -0
  87. data/test/app/models/option.rb +3 -0
  88. data/test/app/models/personnel.rb +3 -0
  89. data/test/app/models/photo.rb +5 -0
  90. data/test/app/models/post.rb +3 -0
  91. data/test/app/models/product.rb +3 -0
  92. data/test/app/models/project.rb +2 -0
  93. data/test/app/models/something.rb +2 -0
  94. data/test/app/models/tag.rb +3 -0
  95. data/test/app/models/user.rb +3 -0
  96. data/test/app/views/accounts/_form.html.erb +4 -0
  97. data/test/app/views/accounts/edit.html.erb +14 -0
  98. data/test/app/views/accounts/new.html.erb +12 -0
  99. data/test/app/views/accounts/show.html.erb +5 -0
  100. data/test/app/views/cms/options/edit.rhtml +17 -0
  101. data/test/app/views/cms/options/index.rhtml +20 -0
  102. data/test/app/views/cms/options/new.rhtml +16 -0
  103. data/test/app/views/cms/options/show.rhtml +8 -0
  104. data/test/app/views/cms/photos/edit.rhtml +17 -0
  105. data/test/app/views/cms/photos/index.rhtml +20 -0
  106. data/test/app/views/cms/photos/new.rhtml +16 -0
  107. data/test/app/views/cms/photos/show.rhtml +8 -0
  108. data/test/app/views/cms/products/edit.rhtml +17 -0
  109. data/test/app/views/cms/products/index.rhtml +20 -0
  110. data/test/app/views/cms/products/new.rhtml +16 -0
  111. data/test/app/views/cms/products/show.rhtml +8 -0
  112. data/test/app/views/comments/edit.rhtml +27 -0
  113. data/test/app/views/comments/index.rhtml +24 -0
  114. data/test/app/views/comments/new.rhtml +26 -0
  115. data/test/app/views/comments/show.rhtml +18 -0
  116. data/test/app/views/images/_form.html.erb +4 -0
  117. data/test/app/views/images/edit.html.erb +14 -0
  118. data/test/app/views/images/new.html.erb +12 -0
  119. data/test/app/views/layouts/application.rhtml +17 -0
  120. data/test/app/views/layouts/comments.rhtml +17 -0
  121. data/test/app/views/layouts/options.rhtml +17 -0
  122. data/test/app/views/layouts/people.rhtml +17 -0
  123. data/test/app/views/layouts/photos.rhtml +17 -0
  124. data/test/app/views/layouts/projects.rhtml +17 -0
  125. data/test/app/views/layouts/somethings.rhtml +17 -0
  126. data/test/app/views/layouts/tags.rhtml +17 -0
  127. data/test/app/views/options/_form.html.erb +8 -0
  128. data/test/app/views/options/edit.html.erb +16 -0
  129. data/test/app/views/options/index.html.erb +21 -0
  130. data/test/app/views/options/new.html.erb +12 -0
  131. data/test/app/views/options/show.html.erb +10 -0
  132. data/test/app/views/people/edit.rhtml +17 -0
  133. data/test/app/views/people/index.rhtml +20 -0
  134. data/test/app/views/people/new.rhtml +16 -0
  135. data/test/app/views/people/show.rhtml +8 -0
  136. data/test/app/views/photos/edit.rhtml +17 -0
  137. data/test/app/views/photos/index.rhtml +20 -0
  138. data/test/app/views/photos/new.rhtml +16 -0
  139. data/test/app/views/photos/show.rhtml +8 -0
  140. data/test/app/views/posts/edit.rhtml +22 -0
  141. data/test/app/views/posts/index.rhtml +22 -0
  142. data/test/app/views/posts/new.rhtml +21 -0
  143. data/test/app/views/posts/show.rhtml +13 -0
  144. data/test/app/views/projects/edit.rhtml +17 -0
  145. data/test/app/views/projects/index.rhtml +20 -0
  146. data/test/app/views/projects/new.rhtml +16 -0
  147. data/test/app/views/projects/show.rhtml +8 -0
  148. data/test/app/views/somethings/edit.rhtml +17 -0
  149. data/test/app/views/somethings/index.rhtml +20 -0
  150. data/test/app/views/somethings/new.rhtml +16 -0
  151. data/test/app/views/somethings/show.rhtml +8 -0
  152. data/test/app/views/tags/edit.rhtml +17 -0
  153. data/test/app/views/tags/index.rhtml +20 -0
  154. data/test/app/views/tags/index.rjs +0 -0
  155. data/test/app/views/tags/new.rhtml +16 -0
  156. data/test/app/views/tags/show.rhtml +8 -0
  157. data/test/app/views/users/edit.rhtml +17 -0
  158. data/test/app/views/users/index.rhtml +20 -0
  159. data/test/app/views/users/new.rhtml +16 -0
  160. data/test/app/views/users/show.rhtml +8 -0
  161. data/test/config.ru +4 -0
  162. data/test/config/application.rb +41 -0
  163. data/test/config/boot.rb +6 -0
  164. data/test/config/database.yml +9 -0
  165. data/test/config/environment.rb +5 -0
  166. data/test/config/environments/development.rb +19 -0
  167. data/test/config/environments/test.rb +34 -0
  168. data/test/config/initializers/inflections.rb +14 -0
  169. data/test/config/initializers/secret_token.rb +7 -0
  170. data/test/config/initializers/session_store.rb +8 -0
  171. data/test/config/routes.rb +35 -0
  172. data/test/db/migrate/001_create_posts.rb +12 -0
  173. data/test/db/migrate/002_create_products.rb +11 -0
  174. data/test/db/migrate/003_create_comments.rb +13 -0
  175. data/test/db/migrate/004_create_options.rb +13 -0
  176. data/test/db/migrate/005_create_photos.rb +11 -0
  177. data/test/db/migrate/006_create_tags.rb +17 -0
  178. data/test/db/migrate/007_create_somethings.rb +11 -0
  179. data/test/db/migrate/008_create_accounts.rb +11 -0
  180. data/test/db/migrate/009_add_account_id_to_photos.rb +9 -0
  181. data/test/db/migrate/010_create_projects.rb +11 -0
  182. data/test/db/migrate/011_create_images.rb +12 -0
  183. data/test/db/migrate/012_create_users.rb +11 -0
  184. data/test/db/migrate/013_create_personnel.rb +11 -0
  185. data/test/db/migrate/014_add_personnel_id_to_photos.rb +9 -0
  186. data/test/db/schema.rb +79 -0
  187. data/test/script/console +3 -0
  188. data/test/script/destroy +3 -0
  189. data/test/script/generate +3 -0
  190. data/test/script/rails +6 -0
  191. data/test/script/server +3 -0
  192. data/test/test/fixtures/accounts.yml +7 -0
  193. data/test/test/fixtures/comments.yml +11 -0
  194. data/test/test/fixtures/images.yml +6 -0
  195. data/test/test/fixtures/options.yml +9 -0
  196. data/test/test/fixtures/personnel.yml +5 -0
  197. data/test/test/fixtures/photos.yml +9 -0
  198. data/test/test/fixtures/photos_tags.yml +3 -0
  199. data/test/test/fixtures/posts.yml +9 -0
  200. data/test/test/fixtures/products.yml +7 -0
  201. data/test/test/fixtures/projects.yml +7 -0
  202. data/test/test/fixtures/somethings.yml +7 -0
  203. data/test/test/fixtures/tags.yml +7 -0
  204. data/test/test/fixtures/users.yml +5 -0
  205. data/test/test/functional/cms/options_controller_test.rb +140 -0
  206. data/test/test/functional/cms/photos_controller_test.rb +37 -0
  207. data/test/test/functional/cms/products_controller_test.rb +37 -0
  208. data/test/test/functional/comments_controller_test.rb +140 -0
  209. data/test/test/functional/images_controller_test.rb +30 -0
  210. data/test/test/functional/people_controller_test.rb +147 -0
  211. data/test/test/functional/photos_controller_test.rb +199 -0
  212. data/test/test/functional/posts_controller_test.rb +21 -0
  213. data/test/test/functional/projects_controller_test.rb +137 -0
  214. data/test/test/functional/somethings_controller_test.rb +15 -0
  215. data/test/test/functional/tags_controller_test.rb +53 -0
  216. data/test/test/functional/users_controller_test.rb +137 -0
  217. data/test/test/test_helper.rb +14 -0
  218. data/test/test/unit/accessors_test.rb +110 -0
  219. data/test/test/unit/account_test.rb +7 -0
  220. data/test/test/unit/action_options_test.rb +109 -0
  221. data/test/test/unit/base_test.rb +11 -0
  222. data/test/test/unit/comment_test.rb +10 -0
  223. data/test/test/unit/failable_action_options_test.rb +77 -0
  224. data/test/test/unit/helpers/current_objects_test.rb +133 -0
  225. data/test/test/unit/helpers/internal_test.rb +106 -0
  226. data/test/test/unit/helpers/nested_test.rb +86 -0
  227. data/test/test/unit/helpers/singleton_current_objects_test.rb +68 -0
  228. data/test/test/unit/helpers/singleton_nested_test.rb +77 -0
  229. data/test/test/unit/helpers/singleton_urls_test.rb +67 -0
  230. data/test/test/unit/helpers/urls_test.rb +75 -0
  231. data/test/test/unit/helpers_test.rb +25 -0
  232. data/test/test/unit/image_test.rb +7 -0
  233. data/test/test/unit/option_test.rb +10 -0
  234. data/test/test/unit/photo_test.rb +10 -0
  235. data/test/test/unit/post_test.rb +10 -0
  236. data/test/test/unit/project_test.rb +10 -0
  237. data/test/test/unit/response_collector_test.rb +49 -0
  238. data/test/test/unit/something_test.rb +10 -0
  239. data/test/test/unit/tag_test.rb +10 -0
  240. data/test/test/unit/urligence_test.rb +205 -0
  241. data/test/vendor/plugins/d +1 -0
  242. data/test/vendor/plugins/dynamic_form/MIT-LICENSE +20 -0
  243. data/test/vendor/plugins/dynamic_form/README +13 -0
  244. data/test/vendor/plugins/dynamic_form/Rakefile +10 -0
  245. data/test/vendor/plugins/dynamic_form/init.rb +5 -0
  246. data/test/vendor/plugins/dynamic_form/lib/action_view/helpers/dynamic_form.rb +300 -0
  247. data/test/vendor/plugins/dynamic_form/lib/action_view/locale/en.yml +8 -0
  248. data/test/vendor/plugins/dynamic_form/test/dynamic_form_i18n_test.rb +42 -0
  249. data/test/vendor/plugins/dynamic_form/test/dynamic_form_test.rb +370 -0
  250. data/test/vendor/plugins/dynamic_form/test/test_helper.rb +9 -0
  251. metadata +427 -0
@@ -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 ResourceController::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 ResourceController::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 ResourceController::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
@@ -0,0 +1,49 @@
1
+ require File.dirname(__FILE__)+'/../test_helper'
2
+
3
+ class ResponseCollectorTest < ActiveSupport::TestCase
4
+ context "yielding a block to a collector object" do
5
+ setup do
6
+ @collector = ResourceController::ResponseCollector.new
7
+ block = lambda do |wants|
8
+ wants.html {}
9
+ wants.js {}
10
+ wants.xml
11
+ end
12
+ block.call(@collector)
13
+ end
14
+
15
+ should "collect responses" do
16
+ assert_equal Proc, @collector[:html][1].class, @collector[:html].inspect
17
+ assert_equal Proc, @collector[:js][1].class, @collector[:js].inspect
18
+ assert @collector[:xml][1].nil?, @collector[:xml].inspect
19
+ end
20
+
21
+ should "clear responses with clear method" do
22
+ @collector.clear
23
+ assert @collector.responses.empty?
24
+ end
25
+
26
+ should "destroy methods before readding them, if they're already there" do
27
+ @collector.html
28
+ assert @collector[:html][1].nil?
29
+ end
30
+ end
31
+
32
+ context "duplicating a response collector" do
33
+ setup do
34
+ @collector = ResourceController::ResponseCollector.new
35
+ @collector.js
36
+ @duplicate = @collector.dup
37
+ @collector.css
38
+ end
39
+
40
+ should "not bleed in to the original" do
41
+ assert @duplicate[:css].nil?
42
+ end
43
+
44
+ should "duplicate existing responses at the time of duplication" do
45
+ assert_equal :js, @duplicate[:js].first
46
+ end
47
+ end
48
+
49
+ end
@@ -0,0 +1,10 @@
1
+ require File.dirname(__FILE__) + '/../test_helper'
2
+
3
+ class SomethingTest < ActiveSupport::TestCase
4
+ fixtures :somethings
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 TagTest < ActiveSupport::TestCase
4
+ fixtures :tags
5
+
6
+ # Replace this with your real tests.
7
+ def test_truth
8
+ assert true
9
+ end
10
+ end
@@ -0,0 +1,205 @@
1
+ require 'test_helper'
2
+ require 'urligence'
3
+
4
+ class PhotosController
5
+ include ResourceController::Urligence
6
+ end
7
+
8
+ class UrligenceTest < ActiveSupport::TestCase
9
+ def setup
10
+ @controller = PhotosController.new
11
+ @tag = Tag.new
12
+ @tag.stubs(:to_param).returns('awesomestuff')
13
+ @photo = Photo.new
14
+ @photo.stubs(:to_param).returns(1)
15
+ end
16
+
17
+ context "with one object" do
18
+ setup do
19
+ setup_mocks "/photos/#{@photo.to_param}", :photo, @photo
20
+ end
21
+
22
+ context "urligence" do
23
+ should "return the correct path" do
24
+ assert_equal @expected_path, @controller.urligence(@photo, :path)
25
+ end
26
+ end
27
+
28
+ context "smart_url" do
29
+ should "return the correct url" do
30
+ assert_equal @expected_url, @controller.smart_url(@photo)
31
+ end
32
+ end
33
+
34
+ context "smart_path" do
35
+ should "return the correct path" do
36
+ assert_equal @expected_path, @controller.smart_path(@photo)
37
+ end
38
+ end
39
+ end
40
+
41
+ context "with two objects" do
42
+ setup do
43
+ setup_mocks "/tags/#{@tag.to_param}/photos/#{@photo.to_param}", :tag_photo, @tag, @photo
44
+ end
45
+
46
+ should "return the correct path" do
47
+ assert_equal @expected_path, @controller.urligence(@tag, @photo, :path)
48
+ end
49
+ end
50
+
51
+ context "with a namespace as first param" do
52
+ setup do
53
+ setup_mocks "/admin/tags/#{@tag.to_param}/photos/#{@photo.to_param}", :admin_tag_photo, @tag, @photo
54
+ end
55
+
56
+ should "return the correct path" do
57
+ assert_equal @expected_path, @controller.urligence(:admin, @tag, @photo, :path)
58
+ end
59
+ end
60
+
61
+ context "with many nil options anywhere in the arguments" do
62
+ setup do
63
+ setup_mocks "/tags/#{@tag.to_param}/photos/#{@photo.to_param}", :tag_photo, @tag, @photo
64
+ end
65
+
66
+ should "return the correct path" do
67
+ assert_equal @expected_path, @controller.urligence(nil, nil, nil, @tag, nil, @photo, nil, :path)
68
+ end
69
+ end
70
+
71
+ context "with a symbol as the last parameter" do
72
+ setup do
73
+ setup_mocks "/tags/#{@tag.to_param}/photos", :tag_photos, @tag
74
+ end
75
+
76
+ should "use that as the last fragment of the url" do
77
+ assert_equal @expected_path, @controller.urligence(@tag, :photos, :path)
78
+ end
79
+ end
80
+
81
+ context "with a symbol as the only parameter" do
82
+ setup do
83
+ setup_mocks "/photos", :photos
84
+ end
85
+
86
+ should "use that as the only url fragment" do
87
+ assert_equal @expected_path, @controller.urligence(nil, :photos, :path)
88
+ end
89
+ end
90
+
91
+ context "with a namespace, and a plural symbol" do
92
+ setup do
93
+ setup_mocks "/admin/products", :admin_products
94
+ end
95
+
96
+ should "call the correct url handler" do
97
+ assert_equal @expected_path, @controller.urligence(:admin, :products, :path)
98
+ end
99
+ end
100
+
101
+ context "with only symbols" do
102
+ setup do
103
+ setup_mocks '/admin/products/new', :new_admin_products
104
+ end
105
+
106
+ should "return the correct path" do
107
+ assert_equal @expected_path, @controller.urligence(:new, :admin, :products, :path)
108
+ end
109
+ end
110
+
111
+ context "with array parameters for specifying the names of routes that don't match the class name of the object" do
112
+ setup do
113
+ setup_mocks '/something_tags/1', :something_tag, @tag
114
+ end
115
+
116
+ context "urligence" do
117
+ should "use the name of the symbol as the url fragment" do
118
+ assert_equal @expected_path, @controller.urligence([:something_tag, @tag], :path)
119
+ end
120
+ end
121
+
122
+ context "smart_url" do
123
+ should "return the correct path" do
124
+ assert_equal @expected_url, @controller.smart_url([:something_tag, @tag])
125
+ end
126
+ end
127
+
128
+ context "smart_path" do
129
+ should "return the correct path" do
130
+ assert_equal @expected_path, @controller.smart_path([:something_tag, @tag])
131
+ end
132
+ end
133
+ end
134
+
135
+ context "with array parameters and a namespace" do
136
+ setup do
137
+ setup_mocks '/admin/something_tags/1', :admin_something_tag, @tag
138
+ end
139
+
140
+ should "return the correct url" do
141
+ assert_equal @expected_path, @controller.urligence(:admin, [:something_tag, @tag], :path)
142
+ end
143
+ end
144
+
145
+ context "with array parameters, a namespace, and an ending symbol" do
146
+ setup do
147
+ setup_mocks '/admin/something_tags/1/photos', :admin_something_tag_photos, @tag
148
+ end
149
+
150
+ should "return the correct url" do
151
+ assert_equal @expected_path, @controller.urligence(:admin, [:something_tag, @tag], :photos, :path)
152
+ end
153
+ end
154
+
155
+ context "with array parameters, a symbol namespace, and normal model parameters" do
156
+ setup do
157
+ setup_mocks '/admin/something_tags/1/photos/1', :admin_something_tag_photo, @tag, @photo
158
+ end
159
+
160
+ should "return the correct url" do
161
+ assert_equal @expected_path, @controller.urligence(:admin, [:something_tag, @tag], @photo, :path)
162
+ end
163
+ end
164
+
165
+ context "hash_for" do
166
+ context "url" do
167
+ setup do
168
+ @controller.stubs(:hash_for_photo_tag_url).with(:id => @tag.to_param, :photo_id => @photo.to_param).returns("something")
169
+ end
170
+
171
+ should "return the correct hash" do
172
+ assert_equal "something", @controller.hash_for_smart_url(@photo, @tag)
173
+ end
174
+ end
175
+
176
+ context "path" do
177
+ setup do
178
+ @photo_tag = stub(:class => stub(:name => "PhotoTag"), :to_param => 'awesomestuff')
179
+ @controller.stubs(:hash_for_photo_tag_path).with(:id => @tag.to_param, :photo_id => @photo.to_param).returns("something")
180
+ end
181
+
182
+ should "return the correct hash" do
183
+ assert_equal "something", @controller.hash_for_smart_path(@photo, [:tag, @photo_tag])
184
+ end
185
+ end
186
+
187
+ context "collection path" do
188
+ setup do
189
+ @controller.stubs(:hash_for_photos_path).with({}).returns('something')
190
+ end
191
+
192
+ should "call the correct methods" do
193
+ assert_equal 'something', @controller.hash_for_smart_path(:photos)
194
+ end
195
+ end
196
+ end
197
+
198
+ private
199
+ def setup_mocks(expected_path, method, *params)
200
+ @expected_path = expected_path
201
+ @controller.stubs("#{method}_path".to_sym).with(*params).returns(@expected_path)
202
+ @controller.stubs("#{method}_url".to_sym).with(*params).returns(@expected_url = "http://localhost#{@expected_path}")
203
+ @controller.stubs("hash_for_#{method}_url".to_sym).with(*params).returns(@expected_hash = @expected_url)
204
+ end
205
+ end