mirror of
https://github.com/github/rails.git
synced 2026-04-26 03:00:59 -04:00
Refactored url_for in AV to have its own instances of the helpers instead of proxying back to the controller. This potentially allows for more standalone usage of AV. It also kicked up a lot of dust in the tests, which were mocking out controllers to get this behavior. By moving it to the view, it made a lot of the tests more standalone (a win)
This commit is contained in:
@@ -168,6 +168,8 @@ module ActionView #:nodoc:
|
||||
remove_method :helpers
|
||||
attr_reader :helpers
|
||||
|
||||
class_attribute :_router
|
||||
|
||||
class << self
|
||||
delegate :erb_trim_mode=, :to => 'ActionView::Template::Handlers::ERB'
|
||||
delegate :logger, :to => 'ActionController::Base', :allow_nil => true
|
||||
@@ -204,7 +206,10 @@ module ActionView #:nodoc:
|
||||
@assigns = assigns_for_first_render.each { |key, value| instance_variable_set("@#{key}", value) }
|
||||
@helpers = self.class.helpers || Module.new
|
||||
|
||||
@_controller = controller
|
||||
if @_controller = controller
|
||||
@_request = controller.request if controller.respond_to?(:request)
|
||||
end
|
||||
|
||||
@_config = ActiveSupport::InheritableOptions.new(controller.config) if controller && controller.respond_to?(:config)
|
||||
@_content_for = Hash.new { |h,k| h[k] = ActiveSupport::SafeBuffer.new }
|
||||
@_virtual_path = nil
|
||||
|
||||
@@ -29,16 +29,13 @@ module ActionView #:nodoc:
|
||||
autoload :TranslationHelper
|
||||
autoload :UrlHelper
|
||||
|
||||
def self.included(base)
|
||||
base.extend(ClassMethods)
|
||||
end
|
||||
extend ActiveSupport::Concern
|
||||
|
||||
module ClassMethods
|
||||
include SanitizeHelper::ClassMethods
|
||||
included do
|
||||
extend SanitizeHelper::ClassMethods
|
||||
end
|
||||
|
||||
include ActiveSupport::Benchmarkable
|
||||
|
||||
include ActiveModelHelper
|
||||
include AssetTagHelper
|
||||
include AtomFeedHelper
|
||||
|
||||
@@ -96,6 +96,7 @@ module ActionView
|
||||
extend ActiveSupport::Concern
|
||||
|
||||
include FormTagHelper
|
||||
include UrlHelper
|
||||
|
||||
# Creates a form and a scope around a specific model object that is used
|
||||
# as a base for questioning about values for the fields.
|
||||
|
||||
@@ -13,14 +13,15 @@ module ActionView
|
||||
extend ActiveSupport::Concern
|
||||
|
||||
include ActionDispatch::Routing::UrlFor
|
||||
include JavaScriptHelper
|
||||
include TagHelper
|
||||
|
||||
# Need to map default url options to controller one.
|
||||
def default_url_options(*args) #:nodoc:
|
||||
controller.send(:default_url_options, *args)
|
||||
end
|
||||
|
||||
# def default_url_options(*args) #:nodoc:
|
||||
# controller.send(:default_url_options, *args)
|
||||
# end
|
||||
#
|
||||
def url_options
|
||||
return super unless controller.respond_to?(:url_options)
|
||||
controller.url_options
|
||||
end
|
||||
|
||||
@@ -97,7 +98,7 @@ module ActionView
|
||||
when Hash
|
||||
options = { :only_path => options[:host].nil? }.update(options.symbolize_keys)
|
||||
escape = options.key?(:escape) ? options.delete(:escape) : false
|
||||
controller.send(:url_for, options)
|
||||
super
|
||||
when :back
|
||||
escape = false
|
||||
controller.request.env["HTTP_REFERER"] || 'javascript:history.back()'
|
||||
@@ -119,13 +120,24 @@ module ActionView
|
||||
#
|
||||
# ==== Signatures
|
||||
#
|
||||
# link_to(name, options = {}, html_options = nil)
|
||||
# link_to(options = {}, html_options = nil) do
|
||||
# link_to(body, url, html_options = {})
|
||||
# # url is a String; you can use URL helpers like
|
||||
# # posts_path
|
||||
#
|
||||
# link_to(body, url_options = {}, html_options = {})
|
||||
# # url_options, except :confirm or :method,
|
||||
# # is passed to url_for
|
||||
#
|
||||
# link_to(options = {}, html_options = {}) do
|
||||
# # name
|
||||
# end
|
||||
#
|
||||
# link_to(url, html_options = {}) do
|
||||
# # name
|
||||
# end
|
||||
#
|
||||
# ==== Options
|
||||
# * <tt>:confirm => 'question?'</tt> - This will allow the unobtrusive JavaScript
|
||||
# * <tt>:confirm => 'question?'</tt> - This will allow the unobtrusive JavaScript
|
||||
# driver to prompt with the question specified. If the user accepts, the link is
|
||||
# processed normally, otherwise no action is taken.
|
||||
# * <tt>:method => symbol of HTTP verb</tt> - This modifier will dynamically
|
||||
@@ -138,7 +150,11 @@ module ActionView
|
||||
# disabled clicking the link will have no effect. If you are relying on the
|
||||
# POST behavior, you should check for it in your controller's action by using
|
||||
# the request object's methods for <tt>post?</tt>, <tt>delete?</tt> or <tt>put?</tt>.
|
||||
# * The +html_options+ will accept a hash of html attributes for the link tag.
|
||||
# * <tt>:remote => true</tt> - This will allow the unobtrusive JavaScript
|
||||
# driver to make an Ajax request to the URL in question instead of following
|
||||
# the link. The drivers each provide mechanisms for listening for the
|
||||
# completion of the Ajax request and performing JavaScript operations once
|
||||
# they're complete
|
||||
#
|
||||
# ==== Examples
|
||||
# Because it relies on +url_for+, +link_to+ supports both older-style controller/action/id arguments
|
||||
@@ -220,8 +236,8 @@ module ActionView
|
||||
options = args[1] || {}
|
||||
html_options = args[2]
|
||||
|
||||
url = url_for(options)
|
||||
html_options = convert_options_to_data_attributes(options, html_options)
|
||||
url = url_for(options)
|
||||
|
||||
if html_options
|
||||
html_options = html_options.stringify_keys
|
||||
@@ -259,10 +275,10 @@ module ActionView
|
||||
# There are a few special +html_options+:
|
||||
# * <tt>:method</tt> - Specifies the anchor name to be appended to the path.
|
||||
# * <tt>:disabled</tt> - Specifies the anchor name to be appended to the path.
|
||||
# * <tt>:confirm</tt> - This will use the unobtrusive JavaScript driver to
|
||||
# * <tt>:confirm</tt> - This will use the unobtrusive JavaScript driver to
|
||||
# prompt with the question specified. If the user accepts, the link is
|
||||
# processed normally, otherwise no action is taken.
|
||||
# * <tt>:remote</tt> - If set to true, will allow the Unobtrusive JavaScript drivers to control the
|
||||
# * <tt>:remote</tt> - If set to true, will allow the Unobtrusive JavaScript drivers to control the
|
||||
# submit behaviour. By default this behaviour is an ajax submit.
|
||||
#
|
||||
# ==== Examples
|
||||
@@ -282,7 +298,7 @@ module ActionView
|
||||
# # </form>"
|
||||
#
|
||||
#
|
||||
# <%= button_to('Destroy', 'http://www.example.com', :confirm => 'Are you sure?',
|
||||
# <%= button_to('Destroy', 'http://www.example.com', :confirm => 'Are you sure?',
|
||||
# :method => "delete", :remote => true, :disable_with => 'loading...') %>
|
||||
# # => "<form class='button-to' method='post' action='http://www.example.com' data-remote='true'>
|
||||
# # <div>
|
||||
@@ -546,8 +562,14 @@ module ActionView
|
||||
# current_page?(:controller => 'library', :action => 'checkout')
|
||||
# # => false
|
||||
def current_page?(options)
|
||||
unless request
|
||||
raise "You cannot use helpers that need to determine the current " \
|
||||
"page unless your view context provides a Request object " \
|
||||
"in a #request method"
|
||||
end
|
||||
|
||||
url_string = CGI.unescapeHTML(url_for(options))
|
||||
request = controller.request
|
||||
|
||||
# We ignore any extra parameters in the request_uri if the
|
||||
# submitted url doesn't have any either. This lets the function
|
||||
# work with things like ?order=asc
|
||||
|
||||
@@ -142,8 +142,13 @@ module ActionView
|
||||
end
|
||||
end
|
||||
|
||||
def _router
|
||||
@controller._router if @controller.respond_to?(:_router)
|
||||
end
|
||||
|
||||
def method_missing(selector, *args)
|
||||
if @controller._router.named_routes.helpers.include?(selector)
|
||||
if @controller.respond_to?(:_router) &&
|
||||
@controller._router.named_routes.helpers.include?(selector)
|
||||
@controller.__send__(selector, *args)
|
||||
else
|
||||
super
|
||||
|
||||
@@ -57,6 +57,18 @@ module RackTestUtils
|
||||
extend self
|
||||
end
|
||||
|
||||
module RenderERBUtils
|
||||
def render_erb(string)
|
||||
template = ActionView::Template.new(
|
||||
string.strip,
|
||||
"test template",
|
||||
ActionView::Template::Handlers::ERB,
|
||||
{})
|
||||
|
||||
template.render(self, {}).strip
|
||||
end
|
||||
end
|
||||
|
||||
module SetupOnce
|
||||
extend ActiveSupport::Concern
|
||||
|
||||
@@ -225,6 +237,14 @@ class Rack::TestCase < ActionController::IntegrationTest
|
||||
end
|
||||
end
|
||||
|
||||
class ActionController::Base
|
||||
def self.test_routes(&block)
|
||||
router = ActionDispatch::Routing::RouteSet.new
|
||||
router.draw(&block)
|
||||
include router.url_helpers
|
||||
end
|
||||
end
|
||||
|
||||
class ::ApplicationController < ActionController::Base
|
||||
end
|
||||
|
||||
|
||||
@@ -118,13 +118,12 @@ class ActiveModelHelperTest < ActionView::TestCase
|
||||
setup_user
|
||||
|
||||
@response = ActionController::TestResponse.new
|
||||
end
|
||||
|
||||
@controller = Object.new
|
||||
def @controller.url_for(options)
|
||||
options = options.symbolize_keys
|
||||
def url_for(options)
|
||||
options = options.symbolize_keys
|
||||
|
||||
[options[:action], options[:id].to_param].compact.join('/')
|
||||
end
|
||||
[options[:action], options[:id].to_param].compact.join('/')
|
||||
end
|
||||
|
||||
def test_generic_input_tag
|
||||
|
||||
@@ -34,9 +34,7 @@ class AssetTagHelperTest < ActionView::TestCase
|
||||
)
|
||||
end
|
||||
|
||||
@controller = Class.new(BasicController) do
|
||||
def url_for(*args) "http://www.example.com" end
|
||||
end.new
|
||||
@controller = BasicController.new
|
||||
|
||||
@request = Class.new do
|
||||
def protocol() 'http://' end
|
||||
@@ -49,6 +47,10 @@ class AssetTagHelperTest < ActionView::TestCase
|
||||
ActionView::Helpers::AssetTagHelper::reset_javascript_include_default
|
||||
end
|
||||
|
||||
def url_for(*args)
|
||||
"http://www.example.com"
|
||||
end
|
||||
|
||||
def teardown
|
||||
config.perform_caching = false
|
||||
ENV.delete('RAILS_ASSET_ID')
|
||||
@@ -893,25 +895,19 @@ class AssetTagHelperNonVhostTest < ActionView::TestCase
|
||||
|
||||
def setup
|
||||
super
|
||||
@controller = Class.new(BasicController) do
|
||||
def url_for(options)
|
||||
"http://www.example.com/collaboration/hieraki"
|
||||
end
|
||||
end.new
|
||||
|
||||
@controller = BasicController.new
|
||||
@controller.config.relative_url_root = "/collaboration/hieraki"
|
||||
|
||||
@request = Class.new do
|
||||
def protocol
|
||||
'gopher://'
|
||||
end
|
||||
end.new
|
||||
|
||||
@request = Struct.new(:protocol).new("gopher://")
|
||||
@controller.request = @request
|
||||
|
||||
ActionView::Helpers::AssetTagHelper::reset_javascript_include_default
|
||||
end
|
||||
|
||||
def url_for(options)
|
||||
"http://www.example.com/collaboration/hieraki"
|
||||
end
|
||||
|
||||
def test_should_compute_proper_path
|
||||
assert_dom_equal(%(<link href="http://www.example.com/collaboration/hieraki" rel="alternate" title="RSS" type="application/rss+xml" />), auto_discovery_link_tag)
|
||||
assert_dom_equal(%(/collaboration/hieraki/javascripts/xmlhr.js), javascript_path("xmlhr"))
|
||||
|
||||
@@ -1,20 +1,13 @@
|
||||
module ERBTest
|
||||
class ViewContext
|
||||
mock_controller = Class.new do
|
||||
include SharedTestRoutes.url_helpers
|
||||
end
|
||||
|
||||
include SharedTestRoutes.url_helpers
|
||||
include ActionView::Helpers::TagHelper
|
||||
include ActionView::Helpers::JavaScriptHelper
|
||||
include ActionView::Helpers::FormHelper
|
||||
|
||||
attr_accessor :output_buffer
|
||||
attr_accessor :output_buffer, :controller
|
||||
|
||||
def protect_against_forgery?() false end
|
||||
|
||||
define_method(:controller) do
|
||||
mock_controller.new
|
||||
end
|
||||
end
|
||||
|
||||
class BlockTestCase < ActiveSupport::TestCase
|
||||
|
||||
@@ -63,15 +63,15 @@ class FormHelperTest < ActionView::TestCase
|
||||
@post.body = "Back to the hill and over it again!"
|
||||
@post.secret = 1
|
||||
@post.written_on = Date.new(2004, 6, 15)
|
||||
end
|
||||
|
||||
@controller = Class.new do
|
||||
attr_reader :url_for_options
|
||||
def url_for(options)
|
||||
@url_for_options = options
|
||||
"http://www.example.com"
|
||||
end
|
||||
def url_for(object)
|
||||
@url_for_options = object
|
||||
if object.is_a?(Hash)
|
||||
"http://www.example.com"
|
||||
else
|
||||
super
|
||||
end
|
||||
@controller = @controller.new
|
||||
end
|
||||
|
||||
def test_label
|
||||
@@ -1348,8 +1348,8 @@ class FormHelperTest < ActionView::TestCase
|
||||
def test_form_for_with_hash_url_option
|
||||
form_for(:post, @post, :url => {:controller => 'controller', :action => 'action'}) do |f| end
|
||||
|
||||
assert_equal 'controller', @controller.url_for_options[:controller]
|
||||
assert_equal 'action', @controller.url_for_options[:action]
|
||||
assert_equal 'controller', @url_for_options[:controller]
|
||||
assert_equal 'action', @url_for_options[:action]
|
||||
end
|
||||
|
||||
def test_form_for_with_record_url_option
|
||||
|
||||
@@ -8,11 +8,15 @@ class FormTagHelperTest < ActionView::TestCase
|
||||
|
||||
def setup
|
||||
super
|
||||
@controller = Class.new(BasicController) do
|
||||
def url_for(options)
|
||||
"http://www.example.com"
|
||||
end
|
||||
end.new
|
||||
@controller = BasicController.new
|
||||
end
|
||||
|
||||
def url_for(options)
|
||||
if options.is_a?(Hash)
|
||||
"http://www.example.com"
|
||||
else
|
||||
super
|
||||
end
|
||||
end
|
||||
|
||||
VALID_HTML_ID = /^[A-Za-z][-_:.A-Za-z0-9]*$/ # see http://www.w3.org/TR/html4/types.html#type-name
|
||||
|
||||
@@ -47,19 +47,18 @@ class PrototypeHelperBaseTest < ActionView::TestCase
|
||||
def setup
|
||||
super
|
||||
@template = self
|
||||
@controller = Class.new do
|
||||
def url_for(options)
|
||||
if options.is_a?(String)
|
||||
options
|
||||
else
|
||||
url = "http://www.example.com/"
|
||||
url << options[:action].to_s if options and options[:action]
|
||||
url << "?a=#{options[:a]}" if options && options[:a]
|
||||
url << "&b=#{options[:b]}" if options && options[:a] && options[:b]
|
||||
url
|
||||
end
|
||||
end
|
||||
end.new
|
||||
end
|
||||
|
||||
def url_for(options)
|
||||
if options.is_a?(String)
|
||||
options
|
||||
else
|
||||
url = "http://www.example.com/"
|
||||
url << options[:action].to_s if options and options[:action]
|
||||
url << "?a=#{options[:a]}" if options && options[:a]
|
||||
url << "&b=#{options[:b]}" if options && options[:a] && options[:b]
|
||||
url
|
||||
end
|
||||
end
|
||||
|
||||
protected
|
||||
|
||||
@@ -3,21 +3,16 @@ require 'abstract_unit'
|
||||
class ScriptaculousHelperTest < ActionView::TestCase
|
||||
tests ActionView::Helpers::ScriptaculousHelper
|
||||
|
||||
def setup
|
||||
super
|
||||
@controller = Class.new do
|
||||
def url_for(options)
|
||||
url = "http://www.example.com/"
|
||||
url << options[:action].to_s if options and options[:action]
|
||||
url
|
||||
end
|
||||
end.new
|
||||
def url_for(options)
|
||||
url = "http://www.example.com/"
|
||||
url << options[:action].to_s if options and options[:action]
|
||||
url
|
||||
end
|
||||
|
||||
|
||||
def test_effect
|
||||
assert_equal "new Effect.Highlight(\"posts\",{});", visual_effect(:highlight, "posts")
|
||||
assert_equal "new Effect.Highlight(\"posts\",{});", visual_effect("highlight", :posts)
|
||||
assert_equal "new Effect.Highlight(\"posts\",{});", visual_effect(:highlight, :posts)
|
||||
assert_equal "new Effect.Highlight(\"posts\",{});", visual_effect(:highlight, :posts)
|
||||
assert_equal "new Effect.Fade(\"fademe\",{duration:4.0});", visual_effect(:fade, "fademe", :duration => 4.0)
|
||||
assert_equal "new Effect.Shake(element,{});", visual_effect(:shake)
|
||||
assert_equal "new Effect.DropOut(\"dropme\",{queue:'end'});", visual_effect(:drop_out, 'dropme', :queue => :end)
|
||||
@@ -43,7 +38,7 @@ class ScriptaculousHelperTest < ActionView::TestCase
|
||||
assert ve[2].include?("scope:'test'")
|
||||
assert ve[2].include?("position:'end'")
|
||||
end
|
||||
|
||||
|
||||
def test_toggle_effects
|
||||
assert_equal "Effect.toggle(\"posts\",'appear',{});", visual_effect(:toggle_appear, "posts")
|
||||
assert_equal "Effect.toggle(\"posts\",'slide',{});", visual_effect(:toggle_slide, "posts")
|
||||
@@ -52,26 +47,26 @@ class ScriptaculousHelperTest < ActionView::TestCase
|
||||
assert_equal "Effect.toggle(\"posts\",'slide',{});", visual_effect("toggle_slide", "posts")
|
||||
assert_equal "Effect.toggle(\"posts\",'blind',{});", visual_effect("toggle_blind", "posts")
|
||||
end
|
||||
|
||||
|
||||
|
||||
def test_sortable_element
|
||||
assert_dom_equal %(<script type=\"text/javascript\">\n//<![CDATA[\nSortable.create(\"mylist\", {onUpdate:function(){new Ajax.Request('http://www.example.com/order', {asynchronous:true, evalScripts:true, parameters:Sortable.serialize(\"mylist\")})}})\n//]]>\n</script>),
|
||||
assert_dom_equal %(<script type=\"text/javascript\">\n//<![CDATA[\nSortable.create(\"mylist\", {onUpdate:function(){new Ajax.Request('http://www.example.com/order', {asynchronous:true, evalScripts:true, parameters:Sortable.serialize(\"mylist\")})}})\n//]]>\n</script>),
|
||||
sortable_element("mylist", :url => { :action => "order" })
|
||||
assert_equal %(<script type=\"text/javascript\">\n//<![CDATA[\nSortable.create(\"mylist\", {constraint:'horizontal', onUpdate:function(){new Ajax.Request('http://www.example.com/order', {asynchronous:true, evalScripts:true, parameters:Sortable.serialize(\"mylist\")})}, tag:'div'})\n//]]>\n</script>),
|
||||
assert_equal %(<script type=\"text/javascript\">\n//<![CDATA[\nSortable.create(\"mylist\", {constraint:'horizontal', onUpdate:function(){new Ajax.Request('http://www.example.com/order', {asynchronous:true, evalScripts:true, parameters:Sortable.serialize(\"mylist\")})}, tag:'div'})\n//]]>\n</script>),
|
||||
sortable_element("mylist", :tag => "div", :constraint => "horizontal", :url => { :action => "order" })
|
||||
assert_dom_equal %|<script type=\"text/javascript\">\n//<![CDATA[\nSortable.create(\"mylist\", {constraint:'horizontal', containment:['list1','list2'], onUpdate:function(){new Ajax.Request('http://www.example.com/order', {asynchronous:true, evalScripts:true, parameters:Sortable.serialize(\"mylist\")})}})\n//]]>\n</script>|,
|
||||
assert_dom_equal %|<script type=\"text/javascript\">\n//<![CDATA[\nSortable.create(\"mylist\", {constraint:'horizontal', containment:['list1','list2'], onUpdate:function(){new Ajax.Request('http://www.example.com/order', {asynchronous:true, evalScripts:true, parameters:Sortable.serialize(\"mylist\")})}})\n//]]>\n</script>|,
|
||||
sortable_element("mylist", :containment => ['list1','list2'], :constraint => "horizontal", :url => { :action => "order" })
|
||||
assert_dom_equal %(<script type=\"text/javascript\">\n//<![CDATA[\nSortable.create(\"mylist\", {constraint:'horizontal', containment:'list1', onUpdate:function(){new Ajax.Request('http://www.example.com/order', {asynchronous:true, evalScripts:true, parameters:Sortable.serialize(\"mylist\")})}})\n//]]>\n</script>),
|
||||
assert_dom_equal %(<script type=\"text/javascript\">\n//<![CDATA[\nSortable.create(\"mylist\", {constraint:'horizontal', containment:'list1', onUpdate:function(){new Ajax.Request('http://www.example.com/order', {asynchronous:true, evalScripts:true, parameters:Sortable.serialize(\"mylist\")})}})\n//]]>\n</script>),
|
||||
sortable_element("mylist", :containment => 'list1', :constraint => "horizontal", :url => { :action => "order" })
|
||||
end
|
||||
|
||||
|
||||
def test_draggable_element
|
||||
assert_dom_equal %(<script type=\"text/javascript\">\n//<![CDATA[\nnew Draggable(\"product_13\", {})\n//]]>\n</script>),
|
||||
draggable_element("product_13")
|
||||
assert_equal %(<script type=\"text/javascript\">\n//<![CDATA[\nnew Draggable(\"product_13\", {revert:true})\n//]]>\n</script>),
|
||||
draggable_element("product_13", :revert => true)
|
||||
end
|
||||
|
||||
|
||||
def test_drop_receiving_element
|
||||
assert_dom_equal %(<script type=\"text/javascript\">\n//<![CDATA[\nDroppables.add(\"droptarget1\", {onDrop:function(element){new Ajax.Request('http://www.example.com/', {asynchronous:true, evalScripts:true, parameters:'id=' + encodeURIComponent(element.id)})}})\n//]]>\n</script>),
|
||||
drop_receiving_element("droptarget1")
|
||||
|
||||
@@ -3,58 +3,73 @@ require 'abstract_unit'
|
||||
require 'active_support/ordered_options'
|
||||
require 'controller/fake_controllers'
|
||||
|
||||
class UrlHelperTest < ActionView::TestCase
|
||||
class UrlHelperTest < ActiveSupport::TestCase
|
||||
|
||||
def setup
|
||||
super
|
||||
@controller = Class.new(BasicController) do
|
||||
attr_accessor :url
|
||||
def url_for(options)
|
||||
url
|
||||
end
|
||||
end
|
||||
# In a few cases, the helper proxies to 'controller'
|
||||
# or request.
|
||||
#
|
||||
# In those cases, we'll set up a simple mock
|
||||
attr_accessor :controller, :request
|
||||
|
||||
@controller = @controller.new
|
||||
@request = @controller.request = ActionDispatch::TestRequest.new
|
||||
@controller.url = "http://www.example.com"
|
||||
routes = ActionDispatch::Routing::RouteSet.new
|
||||
routes.draw do
|
||||
match "/" => "foo#bar"
|
||||
match "/other" => "foo#other"
|
||||
end
|
||||
|
||||
include routes.url_helpers
|
||||
|
||||
include ActionView::Helpers::UrlHelper
|
||||
include ActionDispatch::Assertions::DomAssertions
|
||||
include ActionView::Context
|
||||
include RenderERBUtils
|
||||
|
||||
# self.default_url_options = {:host => "www.example.com"}
|
||||
|
||||
# TODO: This shouldn't be needed (see template.rb:53)
|
||||
def assigns
|
||||
{}
|
||||
end
|
||||
|
||||
def abcd(hash = {})
|
||||
hash_for(:a => :b, :c => :d).merge(hash)
|
||||
end
|
||||
|
||||
def hash_for(opts = {})
|
||||
{:controller => "foo", :action => "bar"}.merge(opts)
|
||||
end
|
||||
alias url_hash hash_for
|
||||
|
||||
def test_url_for_escapes_urls
|
||||
@controller.url = "http://www.example.com?a=b&c=d"
|
||||
assert_equal "http://www.example.com?a=b&c=d", url_for(:a => 'b', :c => 'd')
|
||||
assert_equal "http://www.example.com?a=b&c=d", url_for(:a => 'b', :c => 'd', :escape => true)
|
||||
assert_equal "http://www.example.com?a=b&c=d", url_for(:a => 'b', :c => 'd', :escape => false)
|
||||
assert_equal "/?a=b&c=d", url_for(abcd)
|
||||
assert_equal "/?a=b&c=d", url_for(abcd(:escape => true))
|
||||
assert_equal "/?a=b&c=d", url_for(abcd(:escape => false))
|
||||
end
|
||||
|
||||
def test_url_for_escaping_is_safety_aware
|
||||
assert url_for(:a => 'b', :c => 'd', :escape => true).html_safe?, "escaped urls should be html_safe?"
|
||||
assert !url_for(:a => 'b', :c => 'd', :escape => false).html_safe?, "non-escaped urls shouldn't be safe"
|
||||
assert url_for(abcd(:escape => true)).html_safe?, "escaped urls should be html_safe?"
|
||||
assert !url_for(abcd(:escape => false)).html_safe?, "non-escaped urls should not be html_safe?"
|
||||
end
|
||||
|
||||
def test_url_for_escapes_url_once
|
||||
@controller.url = "http://www.example.com?a=b&c=d"
|
||||
assert_equal "http://www.example.com?a=b&c=d", url_for("http://www.example.com?a=b&c=d")
|
||||
assert_equal "/?a=b&c=d", url_for("/?a=b&c=d")
|
||||
end
|
||||
|
||||
def test_url_for_with_back
|
||||
@request.env['HTTP_REFERER'] = 'http://www.example.com/referer'
|
||||
referer = 'http://www.example.com/referer'
|
||||
@controller = Struct.new(:request).new(Struct.new(:env).new({"HTTP_REFERER" => referer}))
|
||||
|
||||
assert_equal 'http://www.example.com/referer', url_for(:back)
|
||||
end
|
||||
|
||||
def test_url_for_with_back_and_no_referer
|
||||
@request.env['HOST_NAME'] = 'www.example.com'
|
||||
@request.env['PATH_INFO'] = '/weblog/show'
|
||||
@controller = Struct.new(:request).new(Struct.new(:env).new({}))
|
||||
assert_equal 'javascript:history.back()', url_for(:back)
|
||||
end
|
||||
|
||||
def test_url_for_from_hash_doesnt_escape_ampersand
|
||||
@controller = TestController.new
|
||||
@view = ActionView::Base.new
|
||||
@view.controller = @controller
|
||||
|
||||
path = @view.url_for(:controller => :cheeses, :foo => :bar, :baz => :quux)
|
||||
|
||||
assert_equal '/cheeses?baz=quux&foo=bar', sort_query_string_params(path)
|
||||
path = url_for(hash_for(:foo => :bar, :baz => :quux))
|
||||
assert_equal '/?baz=quux&foo=bar', sort_query_string_params(path)
|
||||
end
|
||||
|
||||
# todo: missing test cases
|
||||
@@ -118,65 +133,54 @@ class UrlHelperTest < ActionView::TestCase
|
||||
end
|
||||
|
||||
def test_link_tag_without_host_option
|
||||
ActionController::Base.class_eval { attr_accessor :url }
|
||||
url = {:controller => 'weblog', :action => 'show'}
|
||||
@controller = ActionController::Base.new
|
||||
@controller.request = ActionController::TestRequest.new
|
||||
assert_dom_equal(%q{<a href="/weblog/show">Test Link</a>}, link_to('Test Link', url))
|
||||
assert_dom_equal(%q{<a href="/">Test Link</a>}, link_to('Test Link', url_hash))
|
||||
end
|
||||
|
||||
def test_link_tag_with_host_option
|
||||
ActionController::Base.class_eval { attr_accessor :url }
|
||||
url = {:controller => 'weblog', :action => 'show', :host => 'www.example.com'}
|
||||
@controller = ActionController::Base.new
|
||||
@controller.request = ActionController::TestRequest.new
|
||||
assert_dom_equal(%q{<a href="http://www.example.com/weblog/show">Test Link</a>}, link_to('Test Link', url))
|
||||
hash = hash_for(:host => "www.example.com")
|
||||
expected = %q{<a href="http://www.example.com/">Test Link</a>}
|
||||
assert_dom_equal(expected, link_to('Test Link', hash))
|
||||
end
|
||||
|
||||
def test_link_tag_with_query
|
||||
assert_dom_equal "<a href=\"http://www.example.com?q1=v1&q2=v2\">Hello</a>", link_to("Hello", "http://www.example.com?q1=v1&q2=v2")
|
||||
expected = %{<a href="http://www.example.com?q1=v1&q2=v2">Hello</a>}
|
||||
assert_dom_equal expected, link_to("Hello", "http://www.example.com?q1=v1&q2=v2")
|
||||
end
|
||||
|
||||
def test_link_tag_with_query_and_no_name
|
||||
assert_dom_equal "<a href=\"http://www.example.com?q1=v1&q2=v2\">http://www.example.com?q1=v1&q2=v2</a>", link_to(nil, "http://www.example.com?q1=v1&q2=v2")
|
||||
link = link_to(nil, "http://www.example.com?q1=v1&q2=v2")
|
||||
expected = %{<a href="http://www.example.com?q1=v1&q2=v2">http://www.example.com?q1=v1&q2=v2</a>}
|
||||
assert_dom_equal expected, link
|
||||
end
|
||||
|
||||
def test_link_tag_with_back
|
||||
@request.env['HOST_NAME'] = 'www.example.com'
|
||||
@request.env['PATH_INFO'] = '/weblog/show'
|
||||
@request.env['HTTP_REFERER'] = 'http://www.example.com/referer'
|
||||
assert_dom_equal "<a href=\"http://www.example.com/referer\">go back</a>", link_to('go back', :back)
|
||||
env = {"HTTP_REFERER" => "http://www.example.com/referer"}
|
||||
@controller = Struct.new(:request).new(Struct.new(:env).new(env))
|
||||
expected = %{<a href="#{env["HTTP_REFERER"]}">go back</a>}
|
||||
assert_dom_equal expected, link_to('go back', :back)
|
||||
end
|
||||
|
||||
def test_link_tag_with_back_and_no_referer
|
||||
@request.env['HOST_NAME'] = 'www.example.com'
|
||||
@request.env['PATH_INFO'] = '/weblog/show'
|
||||
assert_dom_equal "<a href=\"javascript:history.back()\">go back</a>", link_to('go back', :back)
|
||||
end
|
||||
|
||||
def test_link_tag_with_back
|
||||
@request.env['HOST_NAME'] = 'www.example.com'
|
||||
@request.env['PATH_INFO'] = '/weblog/show'
|
||||
@request.env['HTTP_REFERER'] = 'http://www.example.com/referer'
|
||||
assert_dom_equal "<a href=\"http://www.example.com/referer\">go back</a>", link_to('go back', :back)
|
||||
end
|
||||
|
||||
def test_link_tag_with_back_and_no_referer
|
||||
@request.env['HOST_NAME'] = 'www.example.com'
|
||||
@request.env['PATH_INFO'] = '/weblog/show'
|
||||
assert_dom_equal "<a href=\"javascript:history.back()\">go back</a>", link_to('go back', :back)
|
||||
@controller = Struct.new(:request).new(Struct.new(:env).new({}))
|
||||
link = link_to('go back', :back)
|
||||
assert_dom_equal %{<a href="javascript:history.back()">go back</a>}, link
|
||||
end
|
||||
|
||||
def test_link_tag_with_img
|
||||
assert_dom_equal "<a href=\"http://www.example.com\"><img src='/favicon.jpg' alt=\"Favicon\" /></a>", link_to(image_tag("/favicon.jpg"), "http://www.example.com")
|
||||
link = link_to("<img src='/favicon.jpg' />".html_safe, "/")
|
||||
expected = %{<a href="/"><img src='/favicon.jpg' /></a>}
|
||||
assert_dom_equal expected, link
|
||||
end
|
||||
|
||||
def test_link_with_nil_html_options
|
||||
assert_dom_equal "<a href=\"http://www.example.com\">Hello</a>", link_to("Hello", {:action => 'myaction'}, nil)
|
||||
link = link_to("Hello", url_hash, nil)
|
||||
assert_dom_equal %{<a href="/">Hello</a>}, link
|
||||
end
|
||||
|
||||
def test_link_tag_with_custom_onclick
|
||||
assert_dom_equal "<a href=\"http://www.example.com\" onclick=\"alert('yay!')\">Hello</a>", link_to("Hello", "http://www.example.com", :onclick => "alert('yay!')")
|
||||
link = link_to("Hello", "http://www.example.com", :onclick => "alert('yay!')")
|
||||
expected = %{<a href="http://www.example.com" onclick="alert('yay!')">Hello</a>}
|
||||
assert_dom_equal expected, link
|
||||
end
|
||||
|
||||
def test_link_tag_with_javascript_confirm
|
||||
@@ -238,91 +242,106 @@ class UrlHelperTest < ActionView::TestCase
|
||||
end
|
||||
|
||||
def test_link_tag_using_block_in_erb
|
||||
output_buffer = link_to("http://example.com") { concat("Example site") }
|
||||
assert_equal '<a href="http://example.com">Example site</a>', output_buffer
|
||||
out = render_erb %{<%= link_to('/') do %>Example site<% end %>}
|
||||
assert_equal '<a href="/">Example site</a>', out
|
||||
end
|
||||
|
||||
def test_link_to_unless
|
||||
assert_equal "Showing", link_to_unless(true, "Showing", :action => "show", :controller => "weblog")
|
||||
assert_dom_equal "<a href=\"http://www.example.com\">Listing</a>", link_to_unless(false, "Listing", :action => "list", :controller => "weblog")
|
||||
assert_equal "Showing", link_to_unless(true, "Showing", :action => "show", :controller => "weblog", :id => 1)
|
||||
assert_equal "<strong>Showing</strong>", link_to_unless(true, "Showing", :action => "show", :controller => "weblog", :id => 1) { |name, options, html_options|
|
||||
"<strong>#{name}</strong>"
|
||||
}
|
||||
assert_equal "<strong>Showing</strong>", link_to_unless(true, "Showing", :action => "show", :controller => "weblog", :id => 1) { |name|
|
||||
"<strong>#{name}</strong>"
|
||||
}
|
||||
assert_equal "test", link_to_unless(true, "Showing", :action => "show", :controller => "weblog", :id => 1) {
|
||||
"test"
|
||||
}
|
||||
assert_equal "Showing", link_to_unless(true, "Showing", url_hash)
|
||||
|
||||
assert_dom_equal %{<a href="/">Listing</a>},
|
||||
link_to_unless(false, "Listing", url_hash)
|
||||
|
||||
assert_equal "Showing", link_to_unless(true, "Showing", url_hash)
|
||||
|
||||
assert_equal "<strong>Showing</strong>",
|
||||
link_to_unless(true, "Showing", url_hash) { |name|
|
||||
"<strong>#{name}</strong>"
|
||||
}
|
||||
|
||||
assert_equal "<strong>Showing</strong>",
|
||||
link_to_unless(true, "Showing", url_hash) { |name|
|
||||
"<strong>#{name}</strong>"
|
||||
}
|
||||
|
||||
assert_equal "test",
|
||||
link_to_unless(true, "Showing", url_hash) {
|
||||
"test"
|
||||
}
|
||||
end
|
||||
|
||||
def test_link_to_if
|
||||
assert_equal "Showing", link_to_if(false, "Showing", :action => "show", :controller => "weblog")
|
||||
assert_dom_equal "<a href=\"http://www.example.com\">Listing</a>", link_to_if(true, "Listing", :action => "list", :controller => "weblog")
|
||||
assert_equal "Showing", link_to_if(false, "Showing", :action => "show", :controller => "weblog", :id => 1)
|
||||
assert_equal "Showing", link_to_if(false, "Showing", url_hash)
|
||||
assert_dom_equal %{<a href="/">Listing</a>}, link_to_if(true, "Listing", url_hash)
|
||||
assert_equal "Showing", link_to_if(false, "Showing", url_hash)
|
||||
end
|
||||
|
||||
def request_for_url(url)
|
||||
env = Rack::MockRequest.env_for("http://www.example.com#{url}")
|
||||
ActionDispatch::Request.new(env)
|
||||
end
|
||||
|
||||
def test_current_page_with_simple_url
|
||||
@request.env['HTTP_HOST'] = 'www.example.com'
|
||||
@request.env['PATH_INFO'] = '/weblog/show'
|
||||
@controller.url = "http://www.example.com/weblog/show"
|
||||
assert current_page?({ :action => "show", :controller => "weblog" })
|
||||
assert current_page?("http://www.example.com/weblog/show")
|
||||
@request = request_for_url("/")
|
||||
assert current_page?(url_hash)
|
||||
assert current_page?("http://www.example.com/")
|
||||
end
|
||||
|
||||
def test_current_page_ignoring_params
|
||||
@request.env['HTTP_HOST'] = 'www.example.com'
|
||||
@request.env['PATH_INFO'] = '/weblog/show'
|
||||
@request.env['QUERY_STRING'] = 'order=desc&page=1'
|
||||
@controller.url = "http://www.example.com/weblog/show?order=desc&page=1"
|
||||
assert current_page?({ :action => "show", :controller => "weblog" })
|
||||
assert current_page?("http://www.example.com/weblog/show")
|
||||
@request = request_for_url("/?order=desc&page=1")
|
||||
|
||||
assert current_page?(url_hash)
|
||||
assert current_page?("http://www.example.com/")
|
||||
end
|
||||
|
||||
def test_current_page_with_params_that_match
|
||||
@request.env['HTTP_HOST'] = 'www.example.com'
|
||||
@request.env['PATH_INFO'] = '/weblog/show'
|
||||
@request.env['QUERY_STRING'] = 'order=desc&page=1'
|
||||
@controller.url = "http://www.example.com/weblog/show?order=desc&page=1"
|
||||
assert current_page?({ :action => "show", :controller => "weblog", :order => "desc", :page => "1" })
|
||||
assert current_page?("http://www.example.com/weblog/show?order=desc&page=1")
|
||||
@request = request_for_url("/?order=desc&page=1")
|
||||
|
||||
assert current_page?(hash_for(:order => "desc", :page => "1"))
|
||||
assert current_page?("http://www.example.com/?order=desc&page=1")
|
||||
end
|
||||
|
||||
def test_link_unless_current
|
||||
@request.env['HTTP_HOST'] = 'www.example.com'
|
||||
@request.env['PATH_INFO'] = '/weblog/show'
|
||||
@controller.url = "http://www.example.com/weblog/show"
|
||||
assert_equal "Showing", link_to_unless_current("Showing", { :action => "show", :controller => "weblog" })
|
||||
assert_equal "Showing", link_to_unless_current("Showing", "http://www.example.com/weblog/show")
|
||||
@request = request_for_url("/")
|
||||
|
||||
@request.env['QUERY_STRING'] = 'order=desc'
|
||||
@controller.url = "http://www.example.com/weblog/show"
|
||||
assert_equal "Showing", link_to_unless_current("Showing", { :action => "show", :controller => "weblog" })
|
||||
assert_equal "Showing", link_to_unless_current("Showing", "http://www.example.com/weblog/show")
|
||||
assert_equal "Showing",
|
||||
link_to_unless_current("Showing", url_hash)
|
||||
assert_equal "Showing",
|
||||
link_to_unless_current("Showing", "http://www.example.com/")
|
||||
|
||||
@request.env['QUERY_STRING'] = 'order=desc&page=1'
|
||||
@controller.url = "http://www.example.com/weblog/show?order=desc&page=1"
|
||||
assert_equal "Showing", link_to_unless_current("Showing", { :action => "show", :controller => "weblog", :order=>'desc', :page=>'1' })
|
||||
assert_equal "Showing", link_to_unless_current("Showing", "http://www.example.com/weblog/show?order=desc&page=1")
|
||||
assert_equal "Showing", link_to_unless_current("Showing", "http://www.example.com/weblog/show?order=desc&page=1")
|
||||
@request = request_for_url("/?order=desc")
|
||||
|
||||
@request.env['QUERY_STRING'] = 'order=desc'
|
||||
@controller.url = "http://www.example.com/weblog/show?order=asc"
|
||||
assert_equal "<a href=\"http://www.example.com/weblog/show?order=asc\">Showing</a>", link_to_unless_current("Showing", { :action => "show", :controller => "weblog" })
|
||||
assert_equal "<a href=\"http://www.example.com/weblog/show?order=asc\">Showing</a>", link_to_unless_current("Showing", "http://www.example.com/weblog/show?order=asc")
|
||||
assert_equal "Showing",
|
||||
link_to_unless_current("Showing", url_hash)
|
||||
assert_equal "Showing",
|
||||
link_to_unless_current("Showing", "http://www.example.com/")
|
||||
|
||||
@request.env['QUERY_STRING'] = 'order=desc&page=1'
|
||||
@controller.url = "http://www.example.com/weblog/show?order=desc&page=2"
|
||||
assert_equal "<a href=\"http://www.example.com/weblog/show?order=desc&page=2\">Showing</a>", link_to_unless_current("Showing", { :action => "show", :controller => "weblog" })
|
||||
assert_equal "<a href=\"http://www.example.com/weblog/show?order=desc&page=2\">Showing</a>", link_to_unless_current("Showing", "http://www.example.com/weblog/show?order=desc&page=2")
|
||||
@request = request_for_url("/?order=desc&page=1")
|
||||
|
||||
@request.env['QUERY_STRING'] = ''
|
||||
@controller.url = "http://www.example.com/weblog/list"
|
||||
assert_equal "<a href=\"http://www.example.com/weblog/list\">Listing</a>",
|
||||
link_to_unless_current("Listing", :action => "list", :controller => "weblog")
|
||||
assert_equal "<a href=\"http://www.example.com/weblog/list\">Listing</a>",
|
||||
link_to_unless_current("Listing", "http://www.example.com/weblog/list")
|
||||
assert_equal "Showing",
|
||||
link_to_unless_current("Showing", hash_for(:order=>'desc', :page=>'1'))
|
||||
assert_equal "Showing",
|
||||
link_to_unless_current("Showing", "http://www.example.com/?order=desc&page=1")
|
||||
|
||||
@request = request_for_url("/?order=desc")
|
||||
|
||||
assert_equal %{<a href="/?order=asc">Showing</a>},
|
||||
link_to_unless_current("Showing", hash_for(:order => :asc))
|
||||
assert_equal %{<a href="http://www.example.com/?order=asc">Showing</a>},
|
||||
link_to_unless_current("Showing", "http://www.example.com/?order=asc")
|
||||
|
||||
@request = request_for_url("/?order=desc")
|
||||
assert_equal %{<a href="/?order=desc&page=2\">Showing</a>},
|
||||
link_to_unless_current("Showing", hash_for(:order => "desc", :page => 2))
|
||||
assert_equal %{<a href="http://www.example.com/?order=desc&page=2">Showing</a>},
|
||||
link_to_unless_current("Showing", "http://www.example.com/?order=desc&page=2")
|
||||
|
||||
@request = request_for_url("/show")
|
||||
|
||||
assert_equal %{<a href="/">Listing</a>},
|
||||
link_to_unless_current("Listing", url_hash)
|
||||
assert_equal %{<a href="http://www.example.com/">Listing</a>},
|
||||
link_to_unless_current("Listing", "http://www.example.com/")
|
||||
end
|
||||
|
||||
def test_mail_to
|
||||
@@ -352,7 +371,8 @@ class UrlHelperTest < ActionView::TestCase
|
||||
end
|
||||
|
||||
def test_mail_to_with_img
|
||||
assert_dom_equal %(<a href="mailto:feedback@example.com"><img src="/feedback.png" /></a>), mail_to('feedback@example.com', '<img src="/feedback.png" />'.html_safe)
|
||||
assert_dom_equal %(<a href="mailto:feedback@example.com"><img src="/feedback.png" /></a>),
|
||||
mail_to('feedback@example.com', '<img src="/feedback.png" />'.html_safe)
|
||||
end
|
||||
|
||||
def test_mail_to_with_hex
|
||||
@@ -369,6 +389,7 @@ class UrlHelperTest < ActionView::TestCase
|
||||
assert_dom_equal "<script type=\"text/javascript\">eval(decodeURIComponent('%64%6f%63%75%6d%65%6e%74%2e%77%72%69%74%65%28%27%3c%61%20%68%72%65%66%3d%22%6d%61%69%6c%74%6f%3a%6d%65%40%64%6f%6d%61%69%6e%2e%63%6f%6d%22%3e%6d%65%28%61%74%29%64%6f%6d%61%69%6e%28%64%6f%74%29%63%6f%6d%3c%2f%61%3e%27%29%3b'))</script>", mail_to("me@domain.com", nil, :encode => "javascript", :replace_at => "(at)", :replace_dot => "(dot)")
|
||||
end
|
||||
|
||||
# TODO: button_to looks at this ... why?
|
||||
def protect_against_forgery?
|
||||
false
|
||||
end
|
||||
@@ -383,6 +404,15 @@ end
|
||||
|
||||
class UrlHelperControllerTest < ActionController::TestCase
|
||||
class UrlHelperController < ActionController::Base
|
||||
test_routes do |map|
|
||||
match 'url_helper_controller_test/url_helper/show_named_route',
|
||||
:to => 'url_helper_controller_test/url_helper#show_named_route',
|
||||
:as => :show_named_route
|
||||
|
||||
map.connect ":controller/:action/:id"
|
||||
# match "/:controller(/:action(/:id))"
|
||||
end
|
||||
|
||||
def show_url_for
|
||||
render :inline => "<%= url_for :controller => 'url_helper_controller_test/url_helper', :action => 'show_url_for' %>"
|
||||
end
|
||||
@@ -406,17 +436,14 @@ class UrlHelperControllerTest < ActionController::TestCase
|
||||
end
|
||||
|
||||
def test_named_route_url_shows_host_and_path
|
||||
with_url_helper_routing do
|
||||
get :show_named_route, :kind => 'url'
|
||||
assert_equal 'http://test.host/url_helper_controller_test/url_helper/show_named_route', @response.body
|
||||
end
|
||||
get :show_named_route, :kind => 'url'
|
||||
assert_equal 'http://test.host/url_helper_controller_test/url_helper/show_named_route',
|
||||
@response.body
|
||||
end
|
||||
|
||||
def test_named_route_path_shows_only_path
|
||||
with_url_helper_routing do
|
||||
get :show_named_route, :kind => 'path'
|
||||
assert_equal '/url_helper_controller_test/url_helper/show_named_route', @response.body
|
||||
end
|
||||
get :show_named_route, :kind => 'path'
|
||||
assert_equal '/url_helper_controller_test/url_helper/show_named_route', @response.body
|
||||
end
|
||||
|
||||
def test_url_for_nil_returns_current_path
|
||||
@@ -431,24 +458,16 @@ class UrlHelperControllerTest < ActionController::TestCase
|
||||
end
|
||||
end
|
||||
|
||||
with_url_helper_routing do
|
||||
get :show_named_route, :kind => 'url'
|
||||
assert_equal 'http://testtwo.host/url_helper_controller_test/url_helper/show_named_route', @response.body
|
||||
end
|
||||
get :show_named_route, :kind => 'url'
|
||||
assert_equal 'http://testtwo.host/url_helper_controller_test/url_helper/show_named_route', @response.body
|
||||
end
|
||||
|
||||
protected
|
||||
def with_url_helper_routing
|
||||
with_routing do |set|
|
||||
set.draw do |map|
|
||||
match 'url_helper_controller_test/url_helper/show_named_route', :to => 'url_helper_controller_test/url_helper#show_named_route', :as => :show_named_route
|
||||
end
|
||||
yield
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
class TasksController < ActionController::Base
|
||||
test_routes do
|
||||
resources :tasks
|
||||
end
|
||||
|
||||
def index
|
||||
render_default
|
||||
end
|
||||
@@ -468,36 +487,19 @@ class TasksController < ActionController::Base
|
||||
end
|
||||
|
||||
class LinkToUnlessCurrentWithControllerTest < ActionController::TestCase
|
||||
def setup
|
||||
super
|
||||
@controller = TasksController.new
|
||||
end
|
||||
tests TasksController
|
||||
|
||||
def test_link_to_unless_current_to_current
|
||||
with_restful_routing do
|
||||
get :index
|
||||
assert_equal "tasks\ntasks", @response.body
|
||||
end
|
||||
get :index
|
||||
assert_equal "tasks\ntasks", @response.body
|
||||
end
|
||||
|
||||
def test_link_to_unless_current_shows_link
|
||||
with_restful_routing do
|
||||
get :show, :id => 1
|
||||
assert_equal "<a href=\"/tasks\">tasks</a>\n" +
|
||||
"<a href=\"#{@request.protocol}#{@request.host_with_port}/tasks\">tasks</a>",
|
||||
@response.body
|
||||
end
|
||||
get :show, :id => 1
|
||||
assert_equal "<a href=\"/tasks\">tasks</a>\n" +
|
||||
"<a href=\"#{@request.protocol}#{@request.host_with_port}/tasks\">tasks</a>",
|
||||
@response.body
|
||||
end
|
||||
|
||||
protected
|
||||
def with_restful_routing
|
||||
with_routing do |set|
|
||||
set.draw do |map|
|
||||
resources :tasks
|
||||
end
|
||||
yield
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
class Workshop
|
||||
@@ -537,6 +539,12 @@ class Session
|
||||
end
|
||||
|
||||
class WorkshopsController < ActionController::Base
|
||||
test_routes do
|
||||
resources :workshops do
|
||||
resources :sessions
|
||||
end
|
||||
end
|
||||
|
||||
def index
|
||||
@workshop = Workshop.new(nil)
|
||||
render :inline => "<%= url_for(@workshop) %>\n<%= link_to('Workshop', @workshop) %>"
|
||||
@@ -551,6 +559,12 @@ class WorkshopsController < ActionController::Base
|
||||
end
|
||||
|
||||
class SessionsController < ActionController::Base
|
||||
test_routes do
|
||||
resources :workshops do
|
||||
resources :sessions
|
||||
end
|
||||
end
|
||||
|
||||
def index
|
||||
@workshop = Workshop.new(params[:workshop_id])
|
||||
@session = Session.new(nil)
|
||||
@@ -567,56 +581,31 @@ class SessionsController < ActionController::Base
|
||||
end
|
||||
|
||||
class PolymorphicControllerTest < ActionController::TestCase
|
||||
def setup
|
||||
super
|
||||
@response = ActionController::TestResponse.new
|
||||
end
|
||||
|
||||
def test_new_resource
|
||||
@controller = WorkshopsController.new
|
||||
|
||||
with_restful_routing do
|
||||
get :index
|
||||
assert_equal "/workshops\n<a href=\"/workshops\">Workshop</a>", @response.body
|
||||
end
|
||||
get :index
|
||||
assert_equal "/workshops\n<a href=\"/workshops\">Workshop</a>", @response.body
|
||||
end
|
||||
|
||||
def test_existing_resource
|
||||
@controller = WorkshopsController.new
|
||||
|
||||
with_restful_routing do
|
||||
get :show, :id => 1
|
||||
assert_equal "/workshops/1\n<a href=\"/workshops/1\">Workshop</a>", @response.body
|
||||
end
|
||||
get :show, :id => 1
|
||||
assert_equal "/workshops/1\n<a href=\"/workshops/1\">Workshop</a>", @response.body
|
||||
end
|
||||
|
||||
def test_new_nested_resource
|
||||
@controller = SessionsController.new
|
||||
|
||||
with_restful_routing do
|
||||
get :index, :workshop_id => 1
|
||||
assert_equal "/workshops/1/sessions\n<a href=\"/workshops/1/sessions\">Session</a>", @response.body
|
||||
end
|
||||
get :index, :workshop_id => 1
|
||||
assert_equal "/workshops/1/sessions\n<a href=\"/workshops/1/sessions\">Session</a>", @response.body
|
||||
end
|
||||
|
||||
|
||||
def test_existing_nested_resource
|
||||
@controller = SessionsController.new
|
||||
|
||||
with_restful_routing do
|
||||
get :show, :workshop_id => 1, :id => 1
|
||||
assert_equal "/workshops/1/sessions/1\n<a href=\"/workshops/1/sessions/1\">Session</a>", @response.body
|
||||
end
|
||||
|
||||
get :show, :workshop_id => 1, :id => 1
|
||||
assert_equal "/workshops/1/sessions/1\n<a href=\"/workshops/1/sessions/1\">Session</a>", @response.body
|
||||
end
|
||||
|
||||
protected
|
||||
def with_restful_routing
|
||||
with_routing do |set|
|
||||
set.draw do |map|
|
||||
resources :workshops do
|
||||
resources :sessions
|
||||
end
|
||||
end
|
||||
yield
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user