aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack/test
diff options
context:
space:
mode:
authorRafael Mendonça França <rafaelmfranca@gmail.com>2012-08-09 19:12:43 -0300
committerRafael Mendonça França <rafaelmfranca@gmail.com>2012-08-13 21:41:53 -0300
commit0dd24728a088fcb4ae616bb5d62734aca5276b1b (patch)
tree9937a33c73190d47191705a8d5a8978062d790ff /actionpack/test
parentfa736e69a197522ae3af3d3e6394cdc1eb1da228 (diff)
downloadrails-0dd24728a088fcb4ae616bb5d62734aca5276b1b.tar.gz
rails-0dd24728a088fcb4ae616bb5d62734aca5276b1b.tar.bz2
rails-0dd24728a088fcb4ae616bb5d62734aca5276b1b.zip
Implementing Routing Concerns
This pattern was introduced as a plugin by @dhh. The original implementation can be found in https://github.com/rails/routing_concerns
Diffstat (limited to 'actionpack/test')
-rw-r--r--actionpack/test/dispatch/routing/concerns_test.rb94
1 files changed, 94 insertions, 0 deletions
diff --git a/actionpack/test/dispatch/routing/concerns_test.rb b/actionpack/test/dispatch/routing/concerns_test.rb
new file mode 100644
index 0000000000..ab4ad6b72e
--- /dev/null
+++ b/actionpack/test/dispatch/routing/concerns_test.rb
@@ -0,0 +1,94 @@
+require 'abstract_unit'
+
+class CommentsController < ActionController::Base
+ def index
+ head :ok
+ end
+end
+
+class ImageAttachmentsController < ActionController::Base
+ def index
+ head :ok
+ end
+end
+
+class RoutingConcernsTest < ActionDispatch::IntegrationTest
+ Routes = ActionDispatch::Routing::RouteSet.new.tap do |app|
+ app.draw do
+ concern :commentable do
+ resources :comments
+ end
+
+ concern :image_attachable do
+ resources :image_attachments, only: :index
+ end
+
+ resources :posts, concerns: [:commentable, :image_attachable] do
+ resource :video, concerns: :commentable
+ end
+
+ resource :picture, concerns: :commentable do
+ resources :posts, concerns: :commentable
+ end
+
+ scope "/videos" do
+ concerns :commentable
+ end
+ end
+ end
+
+ include Routes.url_helpers
+ def app; Routes end
+
+ def test_accessing_concern_from_resources
+ get "/posts/1/comments"
+ assert_equal "200", @response.code
+ assert_equal "/posts/1/comments", post_comments_path(post_id: 1)
+ end
+
+ def test_accessing_concern_from_resource
+ get "/picture/comments"
+ assert_equal "200", @response.code
+ assert_equal "/picture/comments", picture_comments_path
+ end
+
+ def test_accessing_concern_from_nested_resource
+ get "/posts/1/video/comments"
+ assert_equal "200", @response.code
+ assert_equal "/posts/1/video/comments", post_video_comments_path(post_id: 1)
+ end
+
+ def test_accessing_concern_from_nested_resources
+ get "/picture/posts/1/comments"
+ assert_equal "200", @response.code
+ assert_equal "/picture/posts/1/comments", picture_post_comments_path(post_id: 1)
+ end
+
+ def test_accessing_concern_from_resources_with_more_than_one_concern
+ get "/posts/1/image_attachments"
+ assert_equal "200", @response.code
+ assert_equal "/posts/1/image_attachments", post_image_attachments_path(post_id: 1)
+ end
+
+ def test_accessing_concern_from_resources_using_only_option
+ get "/posts/1/image_attachment/1"
+ assert_equal "404", @response.code
+ end
+
+ def test_accessing_concern_from_a_scope
+ get "/videos/comments"
+ assert_equal "200", @response.code
+ end
+
+ def test_with_an_invalid_concern_name
+ e = assert_raise ArgumentError do
+ ActionDispatch::Routing::RouteSet.new.tap do |app|
+ app.draw do
+ resources :posts, concerns: :foo
+ end
+ end
+ end
+
+ assert_equal "No concern named foo was found!", e.message
+ end
+end