eactionpack 2.1.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 (338) hide show
  1. data/CHANGELOG +7 -0
  2. data/MIT-LICENSE +21 -0
  3. data/README +469 -0
  4. data/RUNNING_UNIT_TESTS +24 -0
  5. data/Rakefile +146 -0
  6. data/install.rb +30 -0
  7. data/lib/action_controller.rb +79 -0
  8. data/lib/action_controller/assertions.rb +69 -0
  9. data/lib/action_controller/assertions/dom_assertions.rb +39 -0
  10. data/lib/action_controller/assertions/model_assertions.rb +20 -0
  11. data/lib/action_controller/assertions/response_assertions.rb +172 -0
  12. data/lib/action_controller/assertions/routing_assertions.rb +146 -0
  13. data/lib/action_controller/assertions/selector_assertions.rb +491 -0
  14. data/lib/action_controller/assertions/tag_assertions.rb +130 -0
  15. data/lib/action_controller/base.rb +1288 -0
  16. data/lib/action_controller/benchmarking.rb +94 -0
  17. data/lib/action_controller/caching.rb +72 -0
  18. data/lib/action_controller/caching/actions.rb +144 -0
  19. data/lib/action_controller/caching/fragments.rb +138 -0
  20. data/lib/action_controller/caching/pages.rb +154 -0
  21. data/lib/action_controller/caching/sql_cache.rb +18 -0
  22. data/lib/action_controller/caching/sweeping.rb +97 -0
  23. data/lib/action_controller/cgi_ext.rb +16 -0
  24. data/lib/action_controller/cgi_ext/cookie.rb +110 -0
  25. data/lib/action_controller/cgi_ext/query_extension.rb +22 -0
  26. data/lib/action_controller/cgi_ext/session.rb +73 -0
  27. data/lib/action_controller/cgi_ext/stdinput.rb +24 -0
  28. data/lib/action_controller/cgi_process.rb +223 -0
  29. data/lib/action_controller/components.rb +166 -0
  30. data/lib/action_controller/cookies.rb +96 -0
  31. data/lib/action_controller/dispatcher.rb +162 -0
  32. data/lib/action_controller/filters.rb +642 -0
  33. data/lib/action_controller/flash.rb +172 -0
  34. data/lib/action_controller/headers.rb +31 -0
  35. data/lib/action_controller/helpers.rb +221 -0
  36. data/lib/action_controller/http_authentication.rb +124 -0
  37. data/lib/action_controller/integration.rb +634 -0
  38. data/lib/action_controller/layout.rb +309 -0
  39. data/lib/action_controller/mime_responds.rb +173 -0
  40. data/lib/action_controller/mime_type.rb +186 -0
  41. data/lib/action_controller/mime_types.rb +20 -0
  42. data/lib/action_controller/polymorphic_routes.rb +191 -0
  43. data/lib/action_controller/record_identifier.rb +102 -0
  44. data/lib/action_controller/request.rb +764 -0
  45. data/lib/action_controller/request_forgery_protection.rb +140 -0
  46. data/lib/action_controller/request_profiler.rb +169 -0
  47. data/lib/action_controller/rescue.rb +258 -0
  48. data/lib/action_controller/resources.rb +572 -0
  49. data/lib/action_controller/response.rb +76 -0
  50. data/lib/action_controller/routing.rb +387 -0
  51. data/lib/action_controller/routing/builder.rb +203 -0
  52. data/lib/action_controller/routing/optimisations.rb +120 -0
  53. data/lib/action_controller/routing/recognition_optimisation.rb +162 -0
  54. data/lib/action_controller/routing/route.rb +240 -0
  55. data/lib/action_controller/routing/route_set.rb +436 -0
  56. data/lib/action_controller/routing/routing_ext.rb +46 -0
  57. data/lib/action_controller/routing/segments.rb +283 -0
  58. data/lib/action_controller/session/active_record_store.rb +340 -0
  59. data/lib/action_controller/session/cookie_store.rb +166 -0
  60. data/lib/action_controller/session/drb_server.rb +32 -0
  61. data/lib/action_controller/session/drb_store.rb +35 -0
  62. data/lib/action_controller/session/mem_cache_store.rb +98 -0
  63. data/lib/action_controller/session_management.rb +158 -0
  64. data/lib/action_controller/status_codes.rb +88 -0
  65. data/lib/action_controller/streaming.rb +155 -0
  66. data/lib/action_controller/templates/rescues/_request_and_response.erb +24 -0
  67. data/lib/action_controller/templates/rescues/_trace.erb +26 -0
  68. data/lib/action_controller/templates/rescues/diagnostics.erb +11 -0
  69. data/lib/action_controller/templates/rescues/layout.erb +29 -0
  70. data/lib/action_controller/templates/rescues/missing_template.erb +2 -0
  71. data/lib/action_controller/templates/rescues/routing_error.erb +10 -0
  72. data/lib/action_controller/templates/rescues/template_error.erb +21 -0
  73. data/lib/action_controller/templates/rescues/unknown_action.erb +2 -0
  74. data/lib/action_controller/test_case.rb +83 -0
  75. data/lib/action_controller/test_process.rb +526 -0
  76. data/lib/action_controller/url_rewriter.rb +142 -0
  77. data/lib/action_controller/vendor/html-scanner/html/document.rb +68 -0
  78. data/lib/action_controller/vendor/html-scanner/html/node.rb +537 -0
  79. data/lib/action_controller/vendor/html-scanner/html/sanitizer.rb +173 -0
  80. data/lib/action_controller/vendor/html-scanner/html/selector.rb +828 -0
  81. data/lib/action_controller/vendor/html-scanner/html/tokenizer.rb +105 -0
  82. data/lib/action_controller/vendor/html-scanner/html/version.rb +11 -0
  83. data/lib/action_controller/verification.rb +130 -0
  84. data/lib/action_pack.rb +24 -0
  85. data/lib/action_pack/version.rb +9 -0
  86. data/lib/action_view.rb +44 -0
  87. data/lib/action_view/base.rb +335 -0
  88. data/lib/action_view/helpers/active_record_helper.rb +276 -0
  89. data/lib/action_view/helpers/asset_tag_helper.rb +599 -0
  90. data/lib/action_view/helpers/atom_feed_helper.rb +143 -0
  91. data/lib/action_view/helpers/benchmark_helper.rb +33 -0
  92. data/lib/action_view/helpers/cache_helper.rb +40 -0
  93. data/lib/action_view/helpers/capture_helper.rb +161 -0
  94. data/lib/action_view/helpers/date_helper.rb +711 -0
  95. data/lib/action_view/helpers/debug_helper.rb +31 -0
  96. data/lib/action_view/helpers/form_helper.rb +767 -0
  97. data/lib/action_view/helpers/form_options_helper.rb +458 -0
  98. data/lib/action_view/helpers/form_tag_helper.rb +458 -0
  99. data/lib/action_view/helpers/javascript_helper.rb +148 -0
  100. data/lib/action_view/helpers/number_helper.rb +186 -0
  101. data/lib/action_view/helpers/record_identification_helper.rb +20 -0
  102. data/lib/action_view/helpers/record_tag_helper.rb +59 -0
  103. data/lib/action_view/helpers/sanitize_helper.rb +229 -0
  104. data/lib/action_view/helpers/tag_helper.rb +134 -0
  105. data/lib/action_view/helpers/text_helper.rb +507 -0
  106. data/lib/action_view/helpers/url_helper.rb +573 -0
  107. data/lib/action_view/inline_template.rb +20 -0
  108. data/lib/action_view/partial_template.rb +70 -0
  109. data/lib/action_view/partials.rb +158 -0
  110. data/lib/action_view/template.rb +125 -0
  111. data/lib/action_view/template_error.rb +110 -0
  112. data/lib/action_view/template_finder.rb +176 -0
  113. data/lib/action_view/template_handler.rb +34 -0
  114. data/lib/action_view/template_handlers/builder.rb +27 -0
  115. data/lib/action_view/template_handlers/compilable.rb +128 -0
  116. data/lib/action_view/template_handlers/erb.rb +56 -0
  117. data/lib/action_view/test_case.rb +58 -0
  118. data/lib/actionpack.rb +1 -0
  119. data/test/abstract_unit.rb +36 -0
  120. data/test/active_record_unit.rb +105 -0
  121. data/test/activerecord/active_record_store_test.rb +141 -0
  122. data/test/activerecord/render_partial_with_record_identification_test.rb +191 -0
  123. data/test/adv_attr_test.rb +20 -0
  124. data/test/controller/action_pack_assertions_test.rb +543 -0
  125. data/test/controller/addresses_render_test.rb +43 -0
  126. data/test/controller/assert_select_test.rb +331 -0
  127. data/test/controller/base_test.rb +219 -0
  128. data/test/controller/benchmark_test.rb +32 -0
  129. data/test/controller/caching_test.rb +581 -0
  130. data/test/controller/capture_test.rb +89 -0
  131. data/test/controller/cgi_test.rb +116 -0
  132. data/test/controller/components_test.rb +140 -0
  133. data/test/controller/content_type_test.rb +139 -0
  134. data/test/controller/controller_fixtures/app/controllers/admin/user_controller.rb +0 -0
  135. data/test/controller/controller_fixtures/app/controllers/user_controller.rb +0 -0
  136. data/test/controller/controller_fixtures/vendor/plugins/bad_plugin/lib/plugin_controller.rb +0 -0
  137. data/test/controller/cookie_test.rb +146 -0
  138. data/test/controller/custom_handler_test.rb +45 -0
  139. data/test/controller/deprecation/deprecated_base_methods_test.rb +37 -0
  140. data/test/controller/dispatcher_test.rb +105 -0
  141. data/test/controller/fake_controllers.rb +33 -0
  142. data/test/controller/fake_models.rb +11 -0
  143. data/test/controller/filter_params_test.rb +49 -0
  144. data/test/controller/filters_test.rb +881 -0
  145. data/test/controller/flash_test.rb +146 -0
  146. data/test/controller/header_test.rb +14 -0
  147. data/test/controller/helper_test.rb +210 -0
  148. data/test/controller/html-scanner/cdata_node_test.rb +15 -0
  149. data/test/controller/html-scanner/document_test.rb +148 -0
  150. data/test/controller/html-scanner/node_test.rb +89 -0
  151. data/test/controller/html-scanner/sanitizer_test.rb +269 -0
  152. data/test/controller/html-scanner/tag_node_test.rb +238 -0
  153. data/test/controller/html-scanner/text_node_test.rb +50 -0
  154. data/test/controller/html-scanner/tokenizer_test.rb +131 -0
  155. data/test/controller/http_authentication_test.rb +54 -0
  156. data/test/controller/integration_test.rb +252 -0
  157. data/test/controller/integration_upload_test.rb +43 -0
  158. data/test/controller/layout_test.rb +255 -0
  159. data/test/controller/mime_responds_test.rb +514 -0
  160. data/test/controller/mime_type_test.rb +84 -0
  161. data/test/controller/new_render_test.rb +843 -0
  162. data/test/controller/polymorphic_routes_test.rb +174 -0
  163. data/test/controller/record_identifier_test.rb +139 -0
  164. data/test/controller/redirect_test.rb +289 -0
  165. data/test/controller/render_test.rb +484 -0
  166. data/test/controller/request_forgery_protection_test.rb +305 -0
  167. data/test/controller/request_test.rb +928 -0
  168. data/test/controller/rescue_test.rb +517 -0
  169. data/test/controller/resources_test.rb +873 -0
  170. data/test/controller/routing_test.rb +2464 -0
  171. data/test/controller/selector_test.rb +628 -0
  172. data/test/controller/send_file_test.rb +138 -0
  173. data/test/controller/session/cookie_store_test.rb +258 -0
  174. data/test/controller/session/mem_cache_store_test.rb +181 -0
  175. data/test/controller/session_fixation_test.rb +89 -0
  176. data/test/controller/session_management_test.rb +178 -0
  177. data/test/controller/test_test.rb +695 -0
  178. data/test/controller/url_rewriter_test.rb +310 -0
  179. data/test/controller/verification_test.rb +270 -0
  180. data/test/controller/view_paths_test.rb +140 -0
  181. data/test/controller/webservice_test.rb +229 -0
  182. data/test/fixtures/addresses/list.erb +1 -0
  183. data/test/fixtures/bad_customers/_bad_customer.html.erb +1 -0
  184. data/test/fixtures/companies.yml +24 -0
  185. data/test/fixtures/company.rb +10 -0
  186. data/test/fixtures/content_type/render_default_content_types_for_respond_to.rhtml +1 -0
  187. data/test/fixtures/content_type/render_default_for_js.js.erb +1 -0
  188. data/test/fixtures/content_type/render_default_for_rhtml.rhtml +1 -0
  189. data/test/fixtures/content_type/render_default_for_rxml.rxml +1 -0
  190. data/test/fixtures/customers/_customer.html.erb +1 -0
  191. data/test/fixtures/db_definitions/sqlite.sql +49 -0
  192. data/test/fixtures/developer.rb +9 -0
  193. data/test/fixtures/developers.yml +21 -0
  194. data/test/fixtures/developers_projects.yml +13 -0
  195. data/test/fixtures/fun/games/hello_world.erb +1 -0
  196. data/test/fixtures/functional_caching/_partial.erb +3 -0
  197. data/test/fixtures/functional_caching/fragment_cached.html.erb +2 -0
  198. data/test/fixtures/functional_caching/html_fragment_cached_with_partial.html.erb +1 -0
  199. data/test/fixtures/functional_caching/js_fragment_cached_with_partial.js.rjs +1 -0
  200. data/test/fixtures/good_customers/_good_customer.html.erb +1 -0
  201. data/test/fixtures/helpers/abc_helper.rb +5 -0
  202. data/test/fixtures/helpers/fun/games_helper.rb +3 -0
  203. data/test/fixtures/helpers/fun/pdf_helper.rb +3 -0
  204. data/test/fixtures/layout_tests/alt/hello.rhtml +1 -0
  205. data/test/fixtures/layout_tests/layouts/controller_name_space/nested.rhtml +1 -0
  206. data/test/fixtures/layout_tests/layouts/item.rhtml +1 -0
  207. data/test/fixtures/layout_tests/layouts/layout_test.rhtml +1 -0
  208. data/test/fixtures/layout_tests/layouts/multiple_extensions.html.erb +1 -0
  209. data/test/fixtures/layout_tests/layouts/third_party_template_library.mab +1 -0
  210. data/test/fixtures/layout_tests/views/hello.rhtml +1 -0
  211. data/test/fixtures/layouts/block_with_layout.erb +3 -0
  212. data/test/fixtures/layouts/builder.builder +3 -0
  213. data/test/fixtures/layouts/partial_with_layout.erb +3 -0
  214. data/test/fixtures/layouts/standard.erb +1 -0
  215. data/test/fixtures/layouts/talk_from_action.erb +2 -0
  216. data/test/fixtures/layouts/yield.erb +2 -0
  217. data/test/fixtures/mascot.rb +3 -0
  218. data/test/fixtures/mascots.yml +4 -0
  219. data/test/fixtures/mascots/_mascot.html.erb +1 -0
  220. data/test/fixtures/multipart/binary_file +0 -0
  221. data/test/fixtures/multipart/boundary_problem_file +10 -0
  222. data/test/fixtures/multipart/bracketed_param +5 -0
  223. data/test/fixtures/multipart/large_text_file +10 -0
  224. data/test/fixtures/multipart/mixed_files +0 -0
  225. data/test/fixtures/multipart/mona_lisa.jpg +0 -0
  226. data/test/fixtures/multipart/single_parameter +5 -0
  227. data/test/fixtures/multipart/text_file +10 -0
  228. data/test/fixtures/override/test/hello_world.erb +1 -0
  229. data/test/fixtures/override2/layouts/test/sub.erb +1 -0
  230. data/test/fixtures/post_test/layouts/post.html.erb +1 -0
  231. data/test/fixtures/post_test/layouts/super_post.iphone.erb +1 -0
  232. data/test/fixtures/post_test/post/index.html.erb +1 -0
  233. data/test/fixtures/post_test/post/index.iphone.erb +1 -0
  234. data/test/fixtures/post_test/super_post/index.html.erb +1 -0
  235. data/test/fixtures/post_test/super_post/index.iphone.erb +1 -0
  236. data/test/fixtures/project.rb +3 -0
  237. data/test/fixtures/projects.yml +7 -0
  238. data/test/fixtures/public/404.html +1 -0
  239. data/test/fixtures/public/500.html +1 -0
  240. data/test/fixtures/public/images/rails.png +0 -0
  241. data/test/fixtures/public/javascripts/application.js +1 -0
  242. data/test/fixtures/public/javascripts/bank.js +1 -0
  243. data/test/fixtures/public/javascripts/robber.js +1 -0
  244. data/test/fixtures/public/javascripts/version.1.0.js +1 -0
  245. data/test/fixtures/public/stylesheets/bank.css +1 -0
  246. data/test/fixtures/public/stylesheets/robber.css +1 -0
  247. data/test/fixtures/public/stylesheets/version.1.0.css +1 -0
  248. data/test/fixtures/replies.yml +15 -0
  249. data/test/fixtures/reply.rb +7 -0
  250. data/test/fixtures/respond_to/all_types_with_layout.html.erb +1 -0
  251. data/test/fixtures/respond_to/custom_constant_handling_without_block.mobile.erb +1 -0
  252. data/test/fixtures/respond_to/iphone_with_html_response_type.html.erb +1 -0
  253. data/test/fixtures/respond_to/iphone_with_html_response_type.iphone.erb +1 -0
  254. data/test/fixtures/respond_to/layouts/missing.html.erb +1 -0
  255. data/test/fixtures/respond_to/layouts/standard.html.erb +1 -0
  256. data/test/fixtures/respond_to/layouts/standard.iphone.erb +1 -0
  257. data/test/fixtures/respond_to/using_defaults.html.erb +1 -0
  258. data/test/fixtures/respond_to/using_defaults.js.rjs +1 -0
  259. data/test/fixtures/respond_to/using_defaults.xml.builder +1 -0
  260. data/test/fixtures/respond_to/using_defaults_with_type_list.html.erb +1 -0
  261. data/test/fixtures/respond_to/using_defaults_with_type_list.js.rjs +1 -0
  262. data/test/fixtures/respond_to/using_defaults_with_type_list.xml.builder +1 -0
  263. data/test/fixtures/scope/test/modgreet.erb +1 -0
  264. data/test/fixtures/shared.html.erb +1 -0
  265. data/test/fixtures/symlink_parent/symlinked_layout.erb +5 -0
  266. data/test/fixtures/test/_customer.erb +1 -0
  267. data/test/fixtures/test/_customer_counter.erb +1 -0
  268. data/test/fixtures/test/_customer_greeting.erb +1 -0
  269. data/test/fixtures/test/_form.erb +1 -0
  270. data/test/fixtures/test/_hash_greeting.erb +1 -0
  271. data/test/fixtures/test/_hash_object.erb +2 -0
  272. data/test/fixtures/test/_hello.builder +1 -0
  273. data/test/fixtures/test/_labelling_form.erb +1 -0
  274. data/test/fixtures/test/_layout_for_partial.html.erb +3 -0
  275. data/test/fixtures/test/_partial.erb +1 -0
  276. data/test/fixtures/test/_partial.html.erb +1 -0
  277. data/test/fixtures/test/_partial.js.erb +1 -0
  278. data/test/fixtures/test/_partial_for_use_in_layout.html.erb +1 -0
  279. data/test/fixtures/test/_partial_only.erb +1 -0
  280. data/test/fixtures/test/_person.erb +2 -0
  281. data/test/fixtures/test/_raise.html.erb +1 -0
  282. data/test/fixtures/test/action_talk_to_layout.erb +2 -0
  283. data/test/fixtures/test/block_content_for.erb +2 -0
  284. data/test/fixtures/test/calling_partial_with_layout.html.erb +1 -0
  285. data/test/fixtures/test/capturing.erb +4 -0
  286. data/test/fixtures/test/content_for.erb +2 -0
  287. data/test/fixtures/test/content_for_concatenated.erb +3 -0
  288. data/test/fixtures/test/content_for_with_parameter.erb +2 -0
  289. data/test/fixtures/test/delete_with_js.rjs +2 -0
  290. data/test/fixtures/test/dot.directory/render_file_with_ivar.erb +1 -0
  291. data/test/fixtures/test/enum_rjs_test.rjs +6 -0
  292. data/test/fixtures/test/erb_content_for.erb +2 -0
  293. data/test/fixtures/test/formatted_html_erb.html.erb +1 -0
  294. data/test/fixtures/test/formatted_xml_erb.builder +1 -0
  295. data/test/fixtures/test/formatted_xml_erb.html.erb +1 -0
  296. data/test/fixtures/test/formatted_xml_erb.xml.erb +1 -0
  297. data/test/fixtures/test/greeting.erb +1 -0
  298. data/test/fixtures/test/greeting.js.rjs +1 -0
  299. data/test/fixtures/test/hello.builder +4 -0
  300. data/test/fixtures/test/hello_world.erb +1 -0
  301. data/test/fixtures/test/hello_world_container.builder +3 -0
  302. data/test/fixtures/test/hello_world_from_rxml.builder +4 -0
  303. data/test/fixtures/test/hello_world_with_layout_false.erb +1 -0
  304. data/test/fixtures/test/hello_xml_world.builder +11 -0
  305. data/test/fixtures/test/list.erb +1 -0
  306. data/test/fixtures/test/non_erb_block_content_for.builder +4 -0
  307. data/test/fixtures/test/potential_conflicts.erb +4 -0
  308. data/test/fixtures/test/render_file_from_template.html.erb +1 -0
  309. data/test/fixtures/test/render_file_with_ivar.erb +1 -0
  310. data/test/fixtures/test/render_file_with_locals.erb +1 -0
  311. data/test/fixtures/test/render_to_string_test.erb +1 -0
  312. data/test/fixtures/test/update_element_with_capture.erb +9 -0
  313. data/test/fixtures/test/using_layout_around_block.html.erb +1 -0
  314. data/test/fixtures/topic.rb +3 -0
  315. data/test/fixtures/topics.yml +22 -0
  316. data/test/fixtures/topics/_topic.html.erb +1 -0
  317. data/test/template/active_record_helper_test.rb +268 -0
  318. data/test/template/asset_tag_helper_test.rb +514 -0
  319. data/test/template/atom_feed_helper_test.rb +179 -0
  320. data/test/template/benchmark_helper_test.rb +60 -0
  321. data/test/template/date_helper_test.rb +1791 -0
  322. data/test/template/deprecated_erb_variable_test.rb +9 -0
  323. data/test/template/erb_util_test.rb +24 -0
  324. data/test/template/form_helper_test.rb +885 -0
  325. data/test/template/form_options_helper_test.rb +1333 -0
  326. data/test/template/form_tag_helper_test.rb +272 -0
  327. data/test/template/javascript_helper_test.rb +73 -0
  328. data/test/template/number_helper_test.rb +97 -0
  329. data/test/template/record_tag_helper_test.rb +54 -0
  330. data/test/template/sanitize_helper_test.rb +48 -0
  331. data/test/template/tag_helper_test.rb +77 -0
  332. data/test/template/template_finder_test.rb +73 -0
  333. data/test/template/template_object_test.rb +95 -0
  334. data/test/template/test_test.rb +56 -0
  335. data/test/template/text_helper_test.rb +367 -0
  336. data/test/template/url_helper_test.rb +544 -0
  337. data/test/testing_sandbox.rb +15 -0
  338. metadata +469 -0
@@ -0,0 +1,174 @@
1
+ require 'abstract_unit'
2
+
3
+ class Article
4
+ attr_reader :id
5
+ def save; @id = 1 end
6
+ def new_record?; @id.nil? end
7
+ def name
8
+ model = self.class.name.downcase
9
+ @id.nil? ? "new #{model}" : "#{model} ##{@id}"
10
+ end
11
+ end
12
+
13
+ class Response < Article
14
+ def post_id; 1 end
15
+ end
16
+
17
+ class Tag < Article
18
+ def response_id; 1 end
19
+ end
20
+
21
+ # TODO: test nested models
22
+ class Response::Nested < Response; end
23
+
24
+ uses_mocha 'polymorphic URL helpers' do
25
+ class PolymorphicRoutesTest < Test::Unit::TestCase
26
+
27
+ include ActionController::PolymorphicRoutes
28
+
29
+ def setup
30
+ @article = Article.new
31
+ @response = Response.new
32
+ end
33
+
34
+ def test_with_record
35
+ @article.save
36
+ expects(:article_url).with(@article)
37
+ polymorphic_url(@article)
38
+ end
39
+
40
+ def test_with_new_record
41
+ expects(:articles_url).with()
42
+ @article.expects(:new_record?).returns(true)
43
+ polymorphic_url(@article)
44
+ end
45
+
46
+ def test_with_record_and_action
47
+ expects(:new_article_url).with()
48
+ @article.expects(:new_record?).never
49
+ polymorphic_url(@article, :action => 'new')
50
+ end
51
+
52
+ def test_url_helper_prefixed_with_new
53
+ expects(:new_article_url).with()
54
+ new_polymorphic_url(@article)
55
+ end
56
+
57
+ def test_url_helper_prefixed_with_edit
58
+ @article.save
59
+ expects(:edit_article_url).with(@article)
60
+ edit_polymorphic_url(@article)
61
+ end
62
+
63
+ def test_formatted_url_helper
64
+ expects(:formatted_article_url).with(@article, :pdf)
65
+ formatted_polymorphic_url([@article, :pdf])
66
+ end
67
+
68
+ def test_format_option
69
+ @article.save
70
+ expects(:article_url).with(@article, :pdf)
71
+ polymorphic_url(@article, :format => :pdf)
72
+ end
73
+
74
+ def test_id_and_format_option
75
+ @article.save
76
+ expects(:article_url).with(:id => @article, :format => :pdf)
77
+ polymorphic_url(:id => @article, :format => :pdf)
78
+ end
79
+
80
+ def test_with_nested
81
+ @response.save
82
+ expects(:article_response_url).with(@article, @response)
83
+ polymorphic_url([@article, @response])
84
+ end
85
+
86
+ def test_with_nested_unsaved
87
+ expects(:article_responses_url).with(@article)
88
+ polymorphic_url([@article, @response])
89
+ end
90
+
91
+ def test_new_with_array_and_namespace
92
+ expects(:new_admin_article_url).with()
93
+ polymorphic_url([:admin, @article], :action => 'new')
94
+ end
95
+
96
+ def test_unsaved_with_array_and_namespace
97
+ expects(:admin_articles_url).with()
98
+ polymorphic_url([:admin, @article])
99
+ end
100
+
101
+ def test_nested_unsaved_with_array_and_namespace
102
+ @article.save
103
+ expects(:admin_article_url).with(@article)
104
+ polymorphic_url([:admin, @article])
105
+ expects(:admin_article_responses_url).with(@article)
106
+ polymorphic_url([:admin, @article, @response])
107
+ end
108
+
109
+ def test_nested_with_array_and_namespace
110
+ @response.save
111
+ expects(:admin_article_response_url).with(@article, @response)
112
+ polymorphic_url([:admin, @article, @response])
113
+
114
+ # a ridiculously long named route tests correct ordering of namespaces and nesting:
115
+ @tag = Tag.new
116
+ @tag.save
117
+ expects(:site_admin_article_response_tag_url).with(@article, @response, @tag)
118
+ polymorphic_url([:site, :admin, @article, @response, @tag])
119
+ end
120
+
121
+ def test_nesting_with_array_ending_in_singleton_resource
122
+ expects(:article_response_url).with(@article)
123
+ polymorphic_url([@article, :response])
124
+ end
125
+
126
+ def test_nesting_with_array_containing_singleton_resource
127
+ @tag = Tag.new
128
+ @tag.save
129
+ expects(:article_response_tag_url).with(@article, @tag)
130
+ polymorphic_url([@article, :response, @tag])
131
+ end
132
+
133
+ def test_nesting_with_array_containing_namespace_and_singleton_resource
134
+ @tag = Tag.new
135
+ @tag.save
136
+ expects(:admin_article_response_tag_url).with(@article, @tag)
137
+ polymorphic_url([:admin, @article, :response, @tag])
138
+ end
139
+
140
+ def test_nesting_with_array_containing_singleton_resource_and_format
141
+ @tag = Tag.new
142
+ @tag.save
143
+ expects(:formatted_article_response_tag_url).with(@article, @tag, :pdf)
144
+ formatted_polymorphic_url([@article, :response, @tag, :pdf])
145
+ end
146
+
147
+ def test_nesting_with_array_containing_singleton_resource_and_format_option
148
+ @tag = Tag.new
149
+ @tag.save
150
+ expects(:article_response_tag_url).with(@article, @tag, :pdf)
151
+ polymorphic_url([@article, :response, @tag], :format => :pdf)
152
+ end
153
+
154
+ # TODO: Needs to be updated to correctly know about whether the object is in a hash or not
155
+ def xtest_with_hash
156
+ expects(:article_url).with(@article)
157
+ @article.save
158
+ polymorphic_url(:id => @article)
159
+ end
160
+
161
+ def test_polymorphic_path_accepts_options
162
+ expects(:new_article_path).with()
163
+ polymorphic_path(@article, :action => :new)
164
+ end
165
+
166
+ def test_polymorphic_path_does_not_modify_arguments
167
+ expects(:admin_article_responses_url).with(@article)
168
+ path = [:admin, @article, @response]
169
+ assert_no_difference 'path.size' do
170
+ polymorphic_url(path)
171
+ end
172
+ end
173
+ end
174
+ end
@@ -0,0 +1,139 @@
1
+ require 'abstract_unit'
2
+
3
+ class Comment
4
+ attr_reader :id
5
+ def save; @id = 1 end
6
+ def new_record?; @id.nil? end
7
+ def name
8
+ @id.nil? ? 'new comment' : "comment ##{@id}"
9
+ end
10
+ end
11
+
12
+ class Comment::Nested < Comment; end
13
+
14
+ class Test::Unit::TestCase
15
+ protected
16
+ def comments_url
17
+ 'http://www.example.com/comments'
18
+ end
19
+
20
+ def comment_url(comment)
21
+ "http://www.example.com/comments/#{comment.id}"
22
+ end
23
+ end
24
+
25
+
26
+ class RecordIdentifierTest < Test::Unit::TestCase
27
+ include ActionController::RecordIdentifier
28
+
29
+ def setup
30
+ @klass = Comment
31
+ @record = @klass.new
32
+ @singular = 'comment'
33
+ @plural = 'comments'
34
+ end
35
+
36
+ def test_dom_id_with_new_record
37
+ assert_equal "new_#{@singular}", dom_id(@record)
38
+ end
39
+
40
+ def test_dom_id_with_new_record_and_prefix
41
+ assert_equal "custom_prefix_#{@singular}", dom_id(@record, :custom_prefix)
42
+ end
43
+
44
+ def test_dom_id_with_saved_record
45
+ @record.save
46
+ assert_equal "#{@singular}_1", dom_id(@record)
47
+ end
48
+
49
+ def test_dom_id_with_prefix
50
+ @record.save
51
+ assert_equal "edit_#{@singular}_1", dom_id(@record, :edit)
52
+ end
53
+
54
+ def test_partial_path
55
+ expected = "#{@plural}/#{@singular}"
56
+ assert_equal expected, partial_path(@record)
57
+ assert_equal expected, partial_path(Comment)
58
+ end
59
+
60
+ def test_partial_path_with_namespaced_controller_path
61
+ expected = "admin/#{@plural}/#{@singular}"
62
+ assert_equal expected, partial_path(@record, "admin/posts")
63
+ assert_equal expected, partial_path(@klass, "admin/posts")
64
+ end
65
+
66
+ def test_partial_path_with_not_namespaced_controller_path
67
+ expected = "#{@plural}/#{@singular}"
68
+ assert_equal expected, partial_path(@record, "posts")
69
+ assert_equal expected, partial_path(@klass, "posts")
70
+ end
71
+
72
+ def test_dom_class
73
+ assert_equal @singular, dom_class(@record)
74
+ end
75
+
76
+ def test_dom_class_with_prefix
77
+ assert_equal "custom_prefix_#{@singular}", dom_class(@record, :custom_prefix)
78
+ end
79
+
80
+ def test_singular_class_name
81
+ assert_equal @singular, singular_class_name(@record)
82
+ end
83
+
84
+ def test_singular_class_name_for_class
85
+ assert_equal @singular, singular_class_name(@klass)
86
+ end
87
+
88
+ def test_plural_class_name
89
+ assert_equal @plural, plural_class_name(@record)
90
+ end
91
+
92
+ def test_plural_class_name_for_class
93
+ assert_equal @plural, plural_class_name(@klass)
94
+ end
95
+
96
+ private
97
+ def method_missing(method, *args)
98
+ RecordIdentifier.send(method, *args)
99
+ end
100
+ end
101
+
102
+ class NestedRecordIdentifierTest < RecordIdentifierTest
103
+ def setup
104
+ @klass = Comment::Nested
105
+ @record = @klass.new
106
+ @singular = 'comment_nested'
107
+ @plural = 'comment_nesteds'
108
+ end
109
+
110
+ def test_partial_path
111
+ expected = "comment/nesteds/nested"
112
+ assert_equal expected, partial_path(@record)
113
+ assert_equal expected, partial_path(Comment::Nested)
114
+ end
115
+
116
+ def test_partial_path_with_namespaced_controller_path
117
+ expected = "admin/comment/nesteds/nested"
118
+ assert_equal expected, partial_path(@record, "admin/posts")
119
+ assert_equal expected, partial_path(@klass, "admin/posts")
120
+ end
121
+
122
+ def test_partial_path_with_deeper_namespaced_controller_path
123
+ expected = "deeper/admin/comment/nesteds/nested"
124
+ assert_equal expected, partial_path(@record, "deeper/admin/posts")
125
+ assert_equal expected, partial_path(@klass, "deeper/admin/posts")
126
+ end
127
+
128
+ def test_partial_path_with_even_deeper_namespaced_controller_path
129
+ expected = "even/more/deeper/admin/comment/nesteds/nested"
130
+ assert_equal expected, partial_path(@record, "even/more/deeper/admin/posts")
131
+ assert_equal expected, partial_path(@klass, "even/more/deeper/admin/posts")
132
+ end
133
+
134
+ def test_partial_path_with_not_namespaced_controller_path
135
+ expected = "comment/nesteds/nested"
136
+ assert_equal expected, partial_path(@record, "posts")
137
+ assert_equal expected, partial_path(@klass, "posts")
138
+ end
139
+ end
@@ -0,0 +1,289 @@
1
+ require 'abstract_unit'
2
+
3
+ class WorkshopsController < ActionController::Base
4
+ end
5
+
6
+ class Workshop
7
+ attr_accessor :id, :new_record
8
+
9
+ def initialize(id, new_record)
10
+ @id, @new_record = id, new_record
11
+ end
12
+
13
+ def new_record?
14
+ @new_record
15
+ end
16
+
17
+ def to_s
18
+ id.to_s
19
+ end
20
+ end
21
+
22
+ class RedirectController < ActionController::Base
23
+ def simple_redirect
24
+ redirect_to :action => "hello_world"
25
+ end
26
+
27
+ def redirect_with_status
28
+ redirect_to({:action => "hello_world", :status => 301})
29
+ end
30
+
31
+ def redirect_with_status_hash
32
+ redirect_to({:action => "hello_world"}, {:status => 301})
33
+ end
34
+
35
+ def url_redirect_with_status
36
+ redirect_to("http://www.example.com", :status => :moved_permanently)
37
+ end
38
+
39
+ def url_redirect_with_status_hash
40
+ redirect_to("http://www.example.com", {:status => 301})
41
+ end
42
+
43
+ def relative_url_redirect_with_status
44
+ redirect_to("/things/stuff", :status => :found)
45
+ end
46
+
47
+ def relative_url_redirect_with_status_hash
48
+ redirect_to("/things/stuff", {:status => 301})
49
+ end
50
+
51
+ def redirect_to_back_with_status
52
+ redirect_to :back, :status => 307
53
+ end
54
+
55
+ def host_redirect
56
+ redirect_to :action => "other_host", :only_path => false, :host => 'other.test.host'
57
+ end
58
+
59
+ def module_redirect
60
+ redirect_to :controller => 'module_test/module_redirect', :action => "hello_world"
61
+ end
62
+
63
+ def redirect_with_assigns
64
+ @hello = "world"
65
+ redirect_to :action => "hello_world"
66
+ end
67
+
68
+ def redirect_to_url
69
+ redirect_to "http://www.rubyonrails.org/"
70
+ end
71
+
72
+ def redirect_to_url_with_unescaped_query_string
73
+ redirect_to "http://dev.rubyonrails.org/query?status=new"
74
+ end
75
+
76
+ def redirect_to_back
77
+ redirect_to :back
78
+ end
79
+
80
+ def redirect_to_existing_record
81
+ redirect_to Workshop.new(5, false)
82
+ end
83
+
84
+ def redirect_to_new_record
85
+ redirect_to Workshop.new(5, true)
86
+ end
87
+
88
+ def redirect_to_nil
89
+ redirect_to nil
90
+ end
91
+
92
+ def rescue_errors(e) raise e end
93
+
94
+ def rescue_action(e) raise end
95
+
96
+ protected
97
+ def dashbord_url(id, message)
98
+ url_for :action => "dashboard", :params => { "id" => id, "message" => message }
99
+ end
100
+ end
101
+
102
+ class RedirectTest < Test::Unit::TestCase
103
+ def setup
104
+ @controller = RedirectController.new
105
+ @request = ActionController::TestRequest.new
106
+ @response = ActionController::TestResponse.new
107
+ end
108
+
109
+ def test_simple_redirect
110
+ get :simple_redirect
111
+ assert_response :redirect
112
+ assert_equal "http://test.host/redirect/hello_world", redirect_to_url
113
+ end
114
+
115
+ def test_redirect_with_no_status
116
+ get :simple_redirect
117
+ assert_response 302
118
+ assert_equal "http://test.host/redirect/hello_world", redirect_to_url
119
+ end
120
+
121
+ def test_redirect_with_status
122
+ get :redirect_with_status
123
+ assert_response 301
124
+ assert_equal "http://test.host/redirect/hello_world", redirect_to_url
125
+ end
126
+
127
+ def test_redirect_with_status_hash
128
+ get :redirect_with_status_hash
129
+ assert_response 301
130
+ assert_equal "http://test.host/redirect/hello_world", redirect_to_url
131
+ end
132
+
133
+ def test_url_redirect_with_status
134
+ get :url_redirect_with_status
135
+ assert_response 301
136
+ assert_equal "http://www.example.com", redirect_to_url
137
+ end
138
+
139
+ def test_url_redirect_with_status_hash
140
+ get :url_redirect_with_status_hash
141
+ assert_response 301
142
+ assert_equal "http://www.example.com", redirect_to_url
143
+ end
144
+
145
+
146
+ def test_relative_url_redirect_with_status
147
+ get :relative_url_redirect_with_status
148
+ assert_response 302
149
+ assert_equal "http://test.host/things/stuff", redirect_to_url
150
+ end
151
+
152
+ def test_relative_url_redirect_with_status_hash
153
+ get :relative_url_redirect_with_status_hash
154
+ assert_response 301
155
+ assert_equal "http://test.host/things/stuff", redirect_to_url
156
+ end
157
+
158
+ def test_redirect_to_back_with_status
159
+ @request.env["HTTP_REFERER"] = "http://www.example.com/coming/from"
160
+ get :redirect_to_back_with_status
161
+ assert_response 307
162
+ assert_equal "http://www.example.com/coming/from", redirect_to_url
163
+ end
164
+
165
+ def test_simple_redirect_using_options
166
+ get :host_redirect
167
+ assert_response :redirect
168
+ assert_redirected_to :action => "other_host", :only_path => false, :host => 'other.test.host'
169
+ end
170
+
171
+ def test_redirect_error_with_pretty_diff
172
+ get :host_redirect
173
+ assert_response :redirect
174
+ begin
175
+ assert_redirected_to :action => "other_host", :only_path => true
176
+ rescue Test::Unit::AssertionFailedError => err
177
+ expected_msg, redirection_msg, diff_msg = err.message.scan(/<\{[^\}]+\}>/).collect { |s| s[2..-3] }
178
+ assert_match %r("only_path"=>false), redirection_msg
179
+ assert_match %r("host"=>"other.test.host"), redirection_msg
180
+ assert_match %r("action"=>"other_host"), redirection_msg
181
+ assert_match %r("only_path"=>false), diff_msg
182
+ assert_match %r("host"=>"other.test.host"), diff_msg
183
+ end
184
+ end
185
+
186
+ def test_module_redirect
187
+ get :module_redirect
188
+ assert_response :redirect
189
+ assert_redirected_to "http://test.host/module_test/module_redirect/hello_world"
190
+ end
191
+
192
+ def test_module_redirect_using_options
193
+ get :module_redirect
194
+ assert_response :redirect
195
+ assert_redirected_to :controller => 'module_test/module_redirect', :action => 'hello_world'
196
+ end
197
+
198
+ def test_redirect_with_assigns
199
+ get :redirect_with_assigns
200
+ assert_response :redirect
201
+ assert_equal "world", assigns["hello"]
202
+ end
203
+
204
+ def test_redirect_to_url
205
+ get :redirect_to_url
206
+ assert_response :redirect
207
+ assert_redirected_to "http://www.rubyonrails.org/"
208
+ end
209
+
210
+ def test_redirect_to_url_with_unescaped_query_string
211
+ get :redirect_to_url_with_unescaped_query_string
212
+ assert_response :redirect
213
+ assert_redirected_to "http://dev.rubyonrails.org/query?status=new"
214
+ end
215
+
216
+ def test_redirect_to_back
217
+ @request.env["HTTP_REFERER"] = "http://www.example.com/coming/from"
218
+ get :redirect_to_back
219
+ assert_response :redirect
220
+ assert_equal "http://www.example.com/coming/from", redirect_to_url
221
+ end
222
+
223
+ def test_redirect_to_back_with_no_referer
224
+ assert_raises(ActionController::RedirectBackError) {
225
+ @request.env["HTTP_REFERER"] = nil
226
+ get :redirect_to_back
227
+ }
228
+ end
229
+
230
+ def test_redirect_to_record
231
+ ActionController::Routing::Routes.draw do |map|
232
+ map.resources :workshops
233
+ map.connect ':controller/:action/:id'
234
+ end
235
+
236
+ get :redirect_to_existing_record
237
+ assert_equal "http://test.host/workshops/5", redirect_to_url
238
+
239
+ get :redirect_to_new_record
240
+ assert_equal "http://test.host/workshops", redirect_to_url
241
+ end
242
+
243
+ def test_redirect_to_nil
244
+ assert_raises(ActionController::ActionControllerError) do
245
+ get :redirect_to_nil
246
+ end
247
+ end
248
+
249
+ end
250
+
251
+ module ModuleTest
252
+ class ModuleRedirectController < ::RedirectController
253
+ def module_redirect
254
+ redirect_to :controller => '/redirect', :action => "hello_world"
255
+ end
256
+ end
257
+
258
+ class ModuleRedirectTest < Test::Unit::TestCase
259
+ def setup
260
+ @controller = ModuleRedirectController.new
261
+ @request = ActionController::TestRequest.new
262
+ @response = ActionController::TestResponse.new
263
+ end
264
+
265
+ def test_simple_redirect
266
+ get :simple_redirect
267
+ assert_response :redirect
268
+ assert_equal "http://test.host/module_test/module_redirect/hello_world", redirect_to_url
269
+ end
270
+
271
+ def test_simple_redirect_using_options
272
+ get :host_redirect
273
+ assert_response :redirect
274
+ assert_redirected_to :action => "other_host", :only_path => false, :host => 'other.test.host'
275
+ end
276
+
277
+ def test_module_redirect
278
+ get :module_redirect
279
+ assert_response :redirect
280
+ assert_equal "http://test.host/redirect/hello_world", redirect_to_url
281
+ end
282
+
283
+ def test_module_redirect_using_options
284
+ get :module_redirect
285
+ assert_response :redirect
286
+ assert_redirected_to :controller => 'redirect', :action => "hello_world"
287
+ end
288
+ end
289
+ end