aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack/test
diff options
context:
space:
mode:
authorDavid Heinemeier Hansson <david@loudthinking.com>2006-07-31 18:59:58 +0000
committerDavid Heinemeier Hansson <david@loudthinking.com>2006-07-31 18:59:58 +0000
commit865b175765edf6138deb6f10ae3280ddea4cc7fd (patch)
tree240d292136fbd7dc82b3e3652e58ff870f9668f1 /actionpack/test
parentffaecb792e8f23efba513ffd8655f7832ba67b89 (diff)
downloadrails-865b175765edf6138deb6f10ae3280ddea4cc7fd.tar.gz
rails-865b175765edf6138deb6f10ae3280ddea4cc7fd.tar.bz2
rails-865b175765edf6138deb6f10ae3280ddea4cc7fd.zip
Added map.resources from the Simply Restful plugin (backwards incompatible with the plugin!) [DHH]
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@4637 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
Diffstat (limited to 'actionpack/test')
-rw-r--r--actionpack/test/controller/resources_test.rb109
1 files changed, 109 insertions, 0 deletions
diff --git a/actionpack/test/controller/resources_test.rb b/actionpack/test/controller/resources_test.rb
new file mode 100644
index 0000000000..ff90f8d742
--- /dev/null
+++ b/actionpack/test/controller/resources_test.rb
@@ -0,0 +1,109 @@
+require File.dirname(__FILE__) + '/../abstract_unit'
+
+class MessagesController < ActionController::Base
+ def rescue_action(e) raise e end
+end
+
+class CommentsController < ActionController::Base
+ def rescue_action(e) raise e end
+end
+
+class ResourcesTest < Test::Unit::TestCase
+ def test_default_restful_routes
+ with_restful_routing :messages do
+ assert_restful_routes_for :messages do
+ routing_options = {:controller => '/messages'}
+ end
+ end
+ end
+
+ def test_with_path_prefix
+ with_restful_routing :messages, :path_prefix => '/thread/:thread_id' do
+ assert_restful_routes_for :messages, :path_prefix => 'thread/5/', :options => { :thread_id => '5' }
+ end
+ end
+
+ def test_with_collection_action
+ with_restful_routing :messages, :collection => { :rss => :get } do
+ assert_restful_routes_for :messages do |options|
+ assert_routing "/messages;rss", options.merge(:action => 'rss')
+ end
+ end
+ end
+
+ def test_with_member_action
+ [:put, :post].each do |method|
+ with_restful_routing :messages, :member => { :mark => method } do
+ assert_restful_routes_for :messages do |options|
+ assert_recognizes(
+ options.merge(:action => 'mark', :id => '1'),
+ {:path => "/messages/1;mark", :method => method})
+ end
+ end
+ end
+ end
+
+ def test_with_new_action
+ with_restful_routing :messages, :new => { :preview => :post } do
+ assert_restful_routes_for :messages do |options|
+ assert_recognizes(
+ options.merge(:action => 'preview'),
+ {:path => "/messages/new;preview", :method => :post})
+ end
+ end
+ end
+
+ def xtest_nested_restful_routes
+ with_routing do |set|
+ set.draw do |map|
+ map.resources(:messages) do
+ map.resources(:comments)
+ end
+ end
+
+ with_options({ :controller => :comments }) do |controller|
+ controller.assert_routing "/messages/1/comments", :action => 'index'
+ controller.assert_routing "/messages/1/comments.xml" , :action => 'index', :format => 'xml'
+ controller.assert_routing "/messages/1/comments/new", :action => 'new'
+ controller.assert_routing "/messages/1/comments/1", :action => 'show', :id => '1'
+ controller.assert_routing "/messages/1/comments/1;edit", :action => 'edit', :id => '1'
+ controller.assert_routing "/messages/1/comments/1.xml", :action => 'show', :id => '1', :format => 'xml'
+ end
+ end
+ end
+
+ protected
+ def with_restful_routing(resource, *args)
+ with_routing do |set|
+ set.draw { |map| map.resources(resource, *args) }
+ yield
+ end
+ end
+
+ def assert_restful_routes_for(controller_name, options = {})
+ (options[:options] ||= {})[:controller] = controller_name.to_s
+
+ with_options(options[:options]) do |controller|
+ controller.assert_routing "/#{options[:path_prefix]}#{controller_name}", :action => 'index'
+ controller.assert_routing "/#{options[:path_prefix]}#{controller_name}.xml" , :action => 'index', :format => 'xml'
+ controller.assert_routing "/#{options[:path_prefix]}#{controller_name}/new", :action => 'new'
+ controller.assert_routing "/#{options[:path_prefix]}#{controller_name}/1", :action => 'show', :id => '1'
+ controller.assert_routing "/#{options[:path_prefix]}#{controller_name}/1;edit", :action => 'edit', :id => '1'
+ controller.assert_routing "/#{options[:path_prefix]}#{controller_name}/1.xml", :action => 'show', :id => '1', :format => 'xml'
+ end
+
+ assert_recognizes(
+ options[:options].merge(:action => 'create'),
+ {:path => "/#{options[:path_prefix]}#{controller_name}", :method => :post})
+
+ assert_recognizes(
+ options[:options].merge(:action => 'update', :id => '1'),
+ {:path => "/#{options[:path_prefix]}#{controller_name}/1", :method => :put})
+
+ assert_recognizes(
+ options[:options].merge(:action => 'destroy', :id => '1'),
+ {:path => "/#{options[:path_prefix]}#{controller_name}/1", :method => :delete})
+
+ yield options[:options] if block_given?
+ end
+end