X-Git-Url: https://git.njae.me.uk/?a=blobdiff_plain;f=vendor%2Frails%2Factionpack%2Ftest%2Ftemplate%2Furl_helper_test.rb;fp=vendor%2Frails%2Factionpack%2Ftest%2Ftemplate%2Furl_helper_test.rb;h=5900709d813c524977025b10d685e072372fc4ab;hb=437aa336c44c74a30aeea16a06743c32747ed661;hp=0000000000000000000000000000000000000000;hpb=97a0772b06264134cfe38e7494f9427efe0840a0;p=feedcatcher.git diff --git a/vendor/rails/actionpack/test/template/url_helper_test.rb b/vendor/rails/actionpack/test/template/url_helper_test.rb new file mode 100644 index 0000000..5900709 --- /dev/null +++ b/vendor/rails/actionpack/test/template/url_helper_test.rb @@ -0,0 +1,614 @@ +# encoding: utf-8 +require 'abstract_unit' + +RequestMock = Struct.new("Request", :request_uri, :protocol, :host_with_port, :env) + +class UrlHelperTest < ActionView::TestCase + tests ActionView::Helpers::UrlHelper + + def setup + @controller = Class.new do + attr_accessor :url, :request + def url_for(options) + url + end + end + @controller = @controller.new + @controller.url = "http://www.example.com" + end + + 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) + 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") + end + + def test_url_for_with_back + @controller.request = RequestMock.new("http://www.example.com/weblog/show", nil, nil, {'HTTP_REFERER' => 'http://www.example.com/referer'}) + assert_equal 'http://www.example.com/referer', url_for(:back) + end + + def test_url_for_with_back_and_no_referer + @controller.request = RequestMock.new("http://www.example.com/weblog/show", nil, nil, {}) + assert_equal 'javascript:history.back()', url_for(:back) + end + + # todo: missing test cases + def test_button_to_with_straight_url + assert_dom_equal "
", button_to("Hello", "http://www.example.com") + end + + def test_button_to_with_query + assert_dom_equal "
", button_to("Hello", "http://www.example.com/q1=v1&q2=v2") + end + + def test_button_to_with_escaped_query + assert_dom_equal "
", button_to("Hello", "http://www.example.com/q1=v1&q2=v2") + end + + def test_button_to_with_query_and_no_name + assert_dom_equal "
", button_to(nil, "http://www.example.com?q1=v1&q2=v2") + end + + def test_button_to_with_javascript_confirm + assert_dom_equal( + "
", + button_to("Hello", "http://www.example.com", :confirm => "Are you sure?") + ) + end + + def test_button_to_enabled_disabled + assert_dom_equal( + "
", + button_to("Hello", "http://www.example.com", :disabled => false) + ) + assert_dom_equal( + "
", + button_to("Hello", "http://www.example.com", :disabled => true) + ) + end + + def test_button_to_with_method_delete + assert_dom_equal( + "
", + button_to("Hello", "http://www.example.com", :method => :delete) + ) + end + + def test_button_to_with_method_get + assert_dom_equal( + "
", + button_to("Hello", "http://www.example.com", :method => :get) + ) + end + + def test_link_tag_with_straight_url + assert_dom_equal "Hello", link_to("Hello", "http://www.example.com") + 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 + @controller.url = ActionController::UrlRewriter.new(@controller.request, url) + assert_dom_equal(%q{Test Link}, link_to('Test Link', url)) + 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 + @controller.url = ActionController::UrlRewriter.new(@controller.request, url) + assert_dom_equal(%q{Test Link}, link_to('Test Link', url)) + end + + def test_link_tag_with_query + assert_dom_equal "Hello", link_to("Hello", "http://www.example.com?q1=v1&q2=v2") + end + + def test_link_tag_with_query_and_no_name + assert_dom_equal "http://www.example.com?q1=v1&q2=v2", link_to(nil, "http://www.example.com?q1=v1&q2=v2") + end + + def test_link_tag_with_back + @controller.request = RequestMock.new("http://www.example.com/weblog/show", nil, nil, {'HTTP_REFERER' => 'http://www.example.com/referer'}) + assert_dom_equal "go back", link_to('go back', :back) + end + + def test_link_tag_with_back_and_no_referer + @controller.request = RequestMock.new("http://www.example.com/weblog/show", nil, nil, {}) + assert_dom_equal "go back", link_to('go back', :back) + end + + def test_link_tag_with_back + @controller.request = RequestMock.new("http://www.example.com/weblog/show", nil, nil, {'HTTP_REFERER' => 'http://www.example.com/referer'}) + assert_dom_equal "go back", link_to('go back', :back) + end + + def test_link_tag_with_back_and_no_referer + @controller.request = RequestMock.new("http://www.example.com/weblog/show", nil, nil, {}) + assert_dom_equal "go back", link_to('go back', :back) + end + + def test_link_tag_with_img + assert_dom_equal "", link_to("", "http://www.example.com") + end + + def test_link_with_nil_html_options + assert_dom_equal "Hello", link_to("Hello", {:action => 'myaction'}, nil) + end + + def test_link_tag_with_custom_onclick + assert_dom_equal "Hello", link_to("Hello", "http://www.example.com", :onclick => "alert('yay!')") + end + + def test_link_tag_with_javascript_confirm + assert_dom_equal( + "Hello", + link_to("Hello", "http://www.example.com", :confirm => "Are you sure?") + ) + assert_dom_equal( + "Hello", + link_to("Hello", "http://www.example.com", :confirm => "You can't possibly be sure, can you?") + ) + assert_dom_equal( + "Hello", + link_to("Hello", "http://www.example.com", :confirm => "You can't possibly be sure,\n can you?") + ) + end + + def test_link_tag_with_popup + assert_dom_equal( + "Hello", + link_to("Hello", "http://www.example.com", :popup => true) + ) + assert_dom_equal( + "Hello", + link_to("Hello", "http://www.example.com", :popup => 'true') + ) + assert_dom_equal( + "Hello", + link_to("Hello", "http://www.example.com", :popup => ['window_name', 'width=300,height=300']) + ) + end + + def test_link_tag_with_popup_and_javascript_confirm + assert_dom_equal( + "Hello", + link_to("Hello", "http://www.example.com", { :popup => true, :confirm => "Fo' sho'?" }) + ) + assert_dom_equal( + "Hello", + link_to("Hello", "http://www.example.com", { :popup => ['window_name', 'width=300,height=300'], :confirm => "Are you serious?" }) + ) + end + + def test_link_tag_using_post_javascript + assert_dom_equal( + "Hello", + link_to("Hello", "http://www.example.com", :method => :post) + ) + end + + def test_link_tag_using_delete_javascript + assert_dom_equal( + "Destroy", + link_to("Destroy", "http://www.example.com", :method => :delete) + ) + end + + def test_link_tag_using_delete_javascript_and_href + assert_dom_equal( + "Destroy", + link_to("Destroy", "http://www.example.com", :method => :delete, :href => '#') + ) + end + + def test_link_tag_using_post_javascript_and_confirm + assert_dom_equal( + "Hello", + link_to("Hello", "http://www.example.com", :method => :post, :confirm => "Are you serious?") + ) + end + + def test_link_tag_using_post_javascript_and_popup + assert_raise(ActionView::ActionViewError) { link_to("Hello", "http://www.example.com", :popup => true, :method => :post, :confirm => "Are you serious?") } + end + + def test_link_tag_using_block_in_erb + __in_erb_template = '' + + link_to("http://example.com") { concat("Example site") } + + assert_equal 'Example site', output_buffer + end + + def test_link_to_unless + assert_equal "Showing", link_to_unless(true, "Showing", :action => "show", :controller => "weblog") + assert_dom_equal "Listing", 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 "Showing", link_to_unless(true, "Showing", :action => "show", :controller => "weblog", :id => 1) { |name, options, html_options| + "#{name}" + } + assert_equal "Showing", link_to_unless(true, "Showing", :action => "show", :controller => "weblog", :id => 1) { |name| + "#{name}" + } + assert_equal "test", link_to_unless(true, "Showing", :action => "show", :controller => "weblog", :id => 1) { + "test" + } + end + + def test_link_to_if + assert_equal "Showing", link_to_if(false, "Showing", :action => "show", :controller => "weblog") + assert_dom_equal "Listing", link_to_if(true, "Listing", :action => "list", :controller => "weblog") + assert_equal "Showing", link_to_if(false, "Showing", :action => "show", :controller => "weblog", :id => 1) + end + + def test_current_page_with_simple_url + @controller.request = RequestMock.new("http://www.example.com/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") + end + + def test_current_page_ignoring_params + @controller.request = RequestMock.new("http://www.example.com/weblog/show?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") + end + + def test_current_page_with_params_that_match + @controller.request = RequestMock.new("http://www.example.com/weblog/show?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") + end + + def test_link_unless_current + @controller.request = RequestMock.new("http://www.example.com/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") + + @controller.request = RequestMock.new("http://www.example.com/weblog/show?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") + + @controller.request = RequestMock.new("http://www.example.com/weblog/show?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") + + @controller.request = RequestMock.new("http://www.example.com/weblog/show?order=desc") + @controller.url = "http://www.example.com/weblog/show?order=asc" + 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?order=asc") + + @controller.request = RequestMock.new("http://www.example.com/weblog/show?order=desc&page=1") + @controller.url = "http://www.example.com/weblog/show?order=desc&page=2" + 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?order=desc&page=2") + + + @controller.request = RequestMock.new("http://www.example.com/weblog/show") + @controller.url = "http://www.example.com/weblog/list" + assert_equal "Listing", + link_to_unless_current("Listing", :action => "list", :controller => "weblog") + assert_equal "Listing", + link_to_unless_current("Listing", "http://www.example.com/weblog/list") + end + + def test_mail_to + assert_dom_equal "david@loudthinking.com", mail_to("david@loudthinking.com") + assert_dom_equal "David Heinemeier Hansson", mail_to("david@loudthinking.com", "David Heinemeier Hansson") + assert_dom_equal( + "David Heinemeier Hansson", + mail_to("david@loudthinking.com", "David Heinemeier Hansson", "class" => "admin") + ) + assert_equal mail_to("david@loudthinking.com", "David Heinemeier Hansson", "class" => "admin"), + mail_to("david@loudthinking.com", "David Heinemeier Hansson", :class => "admin") + end + + def test_mail_to_with_javascript + assert_dom_equal "", mail_to("me@domain.com", "My email", :encode => "javascript") + end + + def test_mail_to_with_javascript_unicode + assert_dom_equal "", mail_to("unicode@example.com", "únicode", :encode => "javascript") + end + + def test_mail_with_options + assert_dom_equal( + %(My email), + mail_to("me@example.com", "My email", :cc => "ccaddress@example.com", :bcc => "bccaddress@example.com", :subject => "This is an example email", :body => "This is the body of the message.") + ) + end + + def test_mail_to_with_img + assert_dom_equal %(), mail_to('feedback@example.com', '') + end + + def test_mail_to_with_hex + assert_dom_equal "My email", mail_to("me@domain.com", "My email", :encode => "hex") + assert_dom_equal "me@domain.com", mail_to("me@domain.com", nil, :encode => "hex") + end + + def test_mail_to_with_replace_options + assert_dom_equal "wolfgang(at)stufenlos(dot)net", mail_to("wolfgang@stufenlos.net", nil, :replace_at => "(at)", :replace_dot => "(dot)") + assert_dom_equal "me(at)domain.com", mail_to("me@domain.com", nil, :encode => "hex", :replace_at => "(at)") + assert_dom_equal "My email", mail_to("me@domain.com", "My email", :encode => "hex", :replace_at => "(at)") + assert_dom_equal "me(at)domain(dot)com", mail_to("me@domain.com", nil, :encode => "hex", :replace_at => "(at)", :replace_dot => "(dot)") + assert_dom_equal "", mail_to("me@domain.com", "My email", :encode => "javascript", :replace_at => "(at)", :replace_dot => "(dot)") + assert_dom_equal "", mail_to("me@domain.com", nil, :encode => "javascript", :replace_at => "(at)", :replace_dot => "(dot)") + end + + def protect_against_forgery? + false + end +end + +class UrlHelperWithControllerTest < ActionView::TestCase + class UrlHelperController < ActionController::Base + def self.controller_path; 'url_helper_with_controller' end + + def show_url_for + render :inline => "<%= url_for :controller => 'url_helper_with_controller', :action => 'show_url_for' %>" + end + + def show_named_route + render :inline => "<%= show_named_route_#{params[:kind]} %>" + end + + def nil_url_for + render :inline => '<%= url_for(nil) %>' + end + + def rescue_action(e) raise e end + end + + tests ActionView::Helpers::UrlHelper + + def setup + @request = ActionController::TestRequest.new + @response = ActionController::TestResponse.new + @controller = UrlHelperController.new + end + + def test_url_for_shows_only_path + get :show_url_for + assert_equal '/url_helper_with_controller/show_url_for', @response.body + 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_with_controller/show_named_route', @response.body + end + end + + def test_named_route_path_shows_only_path + with_url_helper_routing do + get :show_named_route, :kind => 'path' + assert_equal '/url_helper_with_controller/show_named_route', @response.body + end + end + + def test_url_for_nil_returns_current_path + get :nil_url_for + assert_equal '/url_helper_with_controller/nil_url_for', @response.body + end + + def test_named_route_should_show_host_and_path_using_controller_default_url_options + class << @controller + def default_url_options(options = nil) + {:host => 'testtwo.host'} + end + end + + with_url_helper_routing do + get :show_named_route, :kind => 'url' + assert_equal 'http://testtwo.host/url_helper_with_controller/show_named_route', @response.body + end + end + + protected + def with_url_helper_routing + with_routing do |set| + set.draw do |map| + map.show_named_route 'url_helper_with_controller/show_named_route', :controller => 'url_helper_with_controller', :action => 'show_named_route' + end + yield + end + end +end + +class LinkToUnlessCurrentWithControllerTest < ActionView::TestCase + class TasksController < ActionController::Base + def self.controller_path; 'tasks' end + + def index + render_default + end + + def show + render_default + end + + def rescue_action(e) raise e end + + protected + def render_default + render :inline => + "<%= link_to_unless_current(\"tasks\", tasks_path) %>\n" + + "<%= link_to_unless_current(\"tasks\", tasks_url) %>" + end + end + + tests ActionView::Helpers::UrlHelper + + def setup + @request = ActionController::TestRequest.new + @response = ActionController::TestResponse.new + @controller = TasksController.new + end + + def test_link_to_unless_current_to_current + with_restful_routing do + get :index + assert_equal "tasks\ntasks", @response.body + end + end + + def test_link_to_unless_current_shows_link + with_restful_routing do + get :show, :id => 1 + assert_equal "tasks\n" + + "tasks", + @response.body + end + end + + protected + def with_restful_routing + with_routing do |set| + set.draw do |map| + map.resources :tasks + end + yield + end + end +end + +class Workshop + attr_accessor :id, :new_record + + def initialize(id, new_record) + @id, @new_record = id, new_record + end + + def new_record? + @new_record + end + + def to_s + id.to_s + end +end + +class Session + attr_accessor :id, :workshop_id, :new_record + + def initialize(id, new_record) + @id, @new_record = id, new_record + end + + def new_record? + @new_record + end + + def to_s + id.to_s + end +end + +class PolymorphicControllerTest < ActionView::TestCase + class WorkshopsController < ActionController::Base + def self.controller_path; 'workshops' end + + def index + @workshop = Workshop.new(1, true) + render :inline => "<%= url_for(@workshop) %>\n<%= link_to('Workshop', @workshop) %>" + end + + def show + @workshop = Workshop.new(params[:id], false) + render :inline => "<%= url_for(@workshop) %>\n<%= link_to('Workshop', @workshop) %>" + end + + def rescue_action(e) raise e end + end + + class SessionsController < ActionController::Base + def self.controller_path; 'sessions' end + + def index + @workshop = Workshop.new(params[:workshop_id], false) + @session = Session.new(1, true) + render :inline => "<%= url_for([@workshop, @session]) %>\n<%= link_to('Session', [@workshop, @session]) %>" + end + + def show + @workshop = Workshop.new(params[:workshop_id], false) + @session = Session.new(params[:id], false) + render :inline => "<%= url_for([@workshop, @session]) %>\n<%= link_to('Session', [@workshop, @session]) %>" + end + + def rescue_action(e) raise e end + end + + tests ActionView::Helpers::UrlHelper + + def setup + @request = ActionController::TestRequest.new + @response = ActionController::TestResponse.new + end + + def test_new_resource + @controller = WorkshopsController.new + + with_restful_routing do + get :index + assert_equal "/workshops\nWorkshop", @response.body + end + end + + def test_existing_resource + @controller = WorkshopsController.new + + with_restful_routing do + get :show, :id => 1 + assert_equal "/workshops/1\nWorkshop", @response.body + end + end + + def test_new_nested_resource + @controller = SessionsController.new + + with_restful_routing do + get :index, :workshop_id => 1 + assert_equal "/workshops/1/sessions\nSession", @response.body + end + 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\nSession", @response.body + end + end + + protected + def with_restful_routing + with_routing do |set| + set.draw do |map| + map.resources :workshops do |w| + w.resources :sessions + end + end + yield + end + end +end