Upgraded to Rails 2.3.4 (#3597)

* Ran the Rails upgrade
* Upgraded to Rails Engines 2.3.2
* Added a plugin to let Engines override application views.
* Converted tests to use the new classes:
** ActionController::TestCase for functional
** ActiveSupport::TestCase for units
* Converted ActiveRecord::Error message to a string.
* ActiveRecord grouping returns an ordered hash which doesn't have #sort!
* Updated the I18n storage_units format.
* Added some default initializers from a fresh rails app
* Changed the order of check_box_tags and hidden_field_tags.  The hidden tag
  needs to appear first in Rails 2.3, otherwise it will override any value in
  the check_box_tag.
* Removed the custom handler for when the cookie store is tampered with.
  Rails 2.3 removed the TamperedWithCookie exception and instead Rails will not
  load the data from it when it's been tampered with (e.g. no user login).
* Fixed mail layouts, 2.3 has problems with implicit multipart emails that
  use layouts.  Also removed some custom Redmine mailer code.
* Fixed a bug that occurred in tests where the "required" span tag would be
  added to the :field_status translation.  This resulted in an email string of:

    <li>Status<span class="required"> *</span><span class="required"> *</span>

  Instead of:

    <li>Status: New</li>

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@2887 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
Eric Davis
2009-09-13 17:14:35 +00:00
parent fb349dc4ab
commit 7b0cb6aba8
263 changed files with 1636 additions and 440 deletions
@@ -0,0 +1,51 @@
# Tests in this file ensure that:
#
# * plugin controller actions are found
# * actions defined in application controllers take precedence over those in plugins
# * actions in controllers in subsequently loaded plugins take precendence over those in previously loaded plugins
# * this works for actions in namespaced controllers accordingly
require File.dirname(__FILE__) + '/../test_helper'
class ControllerLoadingTest < ActionController::TestCase
def setup
@request = ActionController::TestRequest.new
@response = ActionController::TestResponse.new
end
# plugin controller actions should be found
def test_WITH_an_action_defined_only_in_a_plugin_IT_should_use_this_action
get_action_on_controller :an_action, :alpha_plugin
assert_response_body 'rendered in AlphaPluginController#an_action'
end
def test_WITH_an_action_defined_only_in_a_namespaced_plugin_controller_IT_should_use_this_action
get_action_on_controller :an_action, :alpha_plugin, :namespace
assert_response_body 'rendered in Namespace::AlphaPluginController#an_action'
end
# app takes precedence over plugins
def test_WITH_an_action_defined_in_both_app_and_plugin_IT_should_use_the_one_in_app
get_action_on_controller :an_action, :app_and_plugin
assert_response_body 'rendered in AppAndPluginController#an_action (from app)'
end
def test_WITH_an_action_defined_in_namespaced_controllers_in_both_app_and_plugin_IT_should_use_the_one_in_app
get_action_on_controller :an_action, :app_and_plugin, :namespace
assert_response_body 'rendered in Namespace::AppAndPluginController#an_action (from app)'
end
# subsequently loaded plugins take precendence over previously loaded plugins
def test_WITH_an_action_defined_in_two_plugin_controllers_IT_should_use_the_latter_of_both
get_action_on_controller :an_action, :shared_plugin
assert_response_body 'rendered in SharedPluginController#an_action (from beta_plugin)'
end
def test_WITH_an_action_defined_in_two_namespaced_plugin_controllers_IT_should_use_the_latter_of_both
get_action_on_controller :an_action, :shared_plugin, :namespace
assert_response_body 'rendered in Namespace::SharedPluginController#an_action (from beta_plugin)'
end
end
@@ -0,0 +1,29 @@
require File.dirname(__FILE__) + '/../test_helper'
class ExceptionNotificationCompatibilityTest < ActionController::TestCase
ExceptionNotifier.exception_recipients = %w(joe@schmoe.com bill@schmoe.com)
class SimpleController < ApplicationController
include ExceptionNotifiable
local_addresses.clear
consider_all_requests_local = false
def index
begin
raise "Fail!"
rescue Exception => e
rescue_action_in_public(e)
end
end
end
def setup
@controller = SimpleController.new
@request = ActionController::TestRequest.new
@response = ActionController::TestResponse.new
end
def test_should_work
assert_nothing_raised do
get :index
end
end
end
@@ -0,0 +1,26 @@
# Tests in this file ensure that:
#
# * translations in the application take precedence over those in plugins
# * translations in subsequently loaded plugins take precendence over those in previously loaded plugins
require File.dirname(__FILE__) + '/../test_helper'
class LocaleLoadingTest < ActionController::TestCase
def setup
@request = ActionController::TestRequest.new
@response = ActionController::TestResponse.new
end
# app takes precedence over plugins
def test_WITH_a_translation_defined_in_both_app_and_plugin_IT_should_find_the_one_in_app
assert_equal I18n.t('hello'), 'Hello world'
end
# subsequently loaded plugins take precendence over previously loaded plugins
def test_WITH_a_translation_defined_in_two_plugins_IT_should_find_the_latter_of_both
assert_equal I18n.t('plugin'), 'beta'
end
end
+29
View File
@@ -0,0 +1,29 @@
# Tests in this file ensure that:
#
# * Routes from plugins can be routed to
# * Named routes can be defined within a plugin
require File.dirname(__FILE__) + '/../test_helper'
class RoutesTest < ActionController::TestCase
tests TestRoutingController
def test_WITH_a_route_defined_in_a_plugin_IT_should_route_it
path = '/routes/an_action'
opts = {:controller => 'test_routing', :action => 'an_action'}
assert_routing path, opts
assert_recognizes opts, path # not sure what exactly the difference is, but it won't hurt either
end
def test_WITH_a_route_for_a_namespaced_controller_defined_in_a_plugin_IT_should_route_it
path = 'somespace/routes/an_action'
opts = {:controller => 'namespace/test_routing', :action => 'an_action'}
assert_routing path, opts
assert_recognizes opts, path
end
def test_should_properly_generate_named_routes
get :test_named_routes_from_plugin
assert_response_body '/somespace/routes'
end
end
@@ -0,0 +1,37 @@
require File.dirname(__FILE__) + '/../test_helper'
class ViewHelpersTest < ActionController::TestCase
tests AssetsController
def setup
get :index
end
def test_plugin_javascript_helpers
base_selector = "script[type='text/javascript']"
js_dir = "/plugin_assets/test_assets/javascripts"
assert_select "#{base_selector}[src='#{js_dir}/file.1.js']"
assert_select "#{base_selector}[src='#{js_dir}/file2.js']"
end
def test_plugin_stylesheet_helpers
base_selector = "link[media='screen'][rel='stylesheet'][type='text/css']"
css_dir = "/plugin_assets/test_assets/stylesheets"
assert_select "#{base_selector}[href='#{css_dir}/file.1.css']"
assert_select "#{base_selector}[href='#{css_dir}/file2.css']"
end
def test_plugin_image_helpers
assert_select "img[src='/plugin_assets/test_assets/images/image.png'][alt='Image']"
end
def test_plugin_layouts
get :index
assert_select "div[id='assets_layout']"
end
def test_plugin_image_submit_helpers
assert_select "input[src='/plugin_assets/test_assets/images/image.png'][type='image']"
end
end
@@ -0,0 +1,60 @@
# Tests in this file ensure that:
#
# * plugin views are found
# * views in the application take precedence over those in plugins
# * views in subsequently loaded plugins take precendence over those in previously loaded plugins
# * this works for namespaced views accordingly
require File.dirname(__FILE__) + '/../test_helper'
class ViewLoadingTest < ActionController::TestCase
def setup
@request = ActionController::TestRequest.new
@response = ActionController::TestResponse.new
end
# plugin views should be found
def test_WITH_a_view_defined_only_in_a_plugin_IT_should_find_the_view
get_action_on_controller :a_view, :alpha_plugin
assert_response_body 'alpha_plugin/a_view'
end
def test_WITH_a_namespaced_view_defined_only_in_a_plugin_IT_should_find_the_view
get_action_on_controller :a_view, :alpha_plugin, :namespace
assert_response_body 'namespace/alpha_plugin/a_view'
end
# app takes precedence over plugins
def test_WITH_a_view_defined_in_both_app_and_plugin_IT_should_find_the_one_in_app
get_action_on_controller :a_view, :app_and_plugin
assert_response_body 'app_and_plugin/a_view (from app)'
end
def test_WITH_a_namespaced_view_defined_in_both_app_and_plugin_IT_should_find_the_one_in_app
get_action_on_controller :a_view, :app_and_plugin, :namespace
assert_response_body 'namespace/app_and_plugin/a_view (from app)'
end
# subsequently loaded plugins take precendence over previously loaded plugins
def test_WITH_a_view_defined_in_two_plugins_IT_should_find_the_latter_of_both
get_action_on_controller :a_view, :shared_plugin
assert_response_body 'shared_plugin/a_view (from beta_plugin)'
end
def test_WITH_a_namespaced_view_defined_in_two_plugins_IT_should_find_the_latter_of_both
get_action_on_controller :a_view, :shared_plugin, :namespace
assert_response_body 'namespace/shared_plugin/a_view (from beta_plugin)'
end
# layouts loaded from plugins
def test_should_be_able_to_load_a_layout_from_a_plugin
get_action_on_controller :action_with_layout, :alpha_plugin
assert_response_body 'rendered in AlphaPluginController#action_with_layout (with plugin layout)'
end
end