summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric Davis <edavis@littlestreamsoftware.com>2009-09-13 17:14:35 +0000
committerEric Davis <edavis@littlestreamsoftware.com>2009-09-13 17:14:35 +0000
commit7b0cb6aba8715aff00519f200060fbf46ae9bb97 (patch)
treec4dc3bcac1a48020c2afef87094056a9a5e06b6f
parentfb349dc4abe283481984c67cd1287312f128dbfc (diff)
downloadredmine-7b0cb6aba8715aff00519f200060fbf46ae9bb97.tar.gz
redmine-7b0cb6aba8715aff00519f200060fbf46ae9bb97.zip
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
-rw-r--r--app/controllers/application_controller.rb (renamed from app/controllers/application.rb)7
-rw-r--r--app/controllers/repositories_controller.rb2
-rw-r--r--app/models/mailer.rb48
-rw-r--r--app/views/layouts/mailer.text.html.erb (renamed from app/views/mailer/layout.text.html.rhtml)0
-rw-r--r--app/views/layouts/mailer.text.plain.erb (renamed from app/views/mailer/layout.text.plain.rhtml)0
-rw-r--r--app/views/settings/_authentication.rhtml12
-rw-r--r--app/views/settings/_display.rhtml4
-rw-r--r--app/views/settings/_issues.rhtml8
-rw-r--r--app/views/settings/_mail_handler.rhtml3
-rw-r--r--app/views/settings/_notifications.rhtml6
-rw-r--r--app/views/settings/_projects.rhtml8
-rw-r--r--app/views/settings/_repositories.rhtml8
-rw-r--r--config/boot.rb5
-rw-r--r--config/environment.rb2
-rw-r--r--config/initializers/10-patches.rb2
-rw-r--r--config/initializers/backtrace_silencers.rb7
-rw-r--r--config/initializers/inflections.rb10
-rw-r--r--config/locales/bg.yml16
-rw-r--r--config/locales/bs.yml13
-rw-r--r--config/locales/ca.yml16
-rw-r--r--config/locales/cs.yml16
-rw-r--r--config/locales/da.yml11
-rw-r--r--config/locales/de.yml10
-rw-r--r--config/locales/el.yml16
-rw-r--r--config/locales/en.yml17
-rw-r--r--config/locales/es.yml10
-rw-r--r--config/locales/fi.yml11
-rw-r--r--config/locales/fr.yml11
-rw-r--r--config/locales/gl.yml10
-rw-r--r--config/locales/he.yml11
-rw-r--r--config/locales/hu.yml11
-rw-r--r--config/locales/it.yml11
-rw-r--r--config/locales/ja.yml10
-rw-r--r--config/locales/ko.yml11
-rw-r--r--config/locales/lt.yml11
-rw-r--r--config/locales/nl.yml16
-rw-r--r--config/locales/no.yml12
-rw-r--r--config/locales/pl.yml11
-rw-r--r--config/locales/pt-BR.yml10
-rw-r--r--config/locales/pt.yml10
-rw-r--r--config/locales/ro.yml16
-rw-r--r--config/locales/sk.yml16
-rw-r--r--config/locales/sl.yml16
-rw-r--r--config/locales/sr.yml11
-rw-r--r--config/locales/sv.yml11
-rw-r--r--config/locales/th.yml16
-rw-r--r--config/locales/tr.yml10
-rw-r--r--config/locales/uk.yml16
-rw-r--r--config/locales/vi.yml11
-rw-r--r--config/locales/zh-TW.yml3
-rw-r--r--config/locales/zh.yml11
-rw-r--r--config/routes.rb5
-rw-r--r--lib/tabular_form_builder.rb2
-rw-r--r--test/functional/account_controller_test.rb2
-rw-r--r--test/functional/admin_controller_test.rb2
-rw-r--r--test/functional/application_controller_test.rb4
-rw-r--r--test/functional/attachments_controller_test.rb2
-rw-r--r--test/functional/boards_controller_test.rb2
-rw-r--r--test/functional/custom_fields_controller_test.rb2
-rw-r--r--test/functional/documents_controller_test.rb2
-rw-r--r--test/functional/enumerations_controller_test.rb2
-rw-r--r--test/functional/groups_controller_test.rb2
-rw-r--r--test/functional/issue_categories_controller_test.rb2
-rw-r--r--test/functional/issue_relations_controller_test.rb2
-rw-r--r--test/functional/issues_controller_test.rb55
-rw-r--r--test/functional/journals_controller_test.rb2
-rw-r--r--test/functional/mail_handler_controller_test.rb2
-rw-r--r--test/functional/members_controller_test.rb2
-rw-r--r--test/functional/messages_controller_test.rb2
-rw-r--r--test/functional/my_controller_test.rb2
-rw-r--r--test/functional/news_controller_test.rb2
-rw-r--r--test/functional/projects_controller_test.rb2
-rw-r--r--test/functional/queries_controller_test.rb8
-rw-r--r--test/functional/reports_controller_test.rb2
-rw-r--r--test/functional/repositories_bazaar_controller_test.rb2
-rw-r--r--test/functional/repositories_controller_test.rb2
-rw-r--r--test/functional/repositories_cvs_controller_test.rb2
-rw-r--r--test/functional/repositories_darcs_controller_test.rb2
-rw-r--r--test/functional/repositories_git_controller_test.rb2
-rw-r--r--test/functional/repositories_mercurial_controller_test.rb2
-rw-r--r--test/functional/repositories_subversion_controller_test.rb2
-rw-r--r--test/functional/roles_controller_test.rb2
-rw-r--r--test/functional/search_controller_test.rb2
-rw-r--r--test/functional/settings_controller_test.rb2
-rw-r--r--test/functional/sys_controller_test.rb2
-rw-r--r--test/functional/timelog_controller_test.rb2
-rw-r--r--test/functional/trackers_controller_test.rb2
-rw-r--r--test/functional/users_controller_test.rb2
-rw-r--r--test/functional/versions_controller_test.rb2
-rw-r--r--test/functional/watchers_controller_test.rb2
-rw-r--r--test/functional/welcome_controller_test.rb2
-rw-r--r--test/functional/wiki_controller_test.rb2
-rw-r--r--test/functional/wikis_controller_test.rb2
-rw-r--r--test/functional/workflows_controller_test.rb2
-rw-r--r--test/helper_testcase.rb2
-rw-r--r--test/test_helper.rb4
-rw-r--r--test/unit/activity_test.rb2
-rw-r--r--test/unit/attachment_test.rb2
-rw-r--r--test/unit/auth_source_ldap_test.rb2
-rw-r--r--test/unit/board_test.rb2
-rw-r--r--test/unit/calendar_test.rb2
-rw-r--r--test/unit/changeset_test.rb2
-rw-r--r--test/unit/comment_test.rb2
-rw-r--r--test/unit/custom_field_test.rb2
-rw-r--r--test/unit/custom_value_test.rb2
-rw-r--r--test/unit/default_data_test.rb2
-rw-r--r--test/unit/document_category_test.rb2
-rw-r--r--test/unit/document_test.rb2
-rw-r--r--test/unit/enabled_module_test.rb2
-rw-r--r--test/unit/enumeration_test.rb2
-rw-r--r--test/unit/filesystem_adapter_test.rb2
-rw-r--r--test/unit/git_adapter_test.rb2
-rw-r--r--test/unit/group_test.rb2
-rw-r--r--test/unit/issue_category_test.rb2
-rw-r--r--test/unit/issue_priority_test.rb2
-rw-r--r--test/unit/issue_status_test.rb2
-rw-r--r--test/unit/issue_test.rb2
-rw-r--r--test/unit/journal_test.rb2
-rw-r--r--test/unit/lib/redmine/access_control_test.rb2
-rw-r--r--test/unit/lib/redmine/hook_test.rb2
-rw-r--r--test/unit/lib/redmine/i18n_test.rb2
-rw-r--r--test/unit/lib/redmine/mime_type_test.rb2
-rw-r--r--test/unit/lib/redmine/plugin_test.rb2
-rw-r--r--test/unit/lib/redmine/unified_diff_test.rb2
-rw-r--r--test/unit/mail_handler_test.rb2
-rw-r--r--test/unit/mailer_test.rb16
-rw-r--r--test/unit/member_test.rb2
-rw-r--r--test/unit/mercurial_adapter_test.rb2
-rw-r--r--test/unit/message_test.rb2
-rw-r--r--test/unit/news_test.rb2
-rw-r--r--test/unit/project_test.rb2
-rw-r--r--test/unit/query_test.rb2
-rw-r--r--test/unit/repository_bazaar_test.rb2
-rw-r--r--test/unit/repository_cvs_test.rb2
-rw-r--r--test/unit/repository_darcs_test.rb2
-rw-r--r--test/unit/repository_filesystem_test.rb2
-rw-r--r--test/unit/repository_git_test.rb2
-rw-r--r--test/unit/repository_mercurial_test.rb2
-rw-r--r--test/unit/repository_subversion_test.rb2
-rw-r--r--test/unit/repository_test.rb2
-rw-r--r--test/unit/role_test.rb2
-rw-r--r--test/unit/search_test.rb2
-rw-r--r--test/unit/setting_test.rb2
-rw-r--r--test/unit/subversion_adapter_test.rb2
-rw-r--r--test/unit/time_entry_activity_test.rb2
-rw-r--r--test/unit/time_entry_test.rb2
-rw-r--r--test/unit/token_test.rb2
-rw-r--r--test/unit/tracker_test.rb2
-rw-r--r--test/unit/user_preference_test.rb2
-rw-r--r--test/unit/user_test.rb2
-rw-r--r--test/unit/version_test.rb2
-rw-r--r--test/unit/watcher_test.rb2
-rw-r--r--test/unit/wiki_content_test.rb2
-rw-r--r--test/unit/wiki_page_test.rb2
-rw-r--r--test/unit/wiki_redirect_test.rb2
-rw-r--r--test/unit/wiki_test.rb2
-rw-r--r--vendor/plugins/engines/Rakefile23
-rw-r--r--vendor/plugins/engines/about.yml2
-rw-r--r--vendor/plugins/engines/boot.rb4
-rw-r--r--vendor/plugins/engines/init.rb4
-rw-r--r--vendor/plugins/engines/lib/engines.rb10
-rw-r--r--vendor/plugins/engines/lib/engines/plugin.rb49
-rw-r--r--vendor/plugins/engines/lib/engines/plugin/loader.rb7
-rw-r--r--vendor/plugins/engines/lib/engines/rails_extensions/action_mailer.rb82
-rw-r--r--vendor/plugins/engines/lib/engines/rails_extensions/routing.rb83
-rw-r--r--vendor/plugins/engines/lib/engines/testing.rb16
-rw-r--r--vendor/plugins/engines/tasks/engines.rake42
-rw-r--r--vendor/plugins/engines/test/app/controllers/app_and_plugin_controller.rb5
-rw-r--r--vendor/plugins/engines/test/app/controllers/namespace/app_and_plugin_controller.rb5
-rw-r--r--vendor/plugins/engines/test/app/helpers/mail_helper.rb5
-rw-r--r--vendor/plugins/engines/test/app/models/app_and_plugin_model.rb3
-rw-r--r--vendor/plugins/engines/test/app/models/notify_mail.rb26
-rw-r--r--vendor/plugins/engines/test/app/things/thing.rb3
-rw-r--r--vendor/plugins/engines/test/app/views/app_and_plugin/a_view.html.erb1
-rw-r--r--vendor/plugins/engines/test/app/views/namespace/app_and_plugin/a_view.html.erb1
-rw-r--r--vendor/plugins/engines/test/app/views/notify_mail/implicit_multipart.text.html.erb1
-rw-r--r--vendor/plugins/engines/test/app/views/notify_mail/implicit_multipart.text.plain.erb1
-rw-r--r--vendor/plugins/engines/test/app/views/notify_mail/multipart_html.html.erb1
-rw-r--r--vendor/plugins/engines/test/app/views/notify_mail/multipart_plain.html.erb1
-rw-r--r--vendor/plugins/engines/test/app/views/notify_mail/signup.text.plain.erb5
-rw-r--r--vendor/plugins/engines/test/app/views/plugin_mail/mail_from_plugin_with_application_template.text.plain.erb1
-rw-r--r--vendor/plugins/engines/test/app/views/plugin_mail/multipart_from_plugin_with_application_template_plain.html.erb1
-rw-r--r--vendor/plugins/engines/test/functional/controller_loading_test.rb51
-rw-r--r--vendor/plugins/engines/test/functional/exception_notification_compatibility_test.rb29
-rw-r--r--vendor/plugins/engines/test/functional/locale_loading_test.rb26
-rw-r--r--vendor/plugins/engines/test/functional/routes_test.rb29
-rw-r--r--vendor/plugins/engines/test/functional/view_helpers_test.rb37
-rw-r--r--vendor/plugins/engines/test/functional/view_loading_test.rb60
-rw-r--r--vendor/plugins/engines/test/lib/app_and_plugin_lib_model.rb3
-rw-r--r--vendor/plugins/engines/test/lib/engines_test_helper.rb42
-rw-r--r--vendor/plugins/engines/test/lib/render_information.rb7
-rw-r--r--vendor/plugins/engines/test/plugins/alpha_plugin/app/controllers/alpha_plugin_controller.rb8
-rw-r--r--vendor/plugins/engines/test/plugins/alpha_plugin/app/controllers/app_and_plugin_controller.rb5
-rw-r--r--vendor/plugins/engines/test/plugins/alpha_plugin/app/controllers/namespace/alpha_plugin_controller.rb5
-rw-r--r--vendor/plugins/engines/test/plugins/alpha_plugin/app/controllers/namespace/app_and_plugin_controller.rb5
-rw-r--r--vendor/plugins/engines/test/plugins/alpha_plugin/app/controllers/namespace/shared_plugin_controller.rb5
-rw-r--r--vendor/plugins/engines/test/plugins/alpha_plugin/app/controllers/shared_plugin_controller.rb5
-rw-r--r--vendor/plugins/engines/test/plugins/alpha_plugin/app/models/alpha_plugin_model.rb3
-rw-r--r--vendor/plugins/engines/test/plugins/alpha_plugin/app/models/app_and_plugin_model.rb7
-rw-r--r--vendor/plugins/engines/test/plugins/alpha_plugin/app/models/shared_plugin_model.rb3
-rw-r--r--vendor/plugins/engines/test/plugins/alpha_plugin/app/views/alpha_plugin/a_view.html.erb1
-rw-r--r--vendor/plugins/engines/test/plugins/alpha_plugin/app/views/app_and_plugin/a_view.html.erb1
-rw-r--r--vendor/plugins/engines/test/plugins/alpha_plugin/app/views/layouts/plugin_layout.erb1
-rw-r--r--vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/alpha_plugin/a_view.html.erb1
-rw-r--r--vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/app_and_plugin/a_view.html.erb1
-rw-r--r--vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/shared_plugin/a_view.html.erb1
-rw-r--r--vendor/plugins/engines/test/plugins/alpha_plugin/app/views/shared_plugin/a_view.html.erb1
-rw-r--r--vendor/plugins/engines/test/plugins/alpha_plugin/lib/alpha_plugin_lib_model.rb3
-rw-r--r--vendor/plugins/engines/test/plugins/alpha_plugin/lib/app_and_plugin_lib_model.rb7
-rw-r--r--vendor/plugins/engines/test/plugins/alpha_plugin/locales/en.yml3
-rw-r--r--vendor/plugins/engines/test/plugins/beta_plugin/app/controllers/app_and_plugin_controller.rb5
-rw-r--r--vendor/plugins/engines/test/plugins/beta_plugin/app/controllers/namespace/shared_plugin_controller.rb5
-rw-r--r--vendor/plugins/engines/test/plugins/beta_plugin/app/controllers/shared_plugin_controller.rb5
-rw-r--r--vendor/plugins/engines/test/plugins/beta_plugin/app/models/shared_plugin_model.rb3
-rw-r--r--vendor/plugins/engines/test/plugins/beta_plugin/app/views/namespace/shared_plugin/a_view.html.erb1
-rw-r--r--vendor/plugins/engines/test/plugins/beta_plugin/app/views/shared_plugin/a_view.html.erb1
-rw-r--r--vendor/plugins/engines/test/plugins/beta_plugin/init.rb1
-rw-r--r--vendor/plugins/engines/test/plugins/beta_plugin/locales/en.yml3
-rw-r--r--vendor/plugins/engines/test/plugins/not_a_plugin/public/should_not_be_copied.txt0
-rw-r--r--vendor/plugins/engines/test/plugins/test_assets/app/controllers/assets_controller.rb2
-rw-r--r--vendor/plugins/engines/test/plugins/test_assets/app/views/assets/index.html.erb4
-rw-r--r--vendor/plugins/engines/test/plugins/test_assets/app/views/layouts/assets.html.erb3
-rw-r--r--vendor/plugins/engines/test/plugins/test_assets/init.rb0
-rw-r--r--vendor/plugins/engines/test/plugins/test_assets/public/file.txt0
-rw-r--r--vendor/plugins/engines/test/plugins/test_assets/public/subfolder/file_in_subfolder.txt0
-rw-r--r--vendor/plugins/engines/test/plugins/test_assets_with_assets_directory/assets/file.txt0
-rw-r--r--vendor/plugins/engines/test/plugins/test_assets_with_assets_directory/assets/subfolder/file_in_subfolder.txt0
-rw-r--r--vendor/plugins/engines/test/plugins/test_assets_with_assets_directory/init.rb0
-rw-r--r--vendor/plugins/engines/test/plugins/test_assets_with_no_subdirectory/assets/file.txt0
-rw-r--r--vendor/plugins/engines/test/plugins/test_assets_with_no_subdirectory/init.rb0
-rw-r--r--vendor/plugins/engines/test/plugins/test_code_mixing/app/things/thing.rb3
-rw-r--r--vendor/plugins/engines/test/plugins/test_code_mixing/init.rb1
-rw-r--r--vendor/plugins/engines/test/plugins/test_load_path/init.rb0
-rw-r--r--vendor/plugins/engines/test/plugins/test_migration/db/migrate/001_create_tests.rb11
-rw-r--r--vendor/plugins/engines/test/plugins/test_migration/db/migrate/002_create_others.rb11
-rw-r--r--vendor/plugins/engines/test/plugins/test_migration/db/migrate/003_create_extras.rb11
-rw-r--r--vendor/plugins/engines/test/plugins/test_migration/init.rb0
-rw-r--r--vendor/plugins/engines/test/plugins/test_plugin_mailing/app/models/plugin_mail.rb26
-rw-r--r--vendor/plugins/engines/test/plugins/test_plugin_mailing/app/views/plugin_mail/mail_from_plugin.erb1
-rw-r--r--vendor/plugins/engines/test/plugins/test_plugin_mailing/app/views/plugin_mail/multipart_from_plugin_html.html.erb1
-rw-r--r--vendor/plugins/engines/test/plugins/test_plugin_mailing/app/views/plugin_mail/multipart_from_plugin_plain.html.erb1
-rw-r--r--vendor/plugins/engines/test/plugins/test_plugin_mailing/app/views/plugin_mail/multipart_from_plugin_with_application_template_html.html.erb1
-rw-r--r--vendor/plugins/engines/test/plugins/test_plugin_mailing/app/views/plugin_mail/multipart_from_plugin_with_application_template_plain.html.erb1
-rw-r--r--vendor/plugins/engines/test/plugins/test_plugin_mailing/init.rb0
-rw-r--r--vendor/plugins/engines/test/plugins/test_routing/app/controllers/namespace/test_routing_controller.rb5
-rw-r--r--vendor/plugins/engines/test/plugins/test_routing/app/controllers/test_routing_controller.rb9
-rw-r--r--vendor/plugins/engines/test/plugins/test_routing/config/routes.rb4
-rw-r--r--vendor/plugins/engines/test/plugins/test_routing/init.rb0
-rw-r--r--vendor/plugins/engines/test/plugins/test_testing/app/README.txt1
-rw-r--r--vendor/plugins/engines/test/plugins/test_testing/init.rb0
-rw-r--r--vendor/plugins/engines/test/plugins/test_testing/test/fixtures/testing_fixtures.yml0
-rw-r--r--vendor/plugins/engines/test/plugins/test_testing/test/unit/override_test.rb13
-rw-r--r--vendor/plugins/engines/test/unit/action_mailer_test.rb54
-rw-r--r--vendor/plugins/engines/test/unit/arbitrary_code_mixing_test.rb41
-rw-r--r--vendor/plugins/engines/test/unit/assets_test.rb52
-rw-r--r--vendor/plugins/engines/test/unit/backwards_compat_test.rb8
-rw-r--r--vendor/plugins/engines/test/unit/load_path_test.rb58
-rw-r--r--vendor/plugins/engines/test/unit/migration_test.rb63
-rw-r--r--vendor/plugins/engines/test/unit/model_and_lib_test.rb37
-rw-r--r--vendor/plugins/engines/test/unit/plugins_test.rb11
-rw-r--r--vendor/plugins/engines/test/unit/test_testing/override_test.rb7
-rw-r--r--vendor/plugins/engines/test/unit/testing_test.rb19
-rw-r--r--vendor/plugins/prepend_engine_views/init.rb21
263 files changed, 1636 insertions, 440 deletions
diff --git a/app/controllers/application.rb b/app/controllers/application_controller.rb
index 6d6338ffa..59d117e4f 100644
--- a/app/controllers/application.rb
+++ b/app/controllers/application_controller.rb
@@ -20,12 +20,7 @@ require 'cgi'
class ApplicationController < ActionController::Base
include Redmine::I18n
-
- # In case the cookie store secret changes
- rescue_from CGI::Session::CookieStore::TamperedWithCookie do |exception|
- render :text => 'Your session was invalid and has been reset. Please, reload this page.', :status => 500
- end
-
+
layout 'base'
before_filter :user_setup, :check_if_login_required, :set_localization
diff --git a/app/controllers/repositories_controller.rb b/app/controllers/repositories_controller.rb
index 938ace9ba..42405468f 100644
--- a/app/controllers/repositories_controller.rb
+++ b/app/controllers/repositories_controller.rb
@@ -259,7 +259,7 @@ private
def graph_commits_per_author(repository)
commits_by_author = repository.changesets.count(:all, :group => :committer)
- commits_by_author.sort! {|x, y| x.last <=> y.last}
+ commits_by_author.to_a.sort! {|x, y| x.last <=> y.last}
changes_by_author = repository.changes.count(:all, :group => :committer)
h = changes_by_author.inject({}) {|o, i| o[i.first] = i.last; o}
diff --git a/app/models/mailer.rb b/app/models/mailer.rb
index fbe76ac3a..1a2e35e7d 100644
--- a/app/models/mailer.rb
+++ b/app/models/mailer.rb
@@ -16,6 +16,7 @@
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
class Mailer < ActionMailer::Base
+ layout 'mailer'
helper :application
helper :issues
helper :custom_fields
@@ -45,6 +46,7 @@ class Mailer < ActionMailer::Base
subject "[#{issue.project.name} - #{issue.tracker.name} ##{issue.id}] (#{issue.status.name}) #{issue.subject}"
body :issue => issue,
:issue_url => url_for(:controller => 'issues', :action => 'show', :id => issue)
+ render_multipart('issue_add', body)
end
# Builds a tmail object used to email recipients of the edited issue.
@@ -71,6 +73,8 @@ class Mailer < ActionMailer::Base
body :issue => issue,
:journal => journal,
:issue_url => url_for(:controller => 'issues', :action => 'show', :id => issue)
+
+ render_multipart('issue_edit', body)
end
def reminder(user, issues, days)
@@ -80,6 +84,7 @@ class Mailer < ActionMailer::Base
body :issues => issues,
:days => days,
:issues_url => url_for(:controller => 'issues', :action => 'index', :set_filter => 1, :assigned_to_id => user.id, :sort_key => 'due_date', :sort_order => 'asc')
+ render_multipart('reminder', body)
end
# Builds a tmail object used to email users belonging to the added document's project.
@@ -93,6 +98,7 @@ class Mailer < ActionMailer::Base
subject "[#{document.project.name}] #{l(:label_document_new)}: #{document.title}"
body :document => document,
:document_url => url_for(:controller => 'documents', :action => 'show', :id => document)
+ render_multipart('document_added', body)
end
# Builds a tmail object used to email recipients of a project when an attachements are added.
@@ -121,6 +127,7 @@ class Mailer < ActionMailer::Base
body :attachments => attachments,
:added_to => added_to,
:added_to_url => added_to_url
+ render_multipart('attachments_added', body)
end
# Builds a tmail object used to email recipients of a news' project when a news item is added.
@@ -135,6 +142,7 @@ class Mailer < ActionMailer::Base
subject "[#{news.project.name}] #{l(:label_news)}: #{news.title}"
body :news => news,
:news_url => url_for(:controller => 'news', :action => 'show', :id => news)
+ render_multipart('news_added', body)
end
# Builds a tmail object used to email the specified recipients of the specified message that was posted.
@@ -151,6 +159,7 @@ class Mailer < ActionMailer::Base
subject "[#{message.board.project.name} - #{message.board.name} - msg#{message.root.id}] #{message.subject}"
body :message => message,
:message_url => url_for(:controller => 'messages', :action => 'show', :board_id => message.board_id, :id => message.root)
+ render_multipart('message_posted', body)
end
# Builds a tmail object used to email the recipients of a project of the specified wiki content was added.
@@ -167,6 +176,7 @@ class Mailer < ActionMailer::Base
subject "[#{wiki_content.project.name}] #{l(:mail_subject_wiki_content_added, :page => wiki_content.page.pretty_title)}"
body :wiki_content => wiki_content,
:wiki_content_url => url_for(:controller => 'wiki', :action => 'index', :id => wiki_content.project, :page => wiki_content.page.title)
+ render_multipart('wiki_content_added', body)
end
# Builds a tmail object used to email the recipients of a project of the specified wiki content was updated.
@@ -184,6 +194,7 @@ class Mailer < ActionMailer::Base
body :wiki_content => wiki_content,
:wiki_content_url => url_for(:controller => 'wiki', :action => 'index', :id => wiki_content.project, :page => wiki_content.page.title),
:wiki_diff_url => url_for(:controller => 'wiki', :action => 'diff', :id => wiki_content.project, :page => wiki_content.page.title, :version => wiki_content.version)
+ render_multipart('wiki_content_updated', body)
end
# Builds a tmail object used to email the specified user their account information.
@@ -198,6 +209,7 @@ class Mailer < ActionMailer::Base
body :user => user,
:password => password,
:login_url => url_for(:controller => 'account', :action => 'login')
+ render_multipart('account_information', body)
end
# Builds a tmail object used to email all active administrators of an account activation request.
@@ -211,6 +223,7 @@ class Mailer < ActionMailer::Base
subject l(:mail_subject_account_activation_request, Setting.app_title)
body :user => user,
:url => url_for(:controller => 'users', :action => 'index', :status => User::STATUS_REGISTERED, :sort_key => 'created_on', :sort_order => 'desc')
+ render_multipart('account_activation_request', body)
end
# Builds a tmail object used to email the specified user that their account was activated by an administrator.
@@ -224,6 +237,7 @@ class Mailer < ActionMailer::Base
subject l(:mail_subject_register, Setting.app_title)
body :user => user,
:login_url => url_for(:controller => 'account', :action => 'login')
+ render_multipart('account_activated', body)
end
def lost_password(token)
@@ -232,6 +246,7 @@ class Mailer < ActionMailer::Base
subject l(:mail_subject_lost_password, Setting.app_title)
body :token => token,
:url => url_for(:controller => 'account', :action => 'lost_password', :token => token.value)
+ render_multipart('lost_password', body)
end
def register(token)
@@ -240,6 +255,7 @@ class Mailer < ActionMailer::Base
subject l(:mail_subject_register, Setting.app_title)
body :token => token,
:url => url_for(:controller => 'account', :action => 'activate', :token => token.value)
+ render_multipart('register', body)
end
def test(user)
@@ -247,6 +263,7 @@ class Mailer < ActionMailer::Base
recipients user.mail
subject 'Redmine test'
body :url => url_for(:controller => 'welcome')
+ render_multipart('test', body)
end
# Overrides default deliver! method to prevent from sending an email
@@ -327,26 +344,17 @@ class Mailer < ActionMailer::Base
super
end
- # Renders a message with the corresponding layout
- def render_message(method_name, body)
- layout = method_name.to_s.match(%r{text\.html\.(rhtml|rxml)}) ? 'layout.text.html.rhtml' : 'layout.text.plain.rhtml'
- body[:content_for_layout] = render(:file => method_name, :body => body)
- ActionView::Base.new(template_root, body, self).render(:file => "mailer/#{layout}", :use_full_path => true)
- end
-
- # for the case of plain text only
- def body(*params)
- value = super(*params)
- if Setting.plain_text_mail?
- templates = Dir.glob("#{template_path}/#{@template}.text.plain.{rhtml,erb}")
- unless String === @body or templates.empty?
- template = File.basename(templates.first)
- @body[:content_for_layout] = render(:file => template, :body => @body)
- @body = ActionView::Base.new(template_root, @body, self).render(:file => "mailer/layout.text.plain.rhtml", :use_full_path => true)
- return @body
- end
- end
- return value
+ # Rails 2.3 has problems rendering implicit multipart messages with
+ # layouts so this method will wrap an multipart messages with
+ # explicit parts.
+ #
+ # https://rails.lighthouseapp.com/projects/8994/tickets/2338-actionmailer-mailer-views-and-content-type
+ # https://rails.lighthouseapp.com/projects/8994/tickets/1799-actionmailer-doesnt-set-template_format-when-rendering-layouts
+
+ def render_multipart(method_name, body)
+ content_type "multipart/alternative"
+ part :content_type => "text/plain", :body => render(:file => "#{method_name}.text.plain.rhtml", :body => body, :layout => 'mailer.text.plain.erb')
+ part :content_type => "text/html", :body => render_message("#{method_name}.text.html.rhtml", body) unless Setting.plain_text_mail?
end
# Makes partial rendering work with Rails 1.2 (retro-compatibility)
diff --git a/app/views/mailer/layout.text.html.rhtml b/app/views/layouts/mailer.text.html.erb
index 83d967864..83d967864 100644
--- a/app/views/mailer/layout.text.html.rhtml
+++ b/app/views/layouts/mailer.text.html.erb
diff --git a/app/views/mailer/layout.text.plain.rhtml b/app/views/layouts/mailer.text.plain.erb
index 1cbcbc236..1cbcbc236 100644
--- a/app/views/mailer/layout.text.plain.rhtml
+++ b/app/views/layouts/mailer.text.plain.erb
diff --git a/app/views/settings/_authentication.rhtml b/app/views/settings/_authentication.rhtml
index 25d344da6..f4b8dbf52 100644
--- a/app/views/settings/_authentication.rhtml
+++ b/app/views/settings/_authentication.rhtml
@@ -2,7 +2,9 @@
<div class="box tabular settings">
<p><label><%= l(:setting_login_required) %></label>
-<%= check_box_tag 'settings[login_required]', 1, Setting.login_required? %><%= hidden_field_tag 'settings[login_required]', 0 %></p>
+<%= hidden_field_tag 'settings[login_required]', 0 %>
+<%= check_box_tag 'settings[login_required]', 1, Setting.login_required? %>
+</p>
<p><label><%= l(:setting_autologin) %></label>
<%= select_tag 'settings[autologin]', options_for_select( [[l(:label_disabled), "0"]] + [1, 7, 30, 365].collect{|days| [l('datetime.distance_in_words.x_days', :count => days), days.to_s]}, Setting.autologin) %></p>
@@ -19,10 +21,14 @@
<%= text_field_tag 'settings[password_min_length]', Setting.password_min_length, :size => 6 %></p>
<p><label><%= l(:label_password_lost) %></label>
-<%= check_box_tag 'settings[lost_password]', 1, Setting.lost_password? %><%= hidden_field_tag 'settings[lost_password]', 0 %></p>
+<%= hidden_field_tag 'settings[lost_password]', 0 %>
+<%= check_box_tag 'settings[lost_password]', 1, Setting.lost_password? %>
+</p>
<p><label><%= l(:setting_openid) %></label>
-<%= check_box_tag 'settings[openid]', 1, Setting.openid?, :disabled => !Object.const_defined?(:OpenID) %><%= hidden_field_tag 'settings[openid]', 0 %></p>
+<%= hidden_field_tag 'settings[openid]', 0 %>
+<%= check_box_tag 'settings[openid]', 1, Setting.openid?, :disabled => !Object.const_defined?(:OpenID) %>
+</p>
</div>
<div style="float:right;">
diff --git a/app/views/settings/_display.rhtml b/app/views/settings/_display.rhtml
index a14ff47ce..984f762e4 100644
--- a/app/views/settings/_display.rhtml
+++ b/app/views/settings/_display.rhtml
@@ -17,7 +17,9 @@
<%= select_tag 'settings[user_format]', options_for_select( @options[:user_format], Setting.user_format.to_s ) %></p>
<p><label><%= l(:setting_gravatar_enabled) %></label>
-<%= check_box_tag 'settings[gravatar_enabled]', 1, Setting.gravatar_enabled? %><%= hidden_field_tag 'settings[gravatar_enabled]', 0 %></p>
+<%= hidden_field_tag 'settings[gravatar_enabled]', 0 %>
+<%= check_box_tag 'settings[gravatar_enabled]', 1, Setting.gravatar_enabled? %>
+</p>
</div>
<%= submit_tag l(:button_save) %>
diff --git a/app/views/settings/_issues.rhtml b/app/views/settings/_issues.rhtml
index 0703661e0..b0277fab3 100644
--- a/app/views/settings/_issues.rhtml
+++ b/app/views/settings/_issues.rhtml
@@ -2,10 +2,14 @@
<div class="box tabular settings">
<p><label><%= l(:setting_cross_project_issue_relations) %></label>
-<%= check_box_tag 'settings[cross_project_issue_relations]', 1, Setting.cross_project_issue_relations? %><%= hidden_field_tag 'settings[cross_project_issue_relations]', 0 %></p>
+<%= hidden_field_tag 'settings[cross_project_issue_relations]', 0 %>
+<%= check_box_tag 'settings[cross_project_issue_relations]', 1, Setting.cross_project_issue_relations? %>
+</p>
<p><label><%= l(:setting_display_subprojects_issues) %></label>
-<%= check_box_tag 'settings[display_subprojects_issues]', 1, Setting.display_subprojects_issues? %><%= hidden_field_tag 'settings[display_subprojects_issues]', 0 %></p>
+<%= hidden_field_tag 'settings[display_subprojects_issues]', 0 %>
+<%= check_box_tag 'settings[display_subprojects_issues]', 1, Setting.display_subprojects_issues? %>
+</p>
<p><label><%= l(:setting_issues_export_limit) %></label>
<%= text_field_tag 'settings[issues_export_limit]', Setting.issues_export_limit, :size => 6 %></p>
diff --git a/app/views/settings/_mail_handler.rhtml b/app/views/settings/_mail_handler.rhtml
index 830b1ba4a..8d83358b7 100644
--- a/app/views/settings/_mail_handler.rhtml
+++ b/app/views/settings/_mail_handler.rhtml
@@ -2,9 +2,10 @@
<div class="box tabular settings">
<p><label><%= l(:setting_mail_handler_api_enabled) %></label>
+<%= hidden_field_tag 'settings[mail_handler_api_enabled]', 0 %>
<%= check_box_tag 'settings[mail_handler_api_enabled]', 1, Setting.mail_handler_api_enabled?,
:onclick => "if (this.checked) { Form.Element.enable('settings_mail_handler_api_key'); } else { Form.Element.disable('settings_mail_handler_api_key'); }" %>
-<%= hidden_field_tag 'settings[mail_handler_api_enabled]', 0 %></p>
+</p>
<p><label><%= l(:setting_mail_handler_api_key) %></label>
<%= text_field_tag 'settings[mail_handler_api_key]', Setting.mail_handler_api_key,
diff --git a/app/views/settings/_notifications.rhtml b/app/views/settings/_notifications.rhtml
index bc0141187..1b1b294b2 100644
--- a/app/views/settings/_notifications.rhtml
+++ b/app/views/settings/_notifications.rhtml
@@ -6,12 +6,14 @@
<%= text_field_tag 'settings[mail_from]', Setting.mail_from, :size => 60 %></p>
<p><label><%= l(:setting_bcc_recipients) %></label>
+<%= hidden_field_tag 'settings[bcc_recipients]', 0 %>
<%= check_box_tag 'settings[bcc_recipients]', 1, Setting.bcc_recipients? %>
-<%= hidden_field_tag 'settings[bcc_recipients]', 0 %></p>
+</p>
<p><label><%= l(:setting_plain_text_mail) %></label>
+<%= hidden_field_tag 'settings[plain_text_mail]', 0 %>
<%= check_box_tag 'settings[plain_text_mail]', 1, Setting.plain_text_mail? %>
-<%= hidden_field_tag 'settings[plain_text_mail]', 0 %></p>
+</p>
</div>
<fieldset class="box" id="notified_events"><legend><%=l(:text_select_mail_notifications)%></legend>
diff --git a/app/views/settings/_projects.rhtml b/app/views/settings/_projects.rhtml
index 2f831c8fd..704905af2 100644
--- a/app/views/settings/_projects.rhtml
+++ b/app/views/settings/_projects.rhtml
@@ -2,10 +2,14 @@
<div class="box tabular settings">
<p><label><%= l(:setting_default_projects_public) %></label>
-<%= check_box_tag 'settings[default_projects_public]', 1, Setting.default_projects_public? %><%= hidden_field_tag 'settings[default_projects_public]', 0 %></p>
+<%= hidden_field_tag 'settings[default_projects_public]', 0 %>
+<%= check_box_tag 'settings[default_projects_public]', 1, Setting.default_projects_public? %>
+</p>
<p><label><%= l(:setting_sequential_project_identifiers) %></label>
-<%= check_box_tag 'settings[sequential_project_identifiers]', 1, Setting.sequential_project_identifiers? %><%= hidden_field_tag 'settings[sequential_project_identifiers]', 0 %></p>
+<%= hidden_field_tag 'settings[sequential_project_identifiers]', 0 %>
+<%= check_box_tag 'settings[sequential_project_identifiers]', 1, Setting.sequential_project_identifiers? %>
+</p>
<p><label><%= l(:setting_new_project_user_role_id) %></label>
<%= select_tag('settings[new_project_user_role_id]', options_for_select([["--- #{l(:actionview_instancetag_blank_option)} ---", '']] + Role.find_all_givable.collect {|r| [r.name, r.id]}, Setting.new_project_user_role_id.to_i)) %></p>
diff --git a/app/views/settings/_repositories.rhtml b/app/views/settings/_repositories.rhtml
index a20fc5131..4f07f053a 100644
--- a/app/views/settings/_repositories.rhtml
+++ b/app/views/settings/_repositories.rhtml
@@ -2,10 +2,14 @@
<div class="box tabular settings">
<p><label><%= l(:setting_autofetch_changesets) %></label>
-<%= check_box_tag 'settings[autofetch_changesets]', 1, Setting.autofetch_changesets? %><%= hidden_field_tag 'settings[autofetch_changesets]', 0 %></p>
+<%= hidden_field_tag 'settings[autofetch_changesets]', 0 %>
+<%= check_box_tag 'settings[autofetch_changesets]', 1, Setting.autofetch_changesets? %>
+</p>
<p><label><%= l(:setting_sys_api_enabled) %></label>
-<%= check_box_tag 'settings[sys_api_enabled]', 1, Setting.sys_api_enabled? %><%= hidden_field_tag 'settings[sys_api_enabled]', 0 %></p>
+<%= hidden_field_tag 'settings[sys_api_enabled]', 0 %>
+<%= check_box_tag 'settings[sys_api_enabled]', 1, Setting.sys_api_enabled? %>
+</p>
<p><label><%= l(:setting_enabled_scm) %></label>
<% REDMINE_SUPPORTED_SCM.each do |scm| -%>
diff --git a/config/boot.rb b/config/boot.rb
index 67cc517f2..dd5e3b691 100644
--- a/config/boot.rb
+++ b/config/boot.rb
@@ -1,7 +1,7 @@
# Don't change this file!
# Configure your app in config/environment.rb and config/environments/*.rb
-RAILS_ROOT = File.expand_path("#{File.dirname(__FILE__)}/..") unless defined?(RAILS_ROOT)
+RAILS_ROOT = "#{File.dirname(__FILE__)}/.." unless defined?(RAILS_ROOT)
module Rails
class << self
@@ -44,6 +44,7 @@ module Rails
def load_initializer
require "#{RAILS_ROOT}/vendor/rails/railties/lib/initializer"
Rails::Initializer.run(:install_gem_spec_stubs)
+ Rails::GemDependency.add_frozen_gem_path
end
end
@@ -81,8 +82,8 @@ module Rails
end
def load_rubygems
+ min_version = '1.3.2'
require 'rubygems'
- min_version = '1.3.1'
unless rubygems_version >= min_version
$stderr.puts %Q(Rails requires RubyGems >= #{min_version} (you have #{rubygems_version}). Please `gem update --system` and try again.)
exit 1
diff --git a/config/environment.rb b/config/environment.rb
index f98968bcb..d173db412 100644
--- a/config/environment.rb
+++ b/config/environment.rb
@@ -5,7 +5,7 @@
# ENV['RAILS_ENV'] ||= 'production'
# Specifies gem version of Rails to use when vendor/rails is not present
-RAILS_GEM_VERSION = '2.2.2' unless defined? RAILS_GEM_VERSION
+RAILS_GEM_VERSION = '2.3.4' unless defined? RAILS_GEM_VERSION
# Bootstrap the Rails environment, frameworks, and default configuration
require File.join(File.dirname(__FILE__), 'boot')
diff --git a/config/initializers/10-patches.rb b/config/initializers/10-patches.rb
index f4ae06cd6..94d40faaf 100644
--- a/config/initializers/10-patches.rb
+++ b/config/initializers/10-patches.rb
@@ -33,7 +33,7 @@ module ActiveRecord
end
else
attr_name = @base.class.human_attribute_name(attr)
- full_messages << attr_name + ' ' + message
+ full_messages << attr_name + ' ' + message.to_s
end
end
end
diff --git a/config/initializers/backtrace_silencers.rb b/config/initializers/backtrace_silencers.rb
new file mode 100644
index 000000000..c2169ed01
--- /dev/null
+++ b/config/initializers/backtrace_silencers.rb
@@ -0,0 +1,7 @@
+# Be sure to restart your server when you modify this file.
+
+# You can add backtrace silencers for libraries that you're using but don't wish to see in your backtraces.
+# Rails.backtrace_cleaner.add_silencer { |line| line =~ /my_noisy_library/ }
+
+# You can also remove all the silencers if you're trying do debug a problem that might steem from framework code.
+# Rails.backtrace_cleaner.remove_silencers! \ No newline at end of file
diff --git a/config/initializers/inflections.rb b/config/initializers/inflections.rb
new file mode 100644
index 000000000..d531b8bb8
--- /dev/null
+++ b/config/initializers/inflections.rb
@@ -0,0 +1,10 @@
+# Be sure to restart your server when you modify this file.
+
+# Add new inflection rules using the following format
+# (all these examples are active by default):
+# ActiveSupport::Inflector.inflections do |inflect|
+# inflect.plural /^(ox)$/i, '\1en'
+# inflect.singular /^(ox)en/i, '\1'
+# inflect.irregular 'person', 'people'
+# inflect.uncountable %w( fish sheep )
+# end
diff --git a/config/locales/bg.yml b/config/locales/bg.yml
index e83c5d893..a66a86bf3 100644
--- a/config/locales/bg.yml
+++ b/config/locales/bg.yml
@@ -59,6 +59,22 @@ bg:
over_x_years:
one: "over 1 year"
other: "over {{count}} years"
+
+ number:
+ human:
+ format:
+ precision: 1
+ delimiter: ""
+ storage_units:
+ format: "%n %u"
+ units:
+ kb: KB
+ tb: TB
+ gb: GB
+ byte:
+ one: Byte
+ other: Bytes
+ mb: 'MB'
# Used in array.to_sentence.
support:
diff --git a/config/locales/bs.yml b/config/locales/bs.yml
index c03b5aecc..0a5536bdc 100644
--- a/config/locales/bs.yml
+++ b/config/locales/bs.yml
@@ -83,9 +83,16 @@ bs:
format:
delimiter: ""
precision: 1
-
-
-
+ storage_units:
+ format: "%n %u"
+ units:
+ byte:
+ one: "Byte"
+ other: "Bytes"
+ kb: "KB"
+ mb: "MB"
+ gb: "GB"
+ tb: "TB"
# Used in array.to_sentence.
support:
diff --git a/config/locales/ca.yml b/config/locales/ca.yml
index 45f4a644f..7315b1cd6 100644
--- a/config/locales/ca.yml
+++ b/config/locales/ca.yml
@@ -59,6 +59,22 @@ ca:
over_x_years:
one: "més d'un any"
other: "més de {{count}} anys"
+
+ number:
+ human:
+ format:
+ delimiter: ""
+ precision: 1
+ storage_units:
+ format: "%n %u"
+ units:
+ byte:
+ one: "Byte"
+ other: "Bytes"
+ kb: "KB"
+ mb: "MB"
+ gb: "GB"
+ tb: "TB"
# Used in array.to_sentence.
support:
diff --git a/config/locales/cs.yml b/config/locales/cs.yml
index 087da5fbe..59e1b95f9 100644
--- a/config/locales/cs.yml
+++ b/config/locales/cs.yml
@@ -59,6 +59,22 @@ cs:
over_x_years:
one: "více než 1 rok"
other: "více než {{count}} roky"
+
+ number:
+ human:
+ format:
+ precision: 1
+ delimiter: ""
+ storage_units:
+ format: "%n %u"
+ units:
+ kb: KB
+ tb: TB
+ gb: GB
+ byte:
+ one: Byte
+ other: Bytes
+ mb: MB
# Used in array.to_sentence.
support:
diff --git a/config/locales/da.yml b/config/locales/da.yml
index ec0386ab5..2453ec9ab 100644
--- a/config/locales/da.yml
+++ b/config/locales/da.yml
@@ -85,7 +85,16 @@ da:
# separator:
delimiter: ""
precision: 1
- storage_units: [Bytes, KB, MB, GB, TB]
+ storage_units:
+ format: "%n %u"
+ units:
+ byte:
+ one: "Byte"
+ other: "Bytes"
+ kb: "KB"
+ mb: "MB"
+ gb: "GB"
+ tb: "TB"
percentage:
format:
# separator:
diff --git a/config/locales/de.yml b/config/locales/de.yml
index da3e8935c..da700a6e4 100644
--- a/config/locales/de.yml
+++ b/config/locales/de.yml
@@ -83,6 +83,16 @@ de:
format:
delimiter: ""
precision: 1
+ storage_units:
+ format: "%n %u"
+ units:
+ byte:
+ one: "Byte"
+ other: "Bytes"
+ kb: "KB"
+ mb: "MB"
+ gb: "GB"
+ tb: "TB"
support:
array:
diff --git a/config/locales/el.yml b/config/locales/el.yml
index 8e20ed5c0..479b440d4 100644
--- a/config/locales/el.yml
+++ b/config/locales/el.yml
@@ -63,6 +63,22 @@ el:
one: "πάνω από 1 χρόνο"
other: "πάνω από {{count}} χρόνια"
+ number:
+ human:
+ format:
+ precision: 1
+ delimiter: ""
+ storage_units:
+ format: "%n %u"
+ units:
+ kb: KB
+ tb: TB
+ gb: GB
+ byte:
+ one: Byte
+ other: Bytes
+ mb: MB
+
# Used in array.to_sentence.
support:
array:
diff --git a/config/locales/en.yml b/config/locales/en.yml
index 190a6d797..0b30843e9 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -59,6 +59,23 @@ en:
over_x_years:
one: "over 1 year"
other: "over {{count}} years"
+
+ number:
+ human:
+ format:
+ delimiter: ""
+ precision: 1
+ storage_units:
+ format: "%n %u"
+ units:
+ byte:
+ one: "Byte"
+ other: "Bytes"
+ kb: "KB"
+ mb: "MB"
+ gb: "GB"
+ tb: "TB"
+
# Used in array.to_sentence.
support:
diff --git a/config/locales/es.yml b/config/locales/es.yml
index af21eeff3..fd1a6405d 100644
--- a/config/locales/es.yml
+++ b/config/locales/es.yml
@@ -47,6 +47,16 @@ es:
# separator:
delimiter: ""
precision: 1
+ storage_units:
+ format: "%n %u"
+ units:
+ byte:
+ one: "Byte"
+ other: "Bytes"
+ kb: "KB"
+ mb: "MB"
+ gb: "GB"
+ tb: "TB"
# Used in distance_of_time_in_words(), distance_of_time_in_words_to_now(), time_ago_in_words()
datetime:
diff --git a/config/locales/fi.yml b/config/locales/fi.yml
index 2a67e7243..b0e00b00c 100644
--- a/config/locales/fi.yml
+++ b/config/locales/fi.yml
@@ -61,7 +61,16 @@ fi:
format:
delimiter: ""
precision: 1
- storage_units: [Tavua, KB, MB, GB, TB]
+ storage_units:
+ format: "%n %u"
+ units:
+ byte:
+ one: "Tavua"
+ other: "Tavua"
+ kb: "KB"
+ mb: "MB"
+ gb: "GB"
+ tb: "TB"
datetime:
distance_in_words:
diff --git a/config/locales/fr.yml b/config/locales/fr.yml
index 7eb0f062b..e6231e8ef 100644
--- a/config/locales/fr.yml
+++ b/config/locales/fr.yml
@@ -84,7 +84,16 @@ fr:
human:
format:
precision: 2
- storage_units: [ Octet, ko, Mo, Go, To ]
+ storage_units:
+ format: "%n %u"
+ units:
+ byte:
+ one: "Octet"
+ other: "Octet"
+ kb: "ko"
+ mb: "Mo"
+ gb: "Go"
+ tb: "To"
support:
array:
diff --git a/config/locales/gl.yml b/config/locales/gl.yml
index 55bcd0b44..f8aab4b1e 100644
--- a/config/locales/gl.yml
+++ b/config/locales/gl.yml
@@ -33,6 +33,16 @@ gl:
# separator:
delimiter: ""
precision: 1
+ storage_units:
+ format: "%n %u"
+ units:
+ byte:
+ one: "Byte"
+ other: "Bytes"
+ kb: "KB"
+ mb: "MB"
+ gb: "GB"
+ tb: "TB"
date:
diff --git a/config/locales/he.yml b/config/locales/he.yml
index 423ebfbd5..8124ddac0 100644
--- a/config/locales/he.yml
+++ b/config/locales/he.yml
@@ -76,6 +76,17 @@ he:
unit: 'שח'
precision: 2
format: '%u %n'
+ human:
+ storage_units:
+ format: "%n %u"
+ units:
+ byte:
+ one: "Byte"
+ other: "Bytes"
+ kb: "KB"
+ mb: "MB"
+ gb: "GB"
+ tb: "TB"
support:
array:
diff --git a/config/locales/hu.yml b/config/locales/hu.yml
index 4d4500546..58fa75049 100644
--- a/config/locales/hu.yml
+++ b/config/locales/hu.yml
@@ -90,7 +90,16 @@
format:
delimiter: ""
precision: 1
- storage_units: [bájt, KB, MB, GB, TB]
+ storage_units:
+ format: "%n %u"
+ units:
+ byte:
+ one: "bájt"
+ other: "bájt"
+ kb: "KB"
+ mb: "MB"
+ gb: "GB"
+ tb: "TB"
support:
array:
diff --git a/config/locales/it.yml b/config/locales/it.yml
index 5cb022fbe..64d5daf86 100644
--- a/config/locales/it.yml
+++ b/config/locales/it.yml
@@ -74,6 +74,17 @@ it:
unit: '€'
precision: 2
format: '%n %u'
+ human:
+ storage_units:
+ format: "%n %u"
+ units:
+ byte:
+ one: "Byte"
+ other: "Bytes"
+ kb: "KB"
+ mb: "MB"
+ gb: "GB"
+ tb: "TB"
support:
array:
diff --git a/config/locales/ja.yml b/config/locales/ja.yml
index 0bc521fc3..107f84a33 100644
--- a/config/locales/ja.yml
+++ b/config/locales/ja.yml
@@ -96,6 +96,16 @@ ja:
format:
delimiter: ""
precision: 1
+ storage_units:
+ format: "%n %u"
+ units:
+ byte:
+ one: "Byte"
+ other: "Bytes"
+ kb: "KB"
+ mb: "MB"
+ gb: "GB"
+ tb: "TB"
activerecord:
errors:
diff --git a/config/locales/ko.yml b/config/locales/ko.yml
index e2e01cb99..7b06e4ac7 100644
--- a/config/locales/ko.yml
+++ b/config/locales/ko.yml
@@ -116,7 +116,16 @@ ko:
# separator:
delimiter: ""
precision: 1
- storage_units: [Bytes, KB, MB, GB, TB]
+ storage_units:
+ format: "%n %u"
+ units:
+ byte:
+ one: "Byte"
+ other: "Bytes"
+ kb: "KB"
+ mb: "MB"
+ gb: "GB"
+ tb: "TB"
# Used in array.to_sentence.
support:
diff --git a/config/locales/lt.yml b/config/locales/lt.yml
index 050fc1ce1..2c27f50cd 100644
--- a/config/locales/lt.yml
+++ b/config/locales/lt.yml
@@ -28,7 +28,16 @@ lt:
format:
delimiter: ""
precision: 1
- storage_units: [baitai, KB, MB, GB, TB]
+ storage_units:
+ format: "%n %u"
+ units:
+ byte:
+ one: "baitai"
+ other: "baitai"
+ kb: "KB"
+ mb: "MB"
+ gb: "GB"
+ tb: "TB"
datetime:
distance_in_words:
diff --git a/config/locales/nl.yml b/config/locales/nl.yml
index 4f858aba8..a53f76720 100644
--- a/config/locales/nl.yml
+++ b/config/locales/nl.yml
@@ -59,6 +59,22 @@ nl:
over_x_years:
one: "over 1 jaar"
other: "over {{count}} jaren"
+
+ number:
+ human:
+ format:
+ precision: 1
+ delimiter: ""
+ storage_units:
+ format: "%n %u"
+ units:
+ kb: KB
+ tb: TB
+ gb: GB
+ byte:
+ one: Byte
+ other: Bytes
+ mb: MB
# Used in array.to_sentence.
support:
diff --git a/config/locales/no.yml b/config/locales/no.yml
index 82b9d3252..fddcc2f94 100644
--- a/config/locales/no.yml
+++ b/config/locales/no.yml
@@ -67,6 +67,18 @@
format:
delimiter: ""
precision: 4
+ human:
+ storage_units:
+ format: "%n %u"
+ units:
+ byte:
+ one: "Byte"
+ other: "Bytes"
+ kb: "KB"
+ mb: "MB"
+ gb: "GB"
+ tb: "TB"
+
activerecord:
errors:
template:
diff --git a/config/locales/pl.yml b/config/locales/pl.yml
index 77850cae0..d7e4849b3 100644
--- a/config/locales/pl.yml
+++ b/config/locales/pl.yml
@@ -21,7 +21,16 @@ pl:
format:
delimiter: ""
precision: 1
- storage_units: [B, KB, MB, GB, TB]
+ storage_units:
+ format: "%n %u"
+ units:
+ byte:
+ one: "B"
+ other: "B"
+ kb: "KB"
+ mb: "MB"
+ gb: "GB"
+ tb: "TB"
date:
formats:
diff --git a/config/locales/pt-BR.yml b/config/locales/pt-BR.yml
index 578c4fa4e..23e571819 100644
--- a/config/locales/pt-BR.yml
+++ b/config/locales/pt-BR.yml
@@ -93,6 +93,16 @@ pt-BR:
format:
precision: 1
delimiter: '.'
+ storage_units:
+ format: "%n %u"
+ units:
+ byte:
+ one: "Byte"
+ other: "Bytes"
+ kb: "KB"
+ mb: "MB"
+ gb: "GB"
+ tb: "TB"
support:
array:
sentence_connector: "e"
diff --git a/config/locales/pt.yml b/config/locales/pt.yml
index 20b5b5330..1c444f674 100644
--- a/config/locales/pt.yml
+++ b/config/locales/pt.yml
@@ -83,6 +83,16 @@ pt:
format:
precision: 1
delimiter: ''
+ storage_units:
+ format: "%n %u"
+ units:
+ byte:
+ one: "Byte"
+ other: "Bytes"
+ kb: "KB"
+ mb: "MB"
+ gb: "GB"
+ tb: "TB"
activerecord:
errors:
diff --git a/config/locales/ro.yml b/config/locales/ro.yml
index dde7dace3..04eb98548 100644
--- a/config/locales/ro.yml
+++ b/config/locales/ro.yml
@@ -57,6 +57,22 @@ ro:
over_x_years:
one: "peste un an"
other: "peste {{count}} ani"
+
+ number:
+ human:
+ format:
+ precision: 1
+ delimiter: ""
+ storage_units:
+ format: "%n %u"
+ units:
+ kb: KB
+ tb: TB
+ gb: GB
+ byte:
+ one: Byte
+ other: Bytes
+ mb: MB
# Used in array.to_sentence.
support:
diff --git a/config/locales/sk.yml b/config/locales/sk.yml
index feb870d3e..6f3a641dc 100644
--- a/config/locales/sk.yml
+++ b/config/locales/sk.yml
@@ -59,6 +59,22 @@ sk:
over_x_years:
one: "cez 1 rok"
other: "cez {{count}} roky/ov"
+
+ number:
+ human:
+ format:
+ precision: 1
+ delimiter: ""
+ storage_units:
+ format: "%n %u"
+ units:
+ kb: KB
+ tb: TB
+ gb: GB
+ byte:
+ one: Byte
+ other: Bytes
+ mb: MB
# Used in array.to_sentence.
support:
diff --git a/config/locales/sl.yml b/config/locales/sl.yml
index d7434b99f..6881ac9c5 100644
--- a/config/locales/sl.yml
+++ b/config/locales/sl.yml
@@ -59,6 +59,22 @@ sl:
over_x_years:
one: "over 1 year"
other: "over {{count}} years"
+
+ number:
+ human:
+ format:
+ precision: 1
+ delimiter: ""
+ storage_units:
+ format: "%n %u"
+ units:
+ kb: KB
+ tb: TB
+ gb: GB
+ byte:
+ one: Byte
+ other: Bytes
+ mb: MB
# Used in array.to_sentence.
support:
diff --git a/config/locales/sr.yml b/config/locales/sr.yml
index c8aa7c26c..1edc4e1f0 100644
--- a/config/locales/sr.yml
+++ b/config/locales/sr.yml
@@ -81,6 +81,17 @@
unit: 'ДИН'
precision: 2
format: '%n %u'
+ human:
+ storage_units:
+ format: "%n %u"
+ units:
+ byte:
+ one: "Byte"
+ other: "Bytes"
+ kb: "KB"
+ mb: "MB"
+ gb: "GB"
+ tb: "TB"
support:
array:
diff --git a/config/locales/sv.yml b/config/locales/sv.yml
index d007017f3..f17c64d09 100644
--- a/config/locales/sv.yml
+++ b/config/locales/sv.yml
@@ -47,7 +47,16 @@ sv:
# separator:
delimiter: ""
# precision: 1
- storage_units: [Byte, KB, MB, GB, TB]
+ storage_units:
+ format: "%n %u"
+ units:
+ byte:
+ one: "Byte"
+ other: "Bytes"
+ kb: "KB"
+ mb: "MB"
+ gb: "GB"
+ tb: "TB"
# Used in distance_of_time_in_words(), distance_of_time_in_words_to_now(), time_ago_in_words()
datetime:
diff --git a/config/locales/th.yml b/config/locales/th.yml
index 49d55940d..98d3c3c2b 100644
--- a/config/locales/th.yml
+++ b/config/locales/th.yml
@@ -59,6 +59,22 @@ th:
over_x_years:
one: "over 1 year"
other: "over {{count}} years"
+
+ number:
+ human:
+ format:
+ precision: 1
+ delimiter: ""
+ storage_units:
+ format: "%n %u"
+ units:
+ kb: KB
+ tb: TB
+ gb: GB
+ byte:
+ one: Byte
+ other: Bytes
+ mb: MB
# Used in array.to_sentence.
support:
diff --git a/config/locales/tr.yml b/config/locales/tr.yml
index f7f57b134..d721eeb8f 100644
--- a/config/locales/tr.yml
+++ b/config/locales/tr.yml
@@ -92,6 +92,16 @@ tr:
delimiter: '.'
separator: ','
precision: 2
+ storage_units:
+ format: "%n %u"
+ units:
+ byte:
+ one: "Byte"
+ other: "Bytes"
+ kb: "KB"
+ mb: "MB"
+ gb: "GB"
+ tb: "TB"
support:
array:
diff --git a/config/locales/uk.yml b/config/locales/uk.yml
index dbb085d6e..8209cc4fc 100644
--- a/config/locales/uk.yml
+++ b/config/locales/uk.yml
@@ -59,6 +59,22 @@ uk:
over_x_years:
one: "over 1 year"
other: "over {{count}} years"
+
+ number:
+ human:
+ format:
+ precision: 1
+ delimiter: ""
+ storage_units:
+ format: "%n %u"
+ units:
+ kb: KB
+ tb: TB
+ gb: GB
+ byte:
+ one: Byte
+ other: Bytes
+ mb: MB
# Used in array.to_sentence.
support:
diff --git a/config/locales/vi.yml b/config/locales/vi.yml
index 383d1953f..69524197f 100644
--- a/config/locales/vi.yml
+++ b/config/locales/vi.yml
@@ -49,7 +49,16 @@ vi:
# separator:
delimiter: ""
precision: 1
- storage_units: [Bytes, KB, MB, GB, TB]
+ storage_units:
+ format: "%n %u"
+ units:
+ byte:
+ one: "Byte"
+ other: "Bytes"
+ kb: "KB"
+ mb: "MB"
+ gb: "GB"
+ tb: "TB"
# Used in distance_of_time_in_words(), distance_of_time_in_words_to_now(), time_ago_in_words()
datetime:
diff --git a/config/locales/zh-TW.yml b/config/locales/zh-TW.yml
index 4068b3c88..e9199c3d5 100644
--- a/config/locales/zh-TW.yml
+++ b/config/locales/zh-TW.yml
@@ -86,8 +86,9 @@
precision: 1
# 儲存單位輸出格式.
# %u 是儲存單位, %n 是數值 (預設值: 2 MB)
+ storage_units:
format: "%n %u"
- storage_units:
+ units:
byte:
one: "位元組 (B)"
other: "位元組 (B)"
diff --git a/config/locales/zh.yml b/config/locales/zh.yml
index b55462284..a064828b4 100644
--- a/config/locales/zh.yml
+++ b/config/locales/zh.yml
@@ -86,7 +86,16 @@ zh:
format:
delimiter: ""
precision: 1
- storage_units: [Bytes, KB, MB, GB, TB]
+ storage_units:
+ format: "%n %u"
+ units:
+ byte:
+ one: "Byte"
+ other: "Bytes"
+ kb: "KB"
+ mb: "MB"
+ gb: "GB"
+ tb: "TB"
support:
array:
diff --git a/config/routes.rb b/config/routes.rb
index 5357fc30f..3b790af14 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -6,11 +6,6 @@ ActionController::Routing::Routes.draw do |map|
# map.connect 'products/:id', :controller => 'catalog', :action => 'view'
# Keep in mind you can assign values other than :controller and :action
- # Allow Redmine plugins to map routes and potentially override them
- Rails.plugins.each do |plugin|
- map.from_plugin plugin.name.to_sym
- end
-
map.home '', :controller => 'welcome'
map.signin 'login', :controller => 'account', :action => 'login'
diff --git a/lib/tabular_form_builder.rb b/lib/tabular_form_builder.rb
index 5bf690bd4..8728266ba 100644
--- a/lib/tabular_form_builder.rb
+++ b/lib/tabular_form_builder.rb
@@ -43,7 +43,7 @@ class TabularFormBuilder < ActionView::Helpers::FormBuilder
return '' if options.delete(:no_label)
text = options[:label].is_a?(Symbol) ? l(options[:label]) : options[:label]
text ||= l(("field_" + field.to_s.gsub(/\_id$/, "")).to_sym)
- text << @template.content_tag("span", " *", :class => "required") if options.delete(:required)
+ text += @template.content_tag("span", " *", :class => "required") if options.delete(:required)
@template.content_tag("label", text,
:class => (@object && @object.errors[field] ? "error" : nil),
:for => (@object_name.to_s + "_" + field.to_s))
diff --git a/test/functional/account_controller_test.rb b/test/functional/account_controller_test.rb
index fb23e6bb7..8184fa312 100644
--- a/test/functional/account_controller_test.rb
+++ b/test/functional/account_controller_test.rb
@@ -21,7 +21,7 @@ require 'account_controller'
# Re-raise errors caught by the controller.
class AccountController; def rescue_action(e) raise e end; end
-class AccountControllerTest < Test::Unit::TestCase
+class AccountControllerTest < ActionController::TestCase
fixtures :users, :roles
def setup
diff --git a/test/functional/admin_controller_test.rb b/test/functional/admin_controller_test.rb
index 32965de4c..47091c42f 100644
--- a/test/functional/admin_controller_test.rb
+++ b/test/functional/admin_controller_test.rb
@@ -21,7 +21,7 @@ require 'admin_controller'
# Re-raise errors caught by the controller.
class AdminController; def rescue_action(e) raise e end; end
-class AdminControllerTest < Test::Unit::TestCase
+class AdminControllerTest < ActionController::TestCase
fixtures :projects, :users, :roles
def setup
diff --git a/test/functional/application_controller_test.rb b/test/functional/application_controller_test.rb
index 0232b6a4d..7e221c252 100644
--- a/test/functional/application_controller_test.rb
+++ b/test/functional/application_controller_test.rb
@@ -16,12 +16,12 @@
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
require File.dirname(__FILE__) + '/../test_helper'
-require 'application'
+require 'application_controller'
# Re-raise errors caught by the controller.
class ApplicationController; def rescue_action(e) raise e end; end
-class ApplicationControllerTest < Test::Unit::TestCase
+class ApplicationControllerTest < ActionController::TestCase
include Redmine::I18n
def setup
diff --git a/test/functional/attachments_controller_test.rb b/test/functional/attachments_controller_test.rb
index 3a4b89785..bf57349fe 100644
--- a/test/functional/attachments_controller_test.rb
+++ b/test/functional/attachments_controller_test.rb
@@ -22,7 +22,7 @@ require 'attachments_controller'
class AttachmentsController; def rescue_action(e) raise e end; end
-class AttachmentsControllerTest < Test::Unit::TestCase
+class AttachmentsControllerTest < ActionController::TestCase
fixtures :users, :projects, :roles, :members, :member_roles, :enabled_modules, :issues, :trackers, :attachments,
:versions, :wiki_pages, :wikis, :documents
diff --git a/test/functional/boards_controller_test.rb b/test/functional/boards_controller_test.rb
index eb9a50ea5..254ee9385 100644
--- a/test/functional/boards_controller_test.rb
+++ b/test/functional/boards_controller_test.rb
@@ -21,7 +21,7 @@ require 'boards_controller'
# Re-raise errors caught by the controller.
class BoardsController; def rescue_action(e) raise e end; end
-class BoardsControllerTest < Test::Unit::TestCase
+class BoardsControllerTest < ActionController::TestCase
fixtures :projects, :users, :members, :member_roles, :roles, :boards, :messages, :enabled_modules
def setup
diff --git a/test/functional/custom_fields_controller_test.rb b/test/functional/custom_fields_controller_test.rb
index 10af23563..5b27446bd 100644
--- a/test/functional/custom_fields_controller_test.rb
+++ b/test/functional/custom_fields_controller_test.rb
@@ -21,7 +21,7 @@ require 'custom_fields_controller'
# Re-raise errors caught by the controller.
class CustomFieldsController; def rescue_action(e) raise e end; end
-class CustomFieldsControllerTest < Test::Unit::TestCase
+class CustomFieldsControllerTest < ActionController::TestCase
fixtures :custom_fields, :trackers, :users
def setup
diff --git a/test/functional/documents_controller_test.rb b/test/functional/documents_controller_test.rb
index c0fe0957e..11c706596 100644
--- a/test/functional/documents_controller_test.rb
+++ b/test/functional/documents_controller_test.rb
@@ -21,7 +21,7 @@ require 'documents_controller'
# Re-raise errors caught by the controller.
class DocumentsController; def rescue_action(e) raise e end; end
-class DocumentsControllerTest < Test::Unit::TestCase
+class DocumentsControllerTest < ActionController::TestCase
fixtures :projects, :users, :roles, :members, :member_roles, :enabled_modules, :documents, :enumerations
def setup
diff --git a/test/functional/enumerations_controller_test.rb b/test/functional/enumerations_controller_test.rb
index afbe23aaa..8c66186f1 100644
--- a/test/functional/enumerations_controller_test.rb
+++ b/test/functional/enumerations_controller_test.rb
@@ -21,7 +21,7 @@ require 'enumerations_controller'
# Re-raise errors caught by the controller.
class EnumerationsController; def rescue_action(e) raise e end; end
-class EnumerationsControllerTest < Test::Unit::TestCase
+class EnumerationsControllerTest < ActionController::TestCase
fixtures :enumerations, :issues, :users
def setup
diff --git a/test/functional/groups_controller_test.rb b/test/functional/groups_controller_test.rb
index ac61db425..91fc42c34 100644
--- a/test/functional/groups_controller_test.rb
+++ b/test/functional/groups_controller_test.rb
@@ -21,7 +21,7 @@ require 'groups_controller'
# Re-raise errors caught by the controller.
class GroupsController; def rescue_action(e) raise e end; end
-class GroupsControllerTest < Test::Unit::TestCase
+class GroupsControllerTest < ActionController::TestCase
fixtures :projects, :users, :members, :member_roles
def setup
diff --git a/test/functional/issue_categories_controller_test.rb b/test/functional/issue_categories_controller_test.rb
index ffb87339d..3d1dd069a 100644
--- a/test/functional/issue_categories_controller_test.rb
+++ b/test/functional/issue_categories_controller_test.rb
@@ -21,7 +21,7 @@ require 'issue_categories_controller'
# Re-raise errors caught by the controller.
class IssueCategoriesController; def rescue_action(e) raise e end; end
-class IssueCategoriesControllerTest < Test::Unit::TestCase
+class IssueCategoriesControllerTest < ActionController::TestCase
fixtures :projects, :users, :members, :member_roles, :roles, :enabled_modules, :issue_categories
def setup
diff --git a/test/functional/issue_relations_controller_test.rb b/test/functional/issue_relations_controller_test.rb
index a23f64a96..85661749f 100644
--- a/test/functional/issue_relations_controller_test.rb
+++ b/test/functional/issue_relations_controller_test.rb
@@ -5,7 +5,7 @@ require 'issue_relations_controller'
class IssueRelationsController; def rescue_action(e) raise e end; end
-class IssueRelationsControllerTest < Test::Unit::TestCase
+class IssueRelationsControllerTest < ActionController::TestCase
fixtures :projects,
:users,
:roles,
diff --git a/test/functional/issues_controller_test.rb b/test/functional/issues_controller_test.rb
index 95e75b43b..0d282c127 100644
--- a/test/functional/issues_controller_test.rb
+++ b/test/functional/issues_controller_test.rb
@@ -21,7 +21,7 @@ require 'issues_controller'
# Re-raise errors caught by the controller.
class IssuesController; def rescue_action(e) raise e end; end
-class IssuesControllerTest < Test::Unit::TestCase
+class IssuesControllerTest < ActionController::TestCase
fixtures :projects,
:users,
:roles,
@@ -42,7 +42,8 @@ class IssuesControllerTest < Test::Unit::TestCase
:custom_fields_trackers,
:time_entries,
:journals,
- :journal_details
+ :journal_details,
+ :queries
def setup
@controller = IssuesController.new
@@ -452,14 +453,16 @@ class IssuesControllerTest < Test::Unit::TestCase
def test_post_new
@request.session[:user_id] = 2
- post :new, :project_id => 1,
- :issue => {:tracker_id => 3,
- :subject => 'This is the test_new issue',
- :description => 'This is the description',
- :priority_id => 5,
- :estimated_hours => '',
- :custom_field_values => {'2' => 'Value for field 2'}}
- assert_redirected_to :action => 'show'
+ assert_difference 'Issue.count' do
+ post :new, :project_id => 1,
+ :issue => {:tracker_id => 3,
+ :subject => 'This is the test_new issue',
+ :description => 'This is the description',
+ :priority_id => 5,
+ :estimated_hours => '',
+ :custom_field_values => {'2' => 'Value for field 2'}}
+ end
+ assert_redirected_to :controller => 'issues', :action => 'show', :id => Issue.last.id
issue = Issue.find_by_subject('This is the test_new issue')
assert_not_nil issue
@@ -483,12 +486,14 @@ class IssuesControllerTest < Test::Unit::TestCase
def test_post_new_without_custom_fields_param
@request.session[:user_id] = 2
- post :new, :project_id => 1,
- :issue => {:tracker_id => 1,
- :subject => 'This is the test_new issue',
- :description => 'This is the description',
- :priority_id => 5}
- assert_redirected_to :action => 'show'
+ assert_difference 'Issue.count' do
+ post :new, :project_id => 1,
+ :issue => {:tracker_id => 1,
+ :subject => 'This is the test_new issue',
+ :description => 'This is the description',
+ :priority_id => 5}
+ end
+ assert_redirected_to :controller => 'issues', :action => 'show', :id => Issue.last.id
end
def test_post_new_with_required_custom_field_and_without_custom_fields_param
@@ -536,14 +541,16 @@ class IssuesControllerTest < Test::Unit::TestCase
def test_post_new_should_send_a_notification
ActionMailer::Base.deliveries.clear
@request.session[:user_id] = 2
- post :new, :project_id => 1,
- :issue => {:tracker_id => 3,
- :subject => 'This is the test_new issue',
- :description => 'This is the description',
- :priority_id => 5,
- :estimated_hours => '',
- :custom_field_values => {'2' => 'Value for field 2'}}
- assert_redirected_to :action => 'show'
+ assert_difference 'Issue.count' do
+ post :new, :project_id => 1,
+ :issue => {:tracker_id => 3,
+ :subject => 'This is the test_new issue',
+ :description => 'This is the description',
+ :priority_id => 5,
+ :estimated_hours => '',
+ :custom_field_values => {'2' => 'Value for field 2'}}
+ end
+ assert_redirected_to :controller => 'issues', :action => 'show', :id => Issue.last.id
assert_equal 1, ActionMailer::Base.deliveries.size
end
diff --git a/test/functional/journals_controller_test.rb b/test/functional/journals_controller_test.rb
index ae112ab6f..0a11bab3e 100644
--- a/test/functional/journals_controller_test.rb
+++ b/test/functional/journals_controller_test.rb
@@ -21,7 +21,7 @@ require 'journals_controller'
# Re-raise errors caught by the controller.
class JournalsController; def rescue_action(e) raise e end; end
-class JournalsControllerTest < Test::Unit::TestCase
+class JournalsControllerTest < ActionController::TestCase
fixtures :projects, :users, :members, :member_roles, :roles, :issues, :journals, :journal_details, :enabled_modules
def setup
diff --git a/test/functional/mail_handler_controller_test.rb b/test/functional/mail_handler_controller_test.rb
index e99f99a2c..8365f3170 100644
--- a/test/functional/mail_handler_controller_test.rb
+++ b/test/functional/mail_handler_controller_test.rb
@@ -21,7 +21,7 @@ require 'mail_handler_controller'
# Re-raise errors caught by the controller.
class MailHandlerController; def rescue_action(e) raise e end; end
-class MailHandlerControllerTest < Test::Unit::TestCase
+class MailHandlerControllerTest < ActionController::TestCase
fixtures :users, :projects, :enabled_modules, :roles, :members, :member_roles, :issues, :issue_statuses, :trackers, :enumerations
FIXTURES_PATH = File.dirname(__FILE__) + '/../fixtures/mail_handler'
diff --git a/test/functional/members_controller_test.rb b/test/functional/members_controller_test.rb
index 91f36abec..bc5f92e88 100644
--- a/test/functional/members_controller_test.rb
+++ b/test/functional/members_controller_test.rb
@@ -22,7 +22,7 @@ require 'members_controller'
class MembersController; def rescue_action(e) raise e end; end
-class MembersControllerTest < Test::Unit::TestCase
+class MembersControllerTest < ActionController::TestCase
fixtures :projects, :members, :member_roles, :roles, :users
def setup
diff --git a/test/functional/messages_controller_test.rb b/test/functional/messages_controller_test.rb
index 70061aca3..2522f0a87 100644
--- a/test/functional/messages_controller_test.rb
+++ b/test/functional/messages_controller_test.rb
@@ -21,7 +21,7 @@ require 'messages_controller'
# Re-raise errors caught by the controller.
class MessagesController; def rescue_action(e) raise e end; end
-class MessagesControllerTest < Test::Unit::TestCase
+class MessagesControllerTest < ActionController::TestCase
fixtures :projects, :users, :members, :member_roles, :roles, :boards, :messages, :enabled_modules
def setup
diff --git a/test/functional/my_controller_test.rb b/test/functional/my_controller_test.rb
index 997340096..8862466e7 100644
--- a/test/functional/my_controller_test.rb
+++ b/test/functional/my_controller_test.rb
@@ -21,7 +21,7 @@ require 'my_controller'
# Re-raise errors caught by the controller.
class MyController; def rescue_action(e) raise e end; end
-class MyControllerTest < Test::Unit::TestCase
+class MyControllerTest < ActionController::TestCase
fixtures :users, :issues, :issue_statuses, :trackers, :enumerations, :custom_fields
def setup
diff --git a/test/functional/news_controller_test.rb b/test/functional/news_controller_test.rb
index cea35ca4a..427d75b75 100644
--- a/test/functional/news_controller_test.rb
+++ b/test/functional/news_controller_test.rb
@@ -21,7 +21,7 @@ require 'news_controller'
# Re-raise errors caught by the controller.
class NewsController; def rescue_action(e) raise e end; end
-class NewsControllerTest < Test::Unit::TestCase
+class NewsControllerTest < ActionController::TestCase
fixtures :projects, :users, :roles, :members, :member_roles, :enabled_modules, :news, :comments
def setup
diff --git a/test/functional/projects_controller_test.rb b/test/functional/projects_controller_test.rb
index 0560a54b6..81b501ea5 100644
--- a/test/functional/projects_controller_test.rb
+++ b/test/functional/projects_controller_test.rb
@@ -21,7 +21,7 @@ require 'projects_controller'
# Re-raise errors caught by the controller.
class ProjectsController; def rescue_action(e) raise e end; end
-class ProjectsControllerTest < Test::Unit::TestCase
+class ProjectsControllerTest < ActionController::TestCase
fixtures :projects, :versions, :users, :roles, :members, :member_roles, :issues, :journals, :journal_details,
:trackers, :projects_trackers, :issue_statuses, :enabled_modules, :enumerations, :boards, :messages,
:attachments
diff --git a/test/functional/queries_controller_test.rb b/test/functional/queries_controller_test.rb
index 8edde44aa..af2a86e11 100644
--- a/test/functional/queries_controller_test.rb
+++ b/test/functional/queries_controller_test.rb
@@ -21,7 +21,7 @@ require 'queries_controller'
# Re-raise errors caught by the controller.
class QueriesController; def rescue_action(e) raise e end; end
-class QueriesControllerTest < Test::Unit::TestCase
+class QueriesControllerTest < ActionController::TestCase
fixtures :projects, :users, :members, :member_roles, :roles, :trackers, :issue_statuses, :issue_categories, :enumerations, :issues, :custom_fields, :custom_values, :queries
def setup
@@ -70,7 +70,7 @@ class QueriesControllerTest < Test::Unit::TestCase
:query => {"name" => "test_new_project_public_query", "is_public" => "1"}
q = Query.find_by_name('test_new_project_public_query')
- assert_redirected_to :controller => 'issues', :action => 'index', :query_id => q
+ assert_redirected_to :controller => 'issues', :action => 'index', :project_id => 'ecookbook', :query_id => q
assert q.is_public?
assert q.has_default_columns?
assert q.valid?
@@ -88,7 +88,7 @@ class QueriesControllerTest < Test::Unit::TestCase
:query => {"name" => "test_new_project_private_query", "is_public" => "1"}
q = Query.find_by_name('test_new_project_private_query')
- assert_redirected_to :controller => 'issues', :action => 'index', :query_id => q
+ assert_redirected_to :controller => 'issues', :action => 'index', :project_id => 'ecookbook', :query_id => q
assert !q.is_public?
assert q.has_default_columns?
assert q.valid?
@@ -104,7 +104,7 @@ class QueriesControllerTest < Test::Unit::TestCase
:query => {"name" => "test_new_global_private_query", "is_public" => "1", "column_names" => ["", "tracker", "subject", "priority", "category"]}
q = Query.find_by_name('test_new_global_private_query')
- assert_redirected_to :controller => 'issues', :action => 'index', :query_id => q
+ assert_redirected_to :controller => 'issues', :action => 'index', :project_id => nil, :query_id => q
assert !q.is_public?
assert !q.has_default_columns?
assert_equal [:tracker, :subject, :priority, :category], q.columns.collect {|c| c.name}
diff --git a/test/functional/reports_controller_test.rb b/test/functional/reports_controller_test.rb
index 125b175c6..ab33b3035 100644
--- a/test/functional/reports_controller_test.rb
+++ b/test/functional/reports_controller_test.rb
@@ -22,7 +22,7 @@ require 'reports_controller'
class ReportsController; def rescue_action(e) raise e end; end
-class ReportsControllerTest < Test::Unit::TestCase
+class ReportsControllerTest < ActionController::TestCase
fixtures :all
def setup
diff --git a/test/functional/repositories_bazaar_controller_test.rb b/test/functional/repositories_bazaar_controller_test.rb
index 98aa2369f..18841d54e 100644
--- a/test/functional/repositories_bazaar_controller_test.rb
+++ b/test/functional/repositories_bazaar_controller_test.rb
@@ -21,7 +21,7 @@ require 'repositories_controller'
# Re-raise errors caught by the controller.
class RepositoriesController; def rescue_action(e) raise e end; end
-class RepositoriesBazaarControllerTest < Test::Unit::TestCase
+class RepositoriesBazaarControllerTest < ActionController::TestCase
fixtures :projects, :users, :roles, :members, :member_roles, :repositories, :enabled_modules
# No '..' in the repository path
diff --git a/test/functional/repositories_controller_test.rb b/test/functional/repositories_controller_test.rb
index d51a42976..d786c2e21 100644
--- a/test/functional/repositories_controller_test.rb
+++ b/test/functional/repositories_controller_test.rb
@@ -21,7 +21,7 @@ require 'repositories_controller'
# Re-raise errors caught by the controller.
class RepositoriesController; def rescue_action(e) raise e end; end
-class RepositoriesControllerTest < Test::Unit::TestCase
+class RepositoriesControllerTest < ActionController::TestCase
fixtures :projects, :users, :roles, :members, :member_roles, :repositories, :issues, :issue_statuses, :changesets, :changes, :issue_categories, :enumerations, :custom_fields, :custom_values, :trackers
def setup
diff --git a/test/functional/repositories_cvs_controller_test.rb b/test/functional/repositories_cvs_controller_test.rb
index c728bf362..f3d4ecfe1 100644
--- a/test/functional/repositories_cvs_controller_test.rb
+++ b/test/functional/repositories_cvs_controller_test.rb
@@ -21,7 +21,7 @@ require 'repositories_controller'
# Re-raise errors caught by the controller.
class RepositoriesController; def rescue_action(e) raise e end; end
-class RepositoriesCvsControllerTest < Test::Unit::TestCase
+class RepositoriesCvsControllerTest < ActionController::TestCase
# No '..' in the repository path
REPOSITORY_PATH = RAILS_ROOT.gsub(%r{config\/\.\.}, '') + '/tmp/test/cvs_repository'
diff --git a/test/functional/repositories_darcs_controller_test.rb b/test/functional/repositories_darcs_controller_test.rb
index 3f841e9a1..b605ff82b 100644
--- a/test/functional/repositories_darcs_controller_test.rb
+++ b/test/functional/repositories_darcs_controller_test.rb
@@ -21,7 +21,7 @@ require 'repositories_controller'
# Re-raise errors caught by the controller.
class RepositoriesController; def rescue_action(e) raise e end; end
-class RepositoriesDarcsControllerTest < Test::Unit::TestCase
+class RepositoriesDarcsControllerTest < ActionController::TestCase
fixtures :projects, :users, :roles, :members, :member_roles, :repositories, :enabled_modules
# No '..' in the repository path
diff --git a/test/functional/repositories_git_controller_test.rb b/test/functional/repositories_git_controller_test.rb
index 6c2502f51..37c6fb848 100644
--- a/test/functional/repositories_git_controller_test.rb
+++ b/test/functional/repositories_git_controller_test.rb
@@ -21,7 +21,7 @@ require 'repositories_controller'
# Re-raise errors caught by the controller.
class RepositoriesController; def rescue_action(e) raise e end; end
-class RepositoriesGitControllerTest < Test::Unit::TestCase
+class RepositoriesGitControllerTest < ActionController::TestCase
fixtures :projects, :users, :roles, :members, :member_roles, :repositories, :enabled_modules
# No '..' in the repository path
diff --git a/test/functional/repositories_mercurial_controller_test.rb b/test/functional/repositories_mercurial_controller_test.rb
index ec2526550..f2639ee92 100644
--- a/test/functional/repositories_mercurial_controller_test.rb
+++ b/test/functional/repositories_mercurial_controller_test.rb
@@ -21,7 +21,7 @@ require 'repositories_controller'
# Re-raise errors caught by the controller.
class RepositoriesController; def rescue_action(e) raise e end; end
-class RepositoriesMercurialControllerTest < Test::Unit::TestCase
+class RepositoriesMercurialControllerTest < ActionController::TestCase
fixtures :projects, :users, :roles, :members, :member_roles, :repositories, :enabled_modules
# No '..' in the repository path
diff --git a/test/functional/repositories_subversion_controller_test.rb b/test/functional/repositories_subversion_controller_test.rb
index fe1b3dbe5..865bae35c 100644
--- a/test/functional/repositories_subversion_controller_test.rb
+++ b/test/functional/repositories_subversion_controller_test.rb
@@ -21,7 +21,7 @@ require 'repositories_controller'
# Re-raise errors caught by the controller.
class RepositoriesController; def rescue_action(e) raise e end; end
-class RepositoriesSubversionControllerTest < Test::Unit::TestCase
+class RepositoriesSubversionControllerTest < ActionController::TestCase
fixtures :projects, :users, :roles, :members, :member_roles, :enabled_modules,
:repositories, :issues, :issue_statuses, :changesets, :changes,
:issue_categories, :enumerations, :custom_fields, :custom_values, :trackers
diff --git a/test/functional/roles_controller_test.rb b/test/functional/roles_controller_test.rb
index 61e9bd6df..200408837 100644
--- a/test/functional/roles_controller_test.rb
+++ b/test/functional/roles_controller_test.rb
@@ -21,7 +21,7 @@ require 'roles_controller'
# Re-raise errors caught by the controller.
class RolesController; def rescue_action(e) raise e end; end
-class RolesControllerTest < Test::Unit::TestCase
+class RolesControllerTest < ActionController::TestCase
fixtures :roles, :users, :members, :member_roles, :workflows
def setup
diff --git a/test/functional/search_controller_test.rb b/test/functional/search_controller_test.rb
index 4f79081ae..b062468a6 100644
--- a/test/functional/search_controller_test.rb
+++ b/test/functional/search_controller_test.rb
@@ -4,7 +4,7 @@ require 'search_controller'
# Re-raise errors caught by the controller.
class SearchController; def rescue_action(e) raise e end; end
-class SearchControllerTest < Test::Unit::TestCase
+class SearchControllerTest < ActionController::TestCase
fixtures :projects, :enabled_modules, :roles, :users, :members, :member_roles,
:issues, :trackers, :issue_statuses,
:custom_fields, :custom_values,
diff --git a/test/functional/settings_controller_test.rb b/test/functional/settings_controller_test.rb
index 0e919a741..1e0c48f0e 100644
--- a/test/functional/settings_controller_test.rb
+++ b/test/functional/settings_controller_test.rb
@@ -21,7 +21,7 @@ require 'settings_controller'
# Re-raise errors caught by the controller.
class SettingsController; def rescue_action(e) raise e end; end
-class SettingsControllerTest < Test::Unit::TestCase
+class SettingsControllerTest < ActionController::TestCase
fixtures :users
def setup
diff --git a/test/functional/sys_controller_test.rb b/test/functional/sys_controller_test.rb
index db9dd2aa3..59b1d2af6 100644
--- a/test/functional/sys_controller_test.rb
+++ b/test/functional/sys_controller_test.rb
@@ -21,7 +21,7 @@ require 'sys_controller'
# Re-raise errors caught by the controller.
class SysController; def rescue_action(e) raise e end; end
-class SysControllerTest < Test::Unit::TestCase
+class SysControllerTest < ActionController::TestCase
fixtures :projects, :repositories
def setup
diff --git a/test/functional/timelog_controller_test.rb b/test/functional/timelog_controller_test.rb
index df80f5d5a..371fded18 100644
--- a/test/functional/timelog_controller_test.rb
+++ b/test/functional/timelog_controller_test.rb
@@ -21,7 +21,7 @@ require 'timelog_controller'
# Re-raise errors caught by the controller.
class TimelogController; def rescue_action(e) raise e end; end
-class TimelogControllerTest < Test::Unit::TestCase
+class TimelogControllerTest < ActionController::TestCase
fixtures :projects, :enabled_modules, :roles, :members, :member_roles, :issues, :time_entries, :users, :trackers, :enumerations, :issue_statuses, :custom_fields, :custom_values
def setup
diff --git a/test/functional/trackers_controller_test.rb b/test/functional/trackers_controller_test.rb
index e2109ba6f..ec412245a 100644
--- a/test/functional/trackers_controller_test.rb
+++ b/test/functional/trackers_controller_test.rb
@@ -21,7 +21,7 @@ require 'trackers_controller'
# Re-raise errors caught by the controller.
class TrackersController; def rescue_action(e) raise e end; end
-class TrackersControllerTest < Test::Unit::TestCase
+class TrackersControllerTest < ActionController::TestCase
fixtures :trackers, :projects, :projects_trackers, :users, :issues
def setup
diff --git a/test/functional/users_controller_test.rb b/test/functional/users_controller_test.rb
index 5f62b1549..df87462a8 100644
--- a/test/functional/users_controller_test.rb
+++ b/test/functional/users_controller_test.rb
@@ -21,7 +21,7 @@ require 'users_controller'
# Re-raise errors caught by the controller.
class UsersController; def rescue_action(e) raise e end; end
-class UsersControllerTest < Test::Unit::TestCase
+class UsersControllerTest < ActionController::TestCase
include Redmine::I18n
fixtures :users, :projects, :members, :member_roles, :roles
diff --git a/test/functional/versions_controller_test.rb b/test/functional/versions_controller_test.rb
index 3d212def3..4343b887a 100644
--- a/test/functional/versions_controller_test.rb
+++ b/test/functional/versions_controller_test.rb
@@ -21,7 +21,7 @@ require 'versions_controller'
# Re-raise errors caught by the controller.
class VersionsController; def rescue_action(e) raise e end; end
-class VersionsControllerTest < Test::Unit::TestCase
+class VersionsControllerTest < ActionController::TestCase
fixtures :projects, :versions, :issues, :users, :roles, :members, :member_roles, :enabled_modules
def setup
diff --git a/test/functional/watchers_controller_test.rb b/test/functional/watchers_controller_test.rb
index 275599f9b..3b48767b9 100644
--- a/test/functional/watchers_controller_test.rb
+++ b/test/functional/watchers_controller_test.rb
@@ -21,7 +21,7 @@ require 'watchers_controller'
# Re-raise errors caught by the controller.
class WatchersController; def rescue_action(e) raise e end; end
-class WatchersControllerTest < Test::Unit::TestCase
+class WatchersControllerTest < ActionController::TestCase
fixtures :projects, :users, :roles, :members, :member_roles, :enabled_modules,
:issues, :trackers, :projects_trackers, :issue_statuses, :enumerations, :watchers
diff --git a/test/functional/welcome_controller_test.rb b/test/functional/welcome_controller_test.rb
index 0376fd857..5fef176ab 100644
--- a/test/functional/welcome_controller_test.rb
+++ b/test/functional/welcome_controller_test.rb
@@ -21,7 +21,7 @@ require 'welcome_controller'
# Re-raise errors caught by the controller.
class WelcomeController; def rescue_action(e) raise e end; end
-class WelcomeControllerTest < Test::Unit::TestCase
+class WelcomeControllerTest < ActionController::TestCase
fixtures :projects, :news
def setup
diff --git a/test/functional/wiki_controller_test.rb b/test/functional/wiki_controller_test.rb
index 9d104c527..cf247db80 100644
--- a/test/functional/wiki_controller_test.rb
+++ b/test/functional/wiki_controller_test.rb
@@ -21,7 +21,7 @@ require 'wiki_controller'
# Re-raise errors caught by the controller.
class WikiController; def rescue_action(e) raise e end; end
-class WikiControllerTest < Test::Unit::TestCase
+class WikiControllerTest < ActionController::TestCase
fixtures :projects, :users, :roles, :members, :member_roles, :enabled_modules, :wikis, :wiki_pages, :wiki_contents, :wiki_content_versions, :attachments
def setup
diff --git a/test/functional/wikis_controller_test.rb b/test/functional/wikis_controller_test.rb
index 7a5634f1d..dc7df4d95 100644
--- a/test/functional/wikis_controller_test.rb
+++ b/test/functional/wikis_controller_test.rb
@@ -21,7 +21,7 @@ require 'wikis_controller'
# Re-raise errors caught by the controller.
class WikisController; def rescue_action(e) raise e end; end
-class WikisControllerTest < Test::Unit::TestCase
+class WikisControllerTest < ActionController::TestCase
fixtures :projects, :users, :roles, :members, :member_roles, :enabled_modules, :wikis
def setup
diff --git a/test/functional/workflows_controller_test.rb b/test/functional/workflows_controller_test.rb
index d6078bbb9..19187b7fe 100644
--- a/test/functional/workflows_controller_test.rb
+++ b/test/functional/workflows_controller_test.rb
@@ -21,7 +21,7 @@ require 'workflows_controller'
# Re-raise errors caught by the controller.
class WorkflowsController; def rescue_action(e) raise e end; end
-class WorkflowsControllerTest < Test::Unit::TestCase
+class WorkflowsControllerTest < ActionController::TestCase
fixtures :roles, :trackers, :workflows
def setup
diff --git a/test/helper_testcase.rb b/test/helper_testcase.rb
index aba6784a0..1ce9d8661 100644
--- a/test/helper_testcase.rb
+++ b/test/helper_testcase.rb
@@ -4,7 +4,7 @@ class StubController < ApplicationController
attr_accessor :request, :url
end
-class HelperTestCase < Test::Unit::TestCase
+class HelperTestCase < ActiveSupport::TestCase
# Add other helpers here if you need them
include ActionView::Helpers::ActiveRecordHelper
diff --git a/test/test_helper.rb b/test/test_helper.rb
index 88117e540..fba2987d3 100644
--- a/test/test_helper.rb
+++ b/test/test_helper.rb
@@ -21,7 +21,7 @@ require 'test_help'
require File.expand_path(File.dirname(__FILE__) + '/helper_testcase')
require File.join(RAILS_ROOT,'test', 'mocks', 'open_id_authentication_mock.rb')
-class Test::Unit::TestCase
+class ActiveSupport::TestCase
# Transactional fixtures accelerate your tests by wrapping each test method
# in a transaction that's rolled back on completion. This ensures that the
# test database remains unchanged so your fixtures don't have to be reloaded
@@ -55,7 +55,7 @@ class Test::Unit::TestCase
end
def test_uploaded_file(name, mime)
- ActionController::TestUploadedFile.new(Test::Unit::TestCase.fixture_path + "/files/#{name}", mime)
+ ActionController::TestUploadedFile.new(ActiveSupport::TestCase.fixture_path + "/files/#{name}", mime)
end
# Use a temporary directory for attachment related tests
diff --git a/test/unit/activity_test.rb b/test/unit/activity_test.rb
index 0b1773dd2..86a07e6a5 100644
--- a/test/unit/activity_test.rb
+++ b/test/unit/activity_test.rb
@@ -17,7 +17,7 @@
require File.dirname(__FILE__) + '/../test_helper'
-class ActivityTest < Test::Unit::TestCase
+class ActivityTest < ActiveSupport::TestCase
fixtures :projects, :versions, :attachments, :users, :roles, :members, :member_roles, :issues, :journals, :journal_details,
:trackers, :projects_trackers, :issue_statuses, :enabled_modules, :enumerations, :boards, :messages
diff --git a/test/unit/attachment_test.rb b/test/unit/attachment_test.rb
index ae92991f8..75a7a3c90 100644
--- a/test/unit/attachment_test.rb
+++ b/test/unit/attachment_test.rb
@@ -17,7 +17,7 @@
require File.dirname(__FILE__) + '/../test_helper'
-class AttachmentTest < Test::Unit::TestCase
+class AttachmentTest < ActiveSupport::TestCase
fixtures :issues, :users
def setup
diff --git a/test/unit/auth_source_ldap_test.rb b/test/unit/auth_source_ldap_test.rb
index 30abd5dd8..d0f7a6edf 100644
--- a/test/unit/auth_source_ldap_test.rb
+++ b/test/unit/auth_source_ldap_test.rb
@@ -17,7 +17,7 @@
require File.dirname(__FILE__) + '/../test_helper'
-class AuthSourceLdapTest < Test::Unit::TestCase
+class AuthSourceLdapTest < ActiveSupport::TestCase
def setup
end
diff --git a/test/unit/board_test.rb b/test/unit/board_test.rb
index 3ba4b2d97..569c4620a 100644
--- a/test/unit/board_test.rb
+++ b/test/unit/board_test.rb
@@ -1,6 +1,6 @@
require File.dirname(__FILE__) + '/../test_helper'
-class BoardTest < Test::Unit::TestCase
+class BoardTest < ActiveSupport::TestCase
fixtures :projects, :boards, :messages
def setup
diff --git a/test/unit/calendar_test.rb b/test/unit/calendar_test.rb
index 98d856921..05e1d0bad 100644
--- a/test/unit/calendar_test.rb
+++ b/test/unit/calendar_test.rb
@@ -17,7 +17,7 @@
require File.dirname(__FILE__) + '/../test_helper'
-class CalendarTest < Test::Unit::TestCase
+class CalendarTest < ActiveSupport::TestCase
def test_monthly
c = Redmine::Helpers::Calendar.new(Date.today, :fr, :month)
diff --git a/test/unit/changeset_test.rb b/test/unit/changeset_test.rb
index 51d8b7452..9af53a3ca 100644
--- a/test/unit/changeset_test.rb
+++ b/test/unit/changeset_test.rb
@@ -17,7 +17,7 @@
require File.dirname(__FILE__) + '/../test_helper'
-class ChangesetTest < Test::Unit::TestCase
+class ChangesetTest < ActiveSupport::TestCase
fixtures :projects, :repositories, :issues, :issue_statuses, :changesets, :changes, :issue_categories, :enumerations, :custom_fields, :custom_values, :users, :members, :member_roles, :trackers
def setup
diff --git a/test/unit/comment_test.rb b/test/unit/comment_test.rb
index c07ee8273..0a62148c3 100644
--- a/test/unit/comment_test.rb
+++ b/test/unit/comment_test.rb
@@ -17,7 +17,7 @@
require File.dirname(__FILE__) + '/../test_helper'
-class CommentTest < Test::Unit::TestCase
+class CommentTest < ActiveSupport::TestCase
fixtures :users, :news, :comments
def setup
diff --git a/test/unit/custom_field_test.rb b/test/unit/custom_field_test.rb
index 2f17d99cf..513c6fb2e 100644
--- a/test/unit/custom_field_test.rb
+++ b/test/unit/custom_field_test.rb
@@ -17,7 +17,7 @@
require File.dirname(__FILE__) + '/../test_helper'
-class CustomFieldTest < Test::Unit::TestCase
+class CustomFieldTest < ActiveSupport::TestCase
fixtures :custom_fields
def test_create
diff --git a/test/unit/custom_value_test.rb b/test/unit/custom_value_test.rb
index 11578ae6b..08492ef58 100644
--- a/test/unit/custom_value_test.rb
+++ b/test/unit/custom_value_test.rb
@@ -17,7 +17,7 @@
require File.dirname(__FILE__) + '/../test_helper'
-class CustomValueTest < Test::Unit::TestCase
+class CustomValueTest < ActiveSupport::TestCase
fixtures :custom_fields
def test_string_field_validation_with_blank_value
diff --git a/test/unit/default_data_test.rb b/test/unit/default_data_test.rb
index 457f885ee..a63d205c1 100644
--- a/test/unit/default_data_test.rb
+++ b/test/unit/default_data_test.rb
@@ -17,7 +17,7 @@
require File.dirname(__FILE__) + '/../test_helper'
-class DefaultDataTest < Test::Unit::TestCase
+class DefaultDataTest < ActiveSupport::TestCase
include Redmine::I18n
fixtures :roles
diff --git a/test/unit/document_category_test.rb b/test/unit/document_category_test.rb
index 6fa93a371..8b814432c 100644
--- a/test/unit/document_category_test.rb
+++ b/test/unit/document_category_test.rb
@@ -17,7 +17,7 @@
require File.dirname(__FILE__) + '/../test_helper'
-class DocumentCategoryTest < Test::Unit::TestCase
+class DocumentCategoryTest < ActiveSupport::TestCase
fixtures :enumerations, :documents
def test_should_be_an_enumeration
diff --git a/test/unit/document_test.rb b/test/unit/document_test.rb
index 1950f8558..02ae94dd0 100644
--- a/test/unit/document_test.rb
+++ b/test/unit/document_test.rb
@@ -17,7 +17,7 @@
require File.dirname(__FILE__) + '/../test_helper'
-class DocumentTest < Test::Unit::TestCase
+class DocumentTest < ActiveSupport::TestCase
fixtures :projects, :enumerations, :documents
def test_create
diff --git a/test/unit/enabled_module_test.rb b/test/unit/enabled_module_test.rb
index 3daec434f..5e662ebc7 100644
--- a/test/unit/enabled_module_test.rb
+++ b/test/unit/enabled_module_test.rb
@@ -17,7 +17,7 @@
require File.dirname(__FILE__) + '/../test_helper'
-class EnabledModuleTest < Test::Unit::TestCase
+class EnabledModuleTest < ActiveSupport::TestCase
fixtures :projects, :wikis
def test_enabling_wiki_should_create_a_wiki
diff --git a/test/unit/enumeration_test.rb b/test/unit/enumeration_test.rb
index 14ea5e25c..4dc6e15c3 100644
--- a/test/unit/enumeration_test.rb
+++ b/test/unit/enumeration_test.rb
@@ -17,7 +17,7 @@
require File.dirname(__FILE__) + '/../test_helper'
-class EnumerationTest < Test::Unit::TestCase
+class EnumerationTest < ActiveSupport::TestCase
fixtures :enumerations, :issues
def setup
diff --git a/test/unit/filesystem_adapter_test.rb b/test/unit/filesystem_adapter_test.rb
index 720d1e92c..26e97bda6 100644
--- a/test/unit/filesystem_adapter_test.rb
+++ b/test/unit/filesystem_adapter_test.rb
@@ -2,7 +2,7 @@
require File.dirname(__FILE__) + '/../test_helper'
-class FilesystemAdapterTest < Test::Unit::TestCase
+class FilesystemAdapterTest < ActiveSupport::TestCase
REPOSITORY_PATH = RAILS_ROOT.gsub(%r{config\/\.\.}, '') + '/tmp/test/filesystem_repository'
diff --git a/test/unit/git_adapter_test.rb b/test/unit/git_adapter_test.rb
index 50bded062..9ab25c154 100644
--- a/test/unit/git_adapter_test.rb
+++ b/test/unit/git_adapter_test.rb
@@ -1,6 +1,6 @@
require File.dirname(__FILE__) + '/../test_helper'
-class GitAdapterTest < Test::Unit::TestCase
+class GitAdapterTest < ActiveSupport::TestCase
REPOSITORY_PATH = RAILS_ROOT.gsub(%r{config\/\.\.}, '') + '/tmp/test/git_repository'
if File.directory?(REPOSITORY_PATH)
diff --git a/test/unit/group_test.rb b/test/unit/group_test.rb
index 79b9d4180..4b26f8f2c 100644
--- a/test/unit/group_test.rb
+++ b/test/unit/group_test.rb
@@ -17,7 +17,7 @@
require File.dirname(__FILE__) + '/../test_helper'
-class GroupTest < Test::Unit::TestCase
+class GroupTest < ActiveSupport::TestCase
fixtures :all
def test_create
diff --git a/test/unit/issue_category_test.rb b/test/unit/issue_category_test.rb
index a6edb3c7b..ebb9f0f13 100644
--- a/test/unit/issue_category_test.rb
+++ b/test/unit/issue_category_test.rb
@@ -17,7 +17,7 @@
require File.dirname(__FILE__) + '/../test_helper'
-class IssueCategoryTest < Test::Unit::TestCase
+class IssueCategoryTest < ActiveSupport::TestCase
fixtures :issue_categories, :issues
def setup
diff --git a/test/unit/issue_priority_test.rb b/test/unit/issue_priority_test.rb
index e2da1e82d..6574bf38c 100644
--- a/test/unit/issue_priority_test.rb
+++ b/test/unit/issue_priority_test.rb
@@ -17,7 +17,7 @@
require File.dirname(__FILE__) + '/../test_helper'
-class IssuePriorityTest < Test::Unit::TestCase
+class IssuePriorityTest < ActiveSupport::TestCase
fixtures :enumerations, :issues
def test_should_be_an_enumeration
diff --git a/test/unit/issue_status_test.rb b/test/unit/issue_status_test.rb
index aebe74cb6..042f30e32 100644
--- a/test/unit/issue_status_test.rb
+++ b/test/unit/issue_status_test.rb
@@ -17,7 +17,7 @@
require File.dirname(__FILE__) + '/../test_helper'
-class IssueStatusTest < Test::Unit::TestCase
+class IssueStatusTest < ActiveSupport::TestCase
fixtures :issue_statuses, :issues
def test_create
diff --git a/test/unit/issue_test.rb b/test/unit/issue_test.rb
index a6710edc0..147d31f8c 100644
--- a/test/unit/issue_test.rb
+++ b/test/unit/issue_test.rb
@@ -17,7 +17,7 @@
require File.dirname(__FILE__) + '/../test_helper'
-class IssueTest < Test::Unit::TestCase
+class IssueTest < ActiveSupport::TestCase
fixtures :projects, :users, :members, :member_roles,
:trackers, :projects_trackers,
:issue_statuses, :issue_categories, :issue_relations, :workflows,
diff --git a/test/unit/journal_test.rb b/test/unit/journal_test.rb
index 147af4aae..87273ad46 100644
--- a/test/unit/journal_test.rb
+++ b/test/unit/journal_test.rb
@@ -17,7 +17,7 @@
require File.dirname(__FILE__) + '/../test_helper'
-class JournalTest < Test::Unit::TestCase
+class JournalTest < ActiveSupport::TestCase
fixtures :issues, :issue_statuses, :journals, :journal_details
def setup
diff --git a/test/unit/lib/redmine/access_control_test.rb b/test/unit/lib/redmine/access_control_test.rb
index 5dd87d28c..dcc84c19f 100644
--- a/test/unit/lib/redmine/access_control_test.rb
+++ b/test/unit/lib/redmine/access_control_test.rb
@@ -17,7 +17,7 @@
require File.dirname(__FILE__) + '/../../../test_helper'
-class Redmine::AccessControlTest < Test::Unit::TestCase
+class Redmine::AccessControlTest < ActiveSupport::TestCase
def setup
@access_module = Redmine::AccessControl
diff --git a/test/unit/lib/redmine/hook_test.rb b/test/unit/lib/redmine/hook_test.rb
index 9313a36c7..de74f1e57 100644
--- a/test/unit/lib/redmine/hook_test.rb
+++ b/test/unit/lib/redmine/hook_test.rb
@@ -17,7 +17,7 @@
require File.dirname(__FILE__) + '/../../../test_helper'
-class Redmine::Hook::ManagerTest < Test::Unit::TestCase
+class Redmine::Hook::ManagerTest < ActiveSupport::TestCase
fixtures :issues
diff --git a/test/unit/lib/redmine/i18n_test.rb b/test/unit/lib/redmine/i18n_test.rb
index 8b91359a9..35401f1c2 100644
--- a/test/unit/lib/redmine/i18n_test.rb
+++ b/test/unit/lib/redmine/i18n_test.rb
@@ -17,7 +17,7 @@
require File.dirname(__FILE__) + '/../../../test_helper'
-class Redmine::I18nTest < Test::Unit::TestCase
+class Redmine::I18nTest < ActiveSupport::TestCase
include Redmine::I18n
def setup
diff --git a/test/unit/lib/redmine/mime_type_test.rb b/test/unit/lib/redmine/mime_type_test.rb
index 79d086944..2cf151841 100644
--- a/test/unit/lib/redmine/mime_type_test.rb
+++ b/test/unit/lib/redmine/mime_type_test.rb
@@ -17,7 +17,7 @@
require File.dirname(__FILE__) + '/../../../test_helper'
-class Redmine::MimeTypeTest < Test::Unit::TestCase
+class Redmine::MimeTypeTest < ActiveSupport::TestCase
def test_of
to_test = {'test.unk' => nil,
diff --git a/test/unit/lib/redmine/plugin_test.rb b/test/unit/lib/redmine/plugin_test.rb
index e6237c216..234da14ea 100644
--- a/test/unit/lib/redmine/plugin_test.rb
+++ b/test/unit/lib/redmine/plugin_test.rb
@@ -17,7 +17,7 @@
require File.dirname(__FILE__) + '/../../../test_helper'
-class Redmine::PluginTest < Test::Unit::TestCase
+class Redmine::PluginTest < ActiveSupport::TestCase
def setup
@klass = Redmine::Plugin
diff --git a/test/unit/lib/redmine/unified_diff_test.rb b/test/unit/lib/redmine/unified_diff_test.rb
index 5e6ba1aef..5b26cde25 100644
--- a/test/unit/lib/redmine/unified_diff_test.rb
+++ b/test/unit/lib/redmine/unified_diff_test.rb
@@ -17,7 +17,7 @@
require File.dirname(__FILE__) + '/../../../test_helper'
-class Redmine::UnifiedDiffTest < Test::Unit::TestCase
+class Redmine::UnifiedDiffTest < ActiveSupport::TestCase
def setup
end
diff --git a/test/unit/mail_handler_test.rb b/test/unit/mail_handler_test.rb
index 9a9d7d805..9b6c28ba3 100644
--- a/test/unit/mail_handler_test.rb
+++ b/test/unit/mail_handler_test.rb
@@ -17,7 +17,7 @@
require File.dirname(__FILE__) + '/../test_helper'
-class MailHandlerTest < Test::Unit::TestCase
+class MailHandlerTest < ActiveSupport::TestCase
fixtures :users, :projects,
:enabled_modules,
:roles,
diff --git a/test/unit/mailer_test.rb b/test/unit/mailer_test.rb
index b1c39bb5e..5024a845b 100644
--- a/test/unit/mailer_test.rb
+++ b/test/unit/mailer_test.rb
@@ -17,7 +17,7 @@
require File.dirname(__FILE__) + '/../test_helper'
-class MailerTest < Test::Unit::TestCase
+class MailerTest < ActiveSupport::TestCase
include Redmine::I18n
fixtures :projects, :issues, :users, :members, :member_roles, :documents, :attachments, :news, :tokens, :journals, :journal_details, :changesets, :trackers, :issue_statuses, :enumerations, :messages, :boards, :repositories
@@ -103,9 +103,19 @@ class MailerTest < Test::Unit::TestCase
journal = Journal.find(2)
Mailer.deliver_issue_edit(journal)
mail = ActionMailer::Base.deliveries.last
- assert !mail.body.include?('<a href="https://mydomain.foo/issues/1">Bug #1: Can\'t print recipes</a>')
+ assert_equal 1, mail.parts.size
+ assert !mail.encoded.include?('href')
end
-
+
+ def test_html_mail
+ Setting.plain_text_mail = 0
+ journal = Journal.find(2)
+ Mailer.deliver_issue_edit(journal)
+ mail = ActionMailer::Base.deliveries.last
+ assert_equal 2, mail.parts.size
+ assert mail.encoded.include?('href')
+ end
+
def test_issue_add_message_id
ActionMailer::Base.deliveries.clear
issue = Issue.find(1)
diff --git a/test/unit/member_test.rb b/test/unit/member_test.rb
index 66f1283ca..87e0086d2 100644
--- a/test/unit/member_test.rb
+++ b/test/unit/member_test.rb
@@ -17,7 +17,7 @@
require File.dirname(__FILE__) + '/../test_helper'
-class MemberTest < Test::Unit::TestCase
+class MemberTest < ActiveSupport::TestCase
fixtures :users, :projects, :roles, :members, :member_roles
def setup
diff --git a/test/unit/mercurial_adapter_test.rb b/test/unit/mercurial_adapter_test.rb
index a2673ad42..f7b0d3c5b 100644
--- a/test/unit/mercurial_adapter_test.rb
+++ b/test/unit/mercurial_adapter_test.rb
@@ -2,7 +2,7 @@ require File.dirname(__FILE__) + '/../test_helper'
begin
require 'mocha'
- class MercurialAdapterTest < Test::Unit::TestCase
+ class MercurialAdapterTest < ActiveSupport::TestCase
TEMPLATES_DIR = Redmine::Scm::Adapters::MercurialAdapter::TEMPLATES_DIR
TEMPLATE_NAME = Redmine::Scm::Adapters::MercurialAdapter::TEMPLATE_NAME
diff --git a/test/unit/message_test.rb b/test/unit/message_test.rb
index 09857fbc9..5bce8a899 100644
--- a/test/unit/message_test.rb
+++ b/test/unit/message_test.rb
@@ -17,7 +17,7 @@
require File.dirname(__FILE__) + '/../test_helper'
-class MessageTest < Test::Unit::TestCase
+class MessageTest < ActiveSupport::TestCase
fixtures :projects, :roles, :members, :member_roles, :boards, :messages, :users, :watchers
def setup
diff --git a/test/unit/news_test.rb b/test/unit/news_test.rb
index a4fc89e90..e9d3880e5 100644
--- a/test/unit/news_test.rb
+++ b/test/unit/news_test.rb
@@ -17,7 +17,7 @@
require File.dirname(__FILE__) + '/../test_helper'
-class NewsTest < Test::Unit::TestCase
+class NewsTest < ActiveSupport::TestCase
fixtures :projects, :users, :roles, :members, :member_roles, :enabled_modules, :news
def valid_news
diff --git a/test/unit/project_test.rb b/test/unit/project_test.rb
index 13c63a054..c40475e4c 100644
--- a/test/unit/project_test.rb
+++ b/test/unit/project_test.rb
@@ -17,7 +17,7 @@
require File.dirname(__FILE__) + '/../test_helper'
-class ProjectTest < Test::Unit::TestCase
+class ProjectTest < ActiveSupport::TestCase
fixtures :projects, :enabled_modules,
:issues, :issue_statuses, :journals, :journal_details,
:users, :members, :member_roles, :roles, :projects_trackers, :trackers, :boards,
diff --git a/test/unit/query_test.rb b/test/unit/query_test.rb
index 73efa426f..f1f9397c6 100644
--- a/test/unit/query_test.rb
+++ b/test/unit/query_test.rb
@@ -17,7 +17,7 @@
require File.dirname(__FILE__) + '/../test_helper'
-class QueryTest < Test::Unit::TestCase
+class QueryTest < ActiveSupport::TestCase
fixtures :projects, :enabled_modules, :users, :members, :member_roles, :roles, :trackers, :issue_statuses, :issue_categories, :enumerations, :issues, :watchers, :custom_fields, :custom_values, :versions, :queries
def test_custom_fields_for_all_projects_should_be_available_in_global_queries
diff --git a/test/unit/repository_bazaar_test.rb b/test/unit/repository_bazaar_test.rb
index b7a3cf98e..c29e04ede 100644
--- a/test/unit/repository_bazaar_test.rb
+++ b/test/unit/repository_bazaar_test.rb
@@ -17,7 +17,7 @@
require File.dirname(__FILE__) + '/../test_helper'
-class RepositoryBazaarTest < Test::Unit::TestCase
+class RepositoryBazaarTest < ActiveSupport::TestCase
fixtures :projects
# No '..' in the repository path
diff --git a/test/unit/repository_cvs_test.rb b/test/unit/repository_cvs_test.rb
index 47c407037..d240a6efd 100644
--- a/test/unit/repository_cvs_test.rb
+++ b/test/unit/repository_cvs_test.rb
@@ -17,7 +17,7 @@
require File.dirname(__FILE__) + '/../test_helper'
require 'pp'
-class RepositoryCvsTest < Test::Unit::TestCase
+class RepositoryCvsTest < ActiveSupport::TestCase
fixtures :projects
# No '..' in the repository path
diff --git a/test/unit/repository_darcs_test.rb b/test/unit/repository_darcs_test.rb
index 0c8c9a143..b9ad95db6 100644
--- a/test/unit/repository_darcs_test.rb
+++ b/test/unit/repository_darcs_test.rb
@@ -17,7 +17,7 @@
require File.dirname(__FILE__) + '/../test_helper'
-class RepositoryDarcsTest < Test::Unit::TestCase
+class RepositoryDarcsTest < ActiveSupport::TestCase
fixtures :projects
# No '..' in the repository path
diff --git a/test/unit/repository_filesystem_test.rb b/test/unit/repository_filesystem_test.rb
index 6b643f96f..7688dd4ee 100644
--- a/test/unit/repository_filesystem_test.rb
+++ b/test/unit/repository_filesystem_test.rb
@@ -17,7 +17,7 @@
require File.dirname(__FILE__) + '/../test_helper'
-class RepositoryFilesystemTest < Test::Unit::TestCase
+class RepositoryFilesystemTest < ActiveSupport::TestCase
fixtures :projects
# No '..' in the repository path
diff --git a/test/unit/repository_git_test.rb b/test/unit/repository_git_test.rb
index 382774305..5ebbb00c1 100644
--- a/test/unit/repository_git_test.rb
+++ b/test/unit/repository_git_test.rb
@@ -17,7 +17,7 @@
require File.dirname(__FILE__) + '/../test_helper'
-class RepositoryGitTest < Test::Unit::TestCase
+class RepositoryGitTest < ActiveSupport::TestCase
fixtures :projects
# No '..' in the repository path
diff --git a/test/unit/repository_mercurial_test.rb b/test/unit/repository_mercurial_test.rb
index 0f993ac16..6ce3d5fa0 100644
--- a/test/unit/repository_mercurial_test.rb
+++ b/test/unit/repository_mercurial_test.rb
@@ -17,7 +17,7 @@
require File.dirname(__FILE__) + '/../test_helper'
-class RepositoryMercurialTest < Test::Unit::TestCase
+class RepositoryMercurialTest < ActiveSupport::TestCase
fixtures :projects
# No '..' in the repository path
diff --git a/test/unit/repository_subversion_test.rb b/test/unit/repository_subversion_test.rb
index b0eb88c01..17a0a42b0 100644
--- a/test/unit/repository_subversion_test.rb
+++ b/test/unit/repository_subversion_test.rb
@@ -17,7 +17,7 @@
require File.dirname(__FILE__) + '/../test_helper'
-class RepositorySubversionTest < Test::Unit::TestCase
+class RepositorySubversionTest < ActiveSupport::TestCase
fixtures :projects
# No '..' in the repository path for svn
diff --git a/test/unit/repository_test.rb b/test/unit/repository_test.rb
index 497eeabfd..cc356ec1d 100644
--- a/test/unit/repository_test.rb
+++ b/test/unit/repository_test.rb
@@ -17,7 +17,7 @@
require File.dirname(__FILE__) + '/../test_helper'
-class RepositoryTest < Test::Unit::TestCase
+class RepositoryTest < ActiveSupport::TestCase
fixtures :projects,
:trackers,
:projects_trackers,
diff --git a/test/unit/role_test.rb b/test/unit/role_test.rb
index cab668c50..1e76dd887 100644
--- a/test/unit/role_test.rb
+++ b/test/unit/role_test.rb
@@ -17,7 +17,7 @@
require File.dirname(__FILE__) + '/../test_helper'
-class RoleTest < Test::Unit::TestCase
+class RoleTest < ActiveSupport::TestCase
fixtures :roles, :workflows
def test_copy_workflows
diff --git a/test/unit/search_test.rb b/test/unit/search_test.rb
index 46d769451..71ed7ad08 100644
--- a/test/unit/search_test.rb
+++ b/test/unit/search_test.rb
@@ -17,7 +17,7 @@
require File.dirname(__FILE__) + '/../test_helper'
-class SearchTest < Test::Unit::TestCase
+class SearchTest < ActiveSupport::TestCase
fixtures :users,
:members,
:member_roles,
diff --git a/test/unit/setting_test.rb b/test/unit/setting_test.rb
index 34d07c193..25ec41701 100644
--- a/test/unit/setting_test.rb
+++ b/test/unit/setting_test.rb
@@ -17,7 +17,7 @@
require File.dirname(__FILE__) + '/../test_helper'
-class SettingTest < Test::Unit::TestCase
+class SettingTest < ActiveSupport::TestCase
def test_read_default
assert_equal "Redmine", Setting.app_title
diff --git a/test/unit/subversion_adapter_test.rb b/test/unit/subversion_adapter_test.rb
index 9f208839a..ddef52df2 100644
--- a/test/unit/subversion_adapter_test.rb
+++ b/test/unit/subversion_adapter_test.rb
@@ -19,7 +19,7 @@ require 'mkmf'
require File.dirname(__FILE__) + '/../test_helper'
-class SubversionAdapterTest < Test::Unit::TestCase
+class SubversionAdapterTest < ActiveSupport::TestCase
if find_executable0('svn')
def test_client_version
diff --git a/test/unit/time_entry_activity_test.rb b/test/unit/time_entry_activity_test.rb
index f99c8ab4e..9422a91ab 100644
--- a/test/unit/time_entry_activity_test.rb
+++ b/test/unit/time_entry_activity_test.rb
@@ -17,7 +17,7 @@
require File.dirname(__FILE__) + '/../test_helper'
-class TimeEntryActivityTest < Test::Unit::TestCase
+class TimeEntryActivityTest < ActiveSupport::TestCase
fixtures :enumerations, :time_entries
def test_should_be_an_enumeration
diff --git a/test/unit/time_entry_test.rb b/test/unit/time_entry_test.rb
index dd54fd1b2..7ac1c02a3 100644
--- a/test/unit/time_entry_test.rb
+++ b/test/unit/time_entry_test.rb
@@ -17,7 +17,7 @@
require File.dirname(__FILE__) + '/../test_helper'
-class TimeEntryTest < Test::Unit::TestCase
+class TimeEntryTest < ActiveSupport::TestCase
fixtures :issues, :projects, :users, :time_entries
def test_hours_format
diff --git a/test/unit/token_test.rb b/test/unit/token_test.rb
index 64ac85a39..42791e6a7 100644
--- a/test/unit/token_test.rb
+++ b/test/unit/token_test.rb
@@ -17,7 +17,7 @@
require File.dirname(__FILE__) + '/../test_helper'
-class TokenTest < Test::Unit::TestCase
+class TokenTest < ActiveSupport::TestCase
fixtures :tokens
def test_create
diff --git a/test/unit/tracker_test.rb b/test/unit/tracker_test.rb
index 6dab8890c..efc2aa7ed 100644
--- a/test/unit/tracker_test.rb
+++ b/test/unit/tracker_test.rb
@@ -17,7 +17,7 @@
require File.dirname(__FILE__) + '/../test_helper'
-class TrackerTest < Test::Unit::TestCase
+class TrackerTest < ActiveSupport::TestCase
fixtures :trackers, :workflows
def test_copy_workflows
diff --git a/test/unit/user_preference_test.rb b/test/unit/user_preference_test.rb
index cf6787b17..19dc63ff8 100644
--- a/test/unit/user_preference_test.rb
+++ b/test/unit/user_preference_test.rb
@@ -17,7 +17,7 @@
require File.dirname(__FILE__) + '/../test_helper'
-class UserPreferenceTest < Test::Unit::TestCase
+class UserPreferenceTest < ActiveSupport::TestCase
fixtures :users, :user_preferences
def test_create
diff --git a/test/unit/user_test.rb b/test/unit/user_test.rb
index 7080c0b5b..e685f53b6 100644
--- a/test/unit/user_test.rb
+++ b/test/unit/user_test.rb
@@ -17,7 +17,7 @@
require File.dirname(__FILE__) + '/../test_helper'
-class UserTest < Test::Unit::TestCase
+class UserTest < ActiveSupport::TestCase
fixtures :users, :members, :projects, :roles, :member_roles
def setup
diff --git a/test/unit/version_test.rb b/test/unit/version_test.rb
index 6c5297fc4..7df857927 100644
--- a/test/unit/version_test.rb
+++ b/test/unit/version_test.rb
@@ -17,7 +17,7 @@
require File.dirname(__FILE__) + '/../test_helper'
-class VersionTest < Test::Unit::TestCase
+class VersionTest < ActiveSupport::TestCase
fixtures :projects, :users, :issues, :issue_statuses, :trackers, :enumerations, :versions
def setup
diff --git a/test/unit/watcher_test.rb b/test/unit/watcher_test.rb
index 9566e6a7c..f49365edf 100644
--- a/test/unit/watcher_test.rb
+++ b/test/unit/watcher_test.rb
@@ -17,7 +17,7 @@
require File.dirname(__FILE__) + '/../test_helper'
-class WatcherTest < Test::Unit::TestCase
+class WatcherTest < ActiveSupport::TestCase
fixtures :issues, :users
def setup
diff --git a/test/unit/wiki_content_test.rb b/test/unit/wiki_content_test.rb
index f3f8bc041..372121bda 100644
--- a/test/unit/wiki_content_test.rb
+++ b/test/unit/wiki_content_test.rb
@@ -17,7 +17,7 @@
require File.dirname(__FILE__) + '/../test_helper'
-class WikiContentTest < Test::Unit::TestCase
+class WikiContentTest < ActiveSupport::TestCase
fixtures :wikis, :wiki_pages, :wiki_contents, :wiki_content_versions, :users
def setup
diff --git a/test/unit/wiki_page_test.rb b/test/unit/wiki_page_test.rb
index df41a4a0a..1837edb18 100644
--- a/test/unit/wiki_page_test.rb
+++ b/test/unit/wiki_page_test.rb
@@ -17,7 +17,7 @@
require File.dirname(__FILE__) + '/../test_helper'
-class WikiPageTest < Test::Unit::TestCase
+class WikiPageTest < ActiveSupport::TestCase
fixtures :projects, :wikis, :wiki_pages, :wiki_contents, :wiki_content_versions
def setup
diff --git a/test/unit/wiki_redirect_test.rb b/test/unit/wiki_redirect_test.rb
index 12f6b7d89..7e80638b2 100644
--- a/test/unit/wiki_redirect_test.rb
+++ b/test/unit/wiki_redirect_test.rb
@@ -17,7 +17,7 @@
require File.dirname(__FILE__) + '/../test_helper'
-class WikiRedirectTest < Test::Unit::TestCase
+class WikiRedirectTest < ActiveSupport::TestCase
fixtures :projects, :wikis
def setup
diff --git a/test/unit/wiki_test.rb b/test/unit/wiki_test.rb
index 23d4f442c..fd8a375e1 100644
--- a/test/unit/wiki_test.rb
+++ b/test/unit/wiki_test.rb
@@ -17,7 +17,7 @@
require File.dirname(__FILE__) + '/../test_helper'
-class WikiTest < Test::Unit::TestCase
+class WikiTest < ActiveSupport::TestCase
fixtures :wikis, :wiki_pages, :wiki_contents, :wiki_content_versions
def test_create
diff --git a/vendor/plugins/engines/Rakefile b/vendor/plugins/engines/Rakefile
index b9640226c..6c621deeb 100644
--- a/vendor/plugins/engines/Rakefile
+++ b/vendor/plugins/engines/Rakefile
@@ -172,16 +172,29 @@ namespace :test do
desc 'Update the plugin and tests files in the test application from the plugin'
task :mirror_engine_files => [:test_app, :copy_engines_plugin] do
- puts "> Modifying default config files to load engines plugin"
+ puts "> Tweaking generated application to be suitable for testing"
+
+ # Replace the Rails plugin loader with the engines one.
insert_line("require File.join(File.dirname(__FILE__), '../vendor/plugins/engines/boot')",
:into => 'config/environment.rb',
:after => "require File.join(File.dirname(__FILE__), 'boot')")
-
- insert_line('map.from_plugin :test_routing', :into => 'config/routes.rb',
- :after => /\AActionController::Routing::Routes/)
-
+
+ # Add the engines test helper to handle fixtures & stuff.
insert_line("require 'engines_test_helper'", :into => 'test/test_helper.rb')
+ # Run engine plugin tests when running the application
+ insert_line("task :test => ['test:engines:all']", :into => 'Rakefile')
+
+ # We want exceptions to be raised
+ insert_line("def rescue_action(e) raise e end;",
+ :into => "app/controllers/application_controller.rb",
+ :after => "class ApplicationController < ActionController::Base")
+
+ # We need this method to test where actions are being rendered from.
+ insert_line("include RenderInformation",
+ :into => "app/controllers/application_controller.rb",
+ :after => "class ApplicationController < ActionController::Base")
+
puts "> Mirroring test application files into #{test_app_dir}"
mirror_test_files('app')
mirror_test_files('lib')
diff --git a/vendor/plugins/engines/about.yml b/vendor/plugins/engines/about.yml
index 619bd5a93..13f55ec97 100644
--- a/vendor/plugins/engines/about.yml
+++ b/vendor/plugins/engines/about.yml
@@ -4,4 +4,4 @@ homepage: http://www.rails-engines.org
summary: Enhances the plugin mechanism to perform more flexible sharing
description: The Rails Engines plugin allows the sharing of almost any type of code or asset that you could use in a Rails application, including controllers, models, stylesheets, and views.
license: MIT
-version: 2.1.0 \ No newline at end of file
+version: 2.3.2 \ No newline at end of file
diff --git a/vendor/plugins/engines/boot.rb b/vendor/plugins/engines/boot.rb
index f80f2b17b..1c55e2139 100644
--- a/vendor/plugins/engines/boot.rb
+++ b/vendor/plugins/engines/boot.rb
@@ -1,7 +1,7 @@
begin
require 'rails/version'
- unless Rails::VERSION::MAJOR >= 2 && Rails::VERSION::MINOR >= 2 && Rails::VERSION::TINY >= 0
- raise "This version of the engines plugin requires Rails 2.2.0 or later!"
+ unless Rails::VERSION::MAJOR >= 2 && Rails::VERSION::MINOR >= 3 && Rails::VERSION::TINY >= 2
+ raise "This version of the engines plugin requires Rails 2.3.2 or later!"
end
end
diff --git a/vendor/plugins/engines/init.rb b/vendor/plugins/engines/init.rb
index df9452632..28418166a 100644
--- a/vendor/plugins/engines/init.rb
+++ b/vendor/plugins/engines/init.rb
@@ -1,5 +1,5 @@
# Only call Engines.init once, in the after_initialize block so that Rails
# plugin reloading works when turned on
config.after_initialize do
- Engines.init if defined? :Engines
-end
+ Engines.init(initializer) if defined? :Engines
+end \ No newline at end of file
diff --git a/vendor/plugins/engines/lib/engines.rb b/vendor/plugins/engines/lib/engines.rb
index cb97e4702..d601710b0 100644
--- a/vendor/plugins/engines/lib/engines.rb
+++ b/vendor/plugins/engines/lib/engines.rb
@@ -43,7 +43,7 @@ module Engines
# List of extensions to load, can be changed in init.rb before calling Engines.init
mattr_accessor :rails_extensions
- self.rails_extensions = %w(action_mailer asset_helpers form_tag_helpers routing migrations dependencies)
+ self.rails_extensions = %w(asset_helpers form_tag_helpers migrations dependencies)
# The name of the public directory to mirror public engine assets into.
# Defaults to <tt>RAILS_ROOT/public/plugin_assets</tt>.
@@ -68,7 +68,7 @@ module Engines
mattr_accessor :disable_application_code_loading
self.disable_application_code_loading = false
- # Set this ti true if code should not be mixed (i.e. it will be loaded
+ # Set this to true if code should not be mixed (i.e. it will be loaded
# from the first valid path on $LOAD_PATH)
mattr_accessor :disable_code_mixing
self.disable_code_mixing = false
@@ -81,7 +81,7 @@ module Engines
self.code_mixing_file_types = %w(controller helper)
class << self
- def init
+ def init(initializer)
load_extensions
Engines::Assets.initialize_base_public_directory
end
@@ -124,9 +124,9 @@ module Engines
# and that they are placed within plugin/app/things (the pluralized form of 'thing').
#
# It's important to note that you'll also want to ensure that the "things" are
- # on your load path in your plugin's init.rb:
+ # on your load path by including them in Rails load path mechanism, e.g. in init.rb:
#
- # Rails.plugins[:my_plugin].code_paths << "app/things"
+ # ActiveSupport::Dependencies.load_paths << File.join(File.dirname(__FILE__), 'app', 'things'))
#
def mix_code_from(*types)
self.code_mixing_file_types += types.map { |x| x.to_s.singularize }
diff --git a/vendor/plugins/engines/lib/engines/plugin.rb b/vendor/plugins/engines/lib/engines/plugin.rb
index 488bcd4bc..c52bbb0ce 100644
--- a/vendor/plugins/engines/lib/engines/plugin.rb
+++ b/vendor/plugins/engines/lib/engines/plugin.rb
@@ -4,23 +4,9 @@
#
# Engines.plugins[:plugin_name]
#
-# If this plugin contains paths in directories other than <tt>app/controllers</tt>,
-# <tt>app/helpers</tt>, <tt>app/models</tt> and <tt>components</tt>, authors can
-# declare this by adding extra paths to #code_paths:
-#
-# Rails.plugin[:my_plugin].code_paths << "app/sweepers" << "vendor/my_lib"
-#
# Other properties of the Plugin instance can also be set.
module Engines
class Plugin < Rails::Plugin
- # Plugins can add code paths to this attribute in init.rb if they
- # need plugin directories to be added to the load path, i.e.
- #
- # plugin.code_paths << 'app/other_classes'
- #
- # Defaults to ["app/controllers", "app/helpers", "app/models", "components"]
- attr_accessor :code_paths
-
# Plugins can add paths to this attribute in init.rb if they need
# controllers loaded from additional locations.
attr_accessor :controller_paths
@@ -32,16 +18,6 @@ module Engines
attr_accessor :public_directory
protected
-
- # The default set of code paths which will be added to $LOAD_PATH
- # and Dependencies.load_paths
- def default_code_paths
- # lib will actually be removed from the load paths when we call
- # uniq! in #inject_into_load_paths, but it's important to keep it
- # around (for the documentation tasks, for instance).
- %w(app/controllers app/helpers app/models components lib)
- end
-
# The default set of code paths which will be added to the routing system
def default_controller_paths
%w(app/controllers components)
@@ -58,41 +34,23 @@ module Engines
def initialize(directory)
super directory
- @code_paths = default_code_paths
@controller_paths = default_controller_paths
@public_directory = default_public_directory
end
- # Returns a list of paths this plugin wishes to make available in $LOAD_PATH
- #
- # Overwrites the correspondend method in the superclass
- def load_paths
- report_nonexistant_or_empty_plugin! unless valid?
- select_existing_paths :code_paths
- end
-
# Extends the superclass' load method to additionally mirror public assets
def load(initializer)
return if loaded?
super initializer
- add_plugin_view_paths
add_plugin_locale_paths
Assets.mirror_files_for(self)
end
- # for code_paths and controller_paths select those paths that actually
- # exist in the plugin's directory
+ # select those paths that actually exist in the plugin's directory
def select_existing_paths(name)
Engines.select_existing_paths(self.send(name).map { |p| File.join(directory, p) })
end
- def add_plugin_view_paths
- view_path = File.join(directory, 'app', 'views')
- if File.exist?(view_path)
- ActionController::Base.prepend_view_path(view_path) # push it just underneath the app
- end
- end
-
def add_plugin_locale_paths
locale_path = File.join(directory, 'locales')
return unless File.exists?(locale_path)
@@ -112,11 +70,6 @@ module Engines
"#{File.basename(Engines.public_directory)}/#{name}"
end
- # The path to this plugin's routes file
- def routes_path
- File.join(directory, "routes.rb")
- end
-
# The directory containing this plugin's migrations (<tt>plugin/db/migrate</tt>)
def migration_directory
File.join(self.directory, 'db', 'migrate')
diff --git a/vendor/plugins/engines/lib/engines/plugin/loader.rb b/vendor/plugins/engines/lib/engines/plugin/loader.rb
index a5be5967b..e316e4750 100644
--- a/vendor/plugins/engines/lib/engines/plugin/loader.rb
+++ b/vendor/plugins/engines/lib/engines/plugin/loader.rb
@@ -5,14 +5,7 @@ module Engines
def register_plugin_as_loaded(plugin)
super plugin
Engines.plugins << plugin
- register_to_routing(plugin)
end
-
- # Registers the plugin's controller_paths for the routing system.
- def register_to_routing(plugin)
- initializer.configuration.controller_paths += plugin.select_existing_paths(:controller_paths)
- initializer.configuration.controller_paths.uniq!
- end
end
end
end \ No newline at end of file
diff --git a/vendor/plugins/engines/lib/engines/rails_extensions/action_mailer.rb b/vendor/plugins/engines/lib/engines/rails_extensions/action_mailer.rb
deleted file mode 100644
index 32198d8e9..000000000
--- a/vendor/plugins/engines/lib/engines/rails_extensions/action_mailer.rb
+++ /dev/null
@@ -1,82 +0,0 @@
-# The way ActionMailer is coded in terms of finding templates is very restrictive, to the point
-# where all templates for rendering must exist under the single base path. This is difficult to
-# work around without re-coding significant parts of the action mailer code.
-#
-# ---
-#
-# The MailTemplates module overrides two (private) methods from ActionMailer to enable mail
-# templates within plugins:
-#
-# [+template_path+] which now produces the contents of #template_paths
-# [+initialize_template_class+] which now find the first matching template and creates
-# an ActionVew::Base instance with the correct view_paths
-#
-# Ideally ActionMailer would use the same template-location logic as ActionView, and the same
-# view paths as ActionController::Base.view_paths, but it currently does not.
-module Engines::RailsExtensions::ActionMailer
- def self.included(base) #:nodoc:
- base.class_eval do
- alias_method_chain :template_path, :engine_additions
- alias_method_chain :initialize_template_class, :engine_additions
- end
- end
-
- private
-
- #--
- # ActionMailer::Base#create uses two mechanisms to determine the proper template file(s)
- # to load. Firstly, it searches within the template_root for files that much the explicit
- # (or implicit) part encodings (like signup.text.plain.erb for the signup action).
- # This is how implicit multipart emails are built, by the way.
- #
- # Secondly, it then creates an ActionMailer::Base instance with it's view_paths parameter
- # set to the template_root, so that ActionMailer will then take over rendering the
- # templates.
- #
- # Ideally, ActionMailer would pass the same set of view paths as it gets in a normal
- # request (i.e. ActionController::Base.view_paths), so that all possible view paths
- # were searched. However, this seems to introduce some problems with helper modules.
- #
- # So instead, and because we have to fool these two independent parts of ActionMailer,
- # we fudge with the mechanisms it uses to find the templates (via template_paths, and
- # template_path_with_engine_additions), and then intercept the creation of the ActionView
- # instance so we can set the view_paths (in initialize_template_class_with_engine_additions).
- #++
-
- # Returns all possible template paths for the current mailer, including those
- # within the loaded plugins.
- def template_paths
- paths = Engines.plugins.by_precedence.map { |p| "#{p.directory}/app/views/#{mailer_name}" }
- paths.unshift(template_path_without_engine_additions) unless Engines.disable_application_view_loading
- paths
- end
-
- # Return something that Dir[] can glob against. This method is called in
- # ActionMailer::Base#create! and used as part of an argument to Dir. We can
- # take advantage of this by using some of the features of Dir.glob to search
- # multiple paths for matching files.
- def template_path_with_engine_additions
- "{#{template_paths.join(",")}}"
- end
-
- # Return an instance of ActionView::Base with the view paths set to all paths
- # in ActionController::Base.view_paths (i.e. including all plugin view paths)
- def initialize_template_class_with_engine_additions(assigns)
- # I'd like to just return this, but I get problems finding methods in helper
- # modules if the method implemention from the regular class is not called
- #
- # ActionView::Base.new(ActionController::Base.view_paths.dup, assigns, self)
- renderer = initialize_template_class_without_engine_additions(assigns)
- renderer.view_paths.unshift(*ActionController::Base.view_paths.dup)
- renderer
- end
-end
-
-# We don't need to do this if ActionMailer hasn't been loaded.
-if Object.const_defined?(:ActionMailer)
- module ::ActionMailer #:nodoc:
- class Base #:nodoc:
- include Engines::RailsExtensions::ActionMailer
- end
- end
-end \ No newline at end of file
diff --git a/vendor/plugins/engines/lib/engines/rails_extensions/routing.rb b/vendor/plugins/engines/lib/engines/rails_extensions/routing.rb
deleted file mode 100644
index aed85ffbc..000000000
--- a/vendor/plugins/engines/lib/engines/rails_extensions/routing.rb
+++ /dev/null
@@ -1,83 +0,0 @@
-# Effective use of Rails' routes can help create a tidy and elegant set of URLs,
-# and is a significant part of creating an external API for your web application.
-#
-# When developing plugins which contain controllers, it seems obvious that including
-# the corresponding routes would be extremely useful. This is particularly true
-# when exposing RESTful resources using the new REST-ian features of Rails.
-#
-# == Including routes in your plugin
-#
-# The engines plugin makes it possible to include a set of routes within your plugin
-# very simply, as it turns out. Include a <tt>routes.rb</tt> file like the one below
-# at the root of your plugin (along-side <tt>init.rb</tt> and <tt>lib/</tt>):
-#
-# connect "/login", :controller => "account", :action => "login"
-#
-# # add a named route
-# logout "/logout", :controller => "account", :action => "logout"
-#
-# # some restful stuff
-# resources :things do |t|
-# t.resources :other_things
-# end
-#
-# Everywhere in a normal <tt>RAILS_ROOT/config/routes.rb</tt> file
-# where you might have <tt>map.connect</tt>, you just use <tt>connect</tt> in your
-# plugin's <tt>routes.rb</tt>.
-#
-# === Hooking it up in your application
-#
-# While it would be possible to have each plugin's routes automagically included into
-# the application's route set, to do so would actually be a stunningly bad idea. Route
-# priority is the key issue here. You, the application developer, needs to be in complete
-# control when it comes to specifying the priority of routes in your application, since
-# the ordering of your routes directly affects how Rails will interpret incoming requests.
-#
-# To add plugin routes into your application's <tt>routes.rb</tt> file, you need to explicitly
-# map them in using the Engines::RailsExtensions::Routing#from_plugin method:
-#
-# ApplicationController::Routing::Routes.draw do |map|
-#
-# map.connect "/app_stuff", :controller => "application_thing" # etc...
-#
-# # This line includes the routes from the given plugin at this point, giving you
-# # control over the priority of your application routes
-# map.from_plugin :your_plugin
-#
-# map.connect ":controller/:action/:id"
-# end
-#
-# By including routes in plugins which have controllers, you can now share in a simple way
-# a compact and elegant URL scheme which corresponds to those controllers.
-#
-# ---
-#
-# The Engines::RailsExtensions::Routing module defines extensions to Rails'
-# routing (ActionController::Routing) mechanism such that routes can be loaded
-# from a given plugin.
-#
-# The key method is Engines::RailsExtensions::Routing#from_plugin, which can be called
-# within your application's <tt>config/routes.rb</tt> file to load plugin routes at that point.
-#
-module Engines::RailsExtensions::Routing
- # Loads the set of routes from within a plugin and evaluates them at this
- # point within an application's main <tt>routes.rb</tt> file.
- #
- # Plugin routes are loaded from <tt><plugin_root>/routes.rb</tt>.
- def from_plugin(name)
- map = self # to make 'map' available within the plugin route file
- routes_path = Engines.plugins[name].routes_path
- eval(IO.read(routes_path), binding, routes_path) if File.file?(routes_path)
- end
-end
-
-
-module ::ActionController #:nodoc:
- module Routing #:nodoc:
- class RouteSet #:nodoc:
- class Mapper #:nodoc:
- include Engines::RailsExtensions::Routing
- end
- end
- end
-end
diff --git a/vendor/plugins/engines/lib/engines/testing.rb b/vendor/plugins/engines/lib/engines/testing.rb
index f7833c385..c411f8335 100644
--- a/vendor/plugins/engines/lib/engines/testing.rb
+++ b/vendor/plugins/engines/lib/engines/testing.rb
@@ -67,10 +67,14 @@ module Engines::Testing
# This method is called by the engines-supplied plugin testing rake tasks
def self.setup_plugin_fixtures(plugins = Engines.plugins.by_precedence)
+ # First, clear the directory
+ Dir.glob("#{self.temporary_fixtures_directory}/*.yml").each{|fixture| File.delete(fixture)}
+
# Copy all plugin fixtures, and then the application fixtures, into this directory
plugins.each do |plugin|
plugin_fixtures_directory = File.join(plugin.directory, "test", "fixtures")
- if File.directory?(plugin_fixtures_directory)
+ plugin_app_directory = File.join(plugin.directory, "app")
+ if File.directory?(plugin_app_directory) && File.directory?(plugin_fixtures_directory)
Engines.mirror_files_from(plugin_fixtures_directory, self.temporary_fixtures_directory)
end
end
@@ -84,4 +88,14 @@ module Engines::Testing
ActiveSupport::TestCase.fixture_path = self.temporary_fixtures_directory
$LOAD_PATH.unshift self.temporary_fixtures_directory
end
+
+ # overridden test should be in test/{unit,functional,integration}/{plugin_name}/{test_name}
+ def self.override_tests_from_app
+ filename = caller.first.split(":").first
+ plugin_name = filename.split("/")[-4]
+ test_kind = filename.split("/")[-2]
+ override_file = File.expand_path(File.join(File.dirname(filename), "..", "..", "..", "..", "..", "test",
+ test_kind, plugin_name, File.basename(filename)))
+ load(override_file) if File.exist?(override_file)
+ end
end \ No newline at end of file
diff --git a/vendor/plugins/engines/tasks/engines.rake b/vendor/plugins/engines/tasks/engines.rake
index 0ffd7e6e7..48e317066 100644
--- a/vendor/plugins/engines/tasks/engines.rake
+++ b/vendor/plugins/engines/tasks/engines.rake
@@ -118,10 +118,10 @@ namespace :db do
end
desc 'Migrate a specified plugin.'
- task({:plugin => :environment}, :name, :version) do |task, args|
- name = args[:name] || ENV['NAME']
+ task(:plugin => :environment) do
+ name = ENV['NAME']
if plugin = Engines.plugins[name]
- version = args[:version] || ENV['VERSION']
+ version = ENV['VERSION']
puts "Migrating #{plugin.name} to " + (version ? "version #{version}" : 'latest version') + " ..."
plugin.migrate(version ? version.to_i : nil)
else
@@ -152,8 +152,8 @@ end
# this is just a modification of the original task in railties/lib/tasks/documentation.rake,
# because the default task doesn't support subdirectories like <plugin>/app or
-# <plugin>/component. These tasks now include every file under a plugin's code paths (see
-# Plugin#code_paths).
+# <plugin>/component. These tasks now include every file under a plugin's load paths (see
+# Plugin#load_paths).
namespace :doc do
plugins = FileList['vendor/plugins/**'].collect { |plugin| File.basename(plugin) }
@@ -172,9 +172,9 @@ namespace :doc do
options << '--line-numbers' << '--inline-source'
options << '-T html'
- # Include every file in the plugin's code_paths (see Plugin#code_paths)
+ # Include every file in the plugin's load_paths (see Plugin#load_paths)
if Engines.plugins[plugin]
- files.include("#{plugin_base}/{#{Engines.plugins[plugin].code_paths.join(",")}}/**/*.rb")
+ files.include("#{plugin_base}/{#{Engines.plugins[plugin].load_paths.join(",")}}/**/*.rb")
end
if File.exists?("#{plugin_base}/README")
files.include("#{plugin_base}/README")
@@ -217,6 +217,34 @@ Report any issues on http://dev.rails-engines.org. Thanks!
-~===============( ... as you were ... )============================~-}
end
+ namespace :engines do
+
+ def engine_plugins
+ Dir["vendor/plugins/*"].select { |f| File.directory?(File.join(f, "app")) }.map { |f| File.basename(f) }.join(",")
+ end
+
+ desc "Run tests from within engines plugins (plugins with an 'app' directory)"
+ task :all => [:units, :functionals, :integration]
+
+ desc "Run unit tests from within engines plugins (plugins with an 'app' directory)"
+ Rake::TestTask.new(:units => "test:plugins:setup_plugin_fixtures") do |t|
+ t.pattern = "vendor/plugins/{#{ENV['PLUGIN'] || engine_plugins}}/test/unit/**/*_test.rb"
+ t.verbose = true
+ end
+
+ desc "Run functional tests from within engines plugins (plugins with an 'app' directory)"
+ Rake::TestTask.new(:functionals => "test:plugins:setup_plugin_fixtures") do |t|
+ t.pattern = "vendor/plugins/{#{ENV['PLUGIN'] || engine_plugins}}/test/functional/**/*_test.rb"
+ t.verbose = true
+ end
+
+ desc "Run integration tests from within engines plugins (plugins with an 'app' directory)"
+ Rake::TestTask.new(:integration => "test:plugins:setup_plugin_fixtures") do |t|
+ t.pattern = "vendor/plugins/{#{ENV['PLUGIN'] || engine_plugins}}/test/integration/**/*_test.rb"
+ t.verbose = true
+ end
+ end
+
namespace :plugins do
desc "Run the plugin tests in vendor/plugins/**/test (or specify with PLUGIN=name)"
diff --git a/vendor/plugins/engines/test/app/controllers/app_and_plugin_controller.rb b/vendor/plugins/engines/test/app/controllers/app_and_plugin_controller.rb
new file mode 100644
index 000000000..90b13ff1f
--- /dev/null
+++ b/vendor/plugins/engines/test/app/controllers/app_and_plugin_controller.rb
@@ -0,0 +1,5 @@
+class AppAndPluginController < ApplicationController
+ def an_action
+ render_class_and_action 'from app'
+ end
+end
diff --git a/vendor/plugins/engines/test/app/controllers/namespace/app_and_plugin_controller.rb b/vendor/plugins/engines/test/app/controllers/namespace/app_and_plugin_controller.rb
new file mode 100644
index 000000000..05f9049e9
--- /dev/null
+++ b/vendor/plugins/engines/test/app/controllers/namespace/app_and_plugin_controller.rb
@@ -0,0 +1,5 @@
+class Namespace::AppAndPluginController < ApplicationController
+ def an_action
+ render_class_and_action 'from app'
+ end
+end
diff --git a/vendor/plugins/engines/test/app/helpers/mail_helper.rb b/vendor/plugins/engines/test/app/helpers/mail_helper.rb
new file mode 100644
index 000000000..9e081e75f
--- /dev/null
+++ b/vendor/plugins/engines/test/app/helpers/mail_helper.rb
@@ -0,0 +1,5 @@
+module MailHelper
+ def do_something_helpful(var)
+ var.to_s.reverse
+ end
+end \ No newline at end of file
diff --git a/vendor/plugins/engines/test/app/models/app_and_plugin_model.rb b/vendor/plugins/engines/test/app/models/app_and_plugin_model.rb
new file mode 100644
index 000000000..f0fe903c4
--- /dev/null
+++ b/vendor/plugins/engines/test/app/models/app_and_plugin_model.rb
@@ -0,0 +1,3 @@
+class AppAndPluginModel < ActiveRecord::Base
+ def self.report_location; TestHelper::report_location(__FILE__); end
+end \ No newline at end of file
diff --git a/vendor/plugins/engines/test/app/models/notify_mail.rb b/vendor/plugins/engines/test/app/models/notify_mail.rb
new file mode 100644
index 000000000..899fc1a40
--- /dev/null
+++ b/vendor/plugins/engines/test/app/models/notify_mail.rb
@@ -0,0 +1,26 @@
+class NotifyMail < ActionMailer::Base
+
+ helper :mail
+
+ def signup(txt)
+ body(:name => txt)
+ end
+
+ def multipart
+ recipients 'some_address@email.com'
+ subject 'multi part email'
+ from "another_user@email.com"
+ content_type 'multipart/alternative'
+
+ part :content_type => "text/html", :body => render_message("multipart_html", {})
+ part "text/plain" do |p|
+ p.body = render_message("multipart_plain", {})
+ end
+ end
+
+ def implicit_multipart
+ recipients 'some_address@email.com'
+ subject 'multi part email'
+ from "another_user@email.com"
+ end
+end \ No newline at end of file
diff --git a/vendor/plugins/engines/test/app/things/thing.rb b/vendor/plugins/engines/test/app/things/thing.rb
new file mode 100644
index 000000000..ae6fbbf30
--- /dev/null
+++ b/vendor/plugins/engines/test/app/things/thing.rb
@@ -0,0 +1,3 @@
+class Thing
+ def self.from_app; TestHelper::report_location(__FILE__); end
+end \ No newline at end of file
diff --git a/vendor/plugins/engines/test/app/views/app_and_plugin/a_view.html.erb b/vendor/plugins/engines/test/app/views/app_and_plugin/a_view.html.erb
new file mode 100644
index 000000000..03e2bf81d
--- /dev/null
+++ b/vendor/plugins/engines/test/app/views/app_and_plugin/a_view.html.erb
@@ -0,0 +1 @@
+<%= TestHelper.view_path_for __FILE__ %> (from app) \ No newline at end of file
diff --git a/vendor/plugins/engines/test/app/views/namespace/app_and_plugin/a_view.html.erb b/vendor/plugins/engines/test/app/views/namespace/app_and_plugin/a_view.html.erb
new file mode 100644
index 000000000..03e2bf81d
--- /dev/null
+++ b/vendor/plugins/engines/test/app/views/namespace/app_and_plugin/a_view.html.erb
@@ -0,0 +1 @@
+<%= TestHelper.view_path_for __FILE__ %> (from app) \ No newline at end of file
diff --git a/vendor/plugins/engines/test/app/views/notify_mail/implicit_multipart.text.html.erb b/vendor/plugins/engines/test/app/views/notify_mail/implicit_multipart.text.html.erb
new file mode 100644
index 000000000..042b5c4ef
--- /dev/null
+++ b/vendor/plugins/engines/test/app/views/notify_mail/implicit_multipart.text.html.erb
@@ -0,0 +1 @@
+the implicit html part of the email <%= do_something_helpful("semaj") %> \ No newline at end of file
diff --git a/vendor/plugins/engines/test/app/views/notify_mail/implicit_multipart.text.plain.erb b/vendor/plugins/engines/test/app/views/notify_mail/implicit_multipart.text.plain.erb
new file mode 100644
index 000000000..552acc1ea
--- /dev/null
+++ b/vendor/plugins/engines/test/app/views/notify_mail/implicit_multipart.text.plain.erb
@@ -0,0 +1 @@
+the implicit plaintext part of the email \ No newline at end of file
diff --git a/vendor/plugins/engines/test/app/views/notify_mail/multipart_html.html.erb b/vendor/plugins/engines/test/app/views/notify_mail/multipart_html.html.erb
new file mode 100644
index 000000000..135488b17
--- /dev/null
+++ b/vendor/plugins/engines/test/app/views/notify_mail/multipart_html.html.erb
@@ -0,0 +1 @@
+the html part of the email <%= do_something_helpful("semaj") %> \ No newline at end of file
diff --git a/vendor/plugins/engines/test/app/views/notify_mail/multipart_plain.html.erb b/vendor/plugins/engines/test/app/views/notify_mail/multipart_plain.html.erb
new file mode 100644
index 000000000..e0050461c
--- /dev/null
+++ b/vendor/plugins/engines/test/app/views/notify_mail/multipart_plain.html.erb
@@ -0,0 +1 @@
+the plaintext part of the email \ No newline at end of file
diff --git a/vendor/plugins/engines/test/app/views/notify_mail/signup.text.plain.erb b/vendor/plugins/engines/test/app/views/notify_mail/signup.text.plain.erb
new file mode 100644
index 000000000..5aaf46e97
--- /dev/null
+++ b/vendor/plugins/engines/test/app/views/notify_mail/signup.text.plain.erb
@@ -0,0 +1,5 @@
+Signup template from application
+
+Here's a local variable set in the Mail object: <%= @name %>.
+
+And here's a method called in a mail helper: <%= do_something_helpful(@name) %>
diff --git a/vendor/plugins/engines/test/app/views/plugin_mail/mail_from_plugin_with_application_template.text.plain.erb b/vendor/plugins/engines/test/app/views/plugin_mail/mail_from_plugin_with_application_template.text.plain.erb
new file mode 100644
index 000000000..67a6b8fa2
--- /dev/null
+++ b/vendor/plugins/engines/test/app/views/plugin_mail/mail_from_plugin_with_application_template.text.plain.erb
@@ -0,0 +1 @@
+<%= @note %> (from application) \ No newline at end of file
diff --git a/vendor/plugins/engines/test/app/views/plugin_mail/multipart_from_plugin_with_application_template_plain.html.erb b/vendor/plugins/engines/test/app/views/plugin_mail/multipart_from_plugin_with_application_template_plain.html.erb
new file mode 100644
index 000000000..284e450f6
--- /dev/null
+++ b/vendor/plugins/engines/test/app/views/plugin_mail/multipart_from_plugin_with_application_template_plain.html.erb
@@ -0,0 +1 @@
+plugin mail template loaded from application \ No newline at end of file
diff --git a/vendor/plugins/engines/test/functional/controller_loading_test.rb b/vendor/plugins/engines/test/functional/controller_loading_test.rb
new file mode 100644
index 000000000..d51bc0007
--- /dev/null
+++ b/vendor/plugins/engines/test/functional/controller_loading_test.rb
@@ -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
diff --git a/vendor/plugins/engines/test/functional/exception_notification_compatibility_test.rb b/vendor/plugins/engines/test/functional/exception_notification_compatibility_test.rb
new file mode 100644
index 000000000..309330659
--- /dev/null
+++ b/vendor/plugins/engines/test/functional/exception_notification_compatibility_test.rb
@@ -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 \ No newline at end of file
diff --git a/vendor/plugins/engines/test/functional/locale_loading_test.rb b/vendor/plugins/engines/test/functional/locale_loading_test.rb
new file mode 100644
index 000000000..21c8c7f94
--- /dev/null
+++ b/vendor/plugins/engines/test/functional/locale_loading_test.rb
@@ -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
+
diff --git a/vendor/plugins/engines/test/functional/routes_test.rb b/vendor/plugins/engines/test/functional/routes_test.rb
new file mode 100644
index 000000000..733dd39f5
--- /dev/null
+++ b/vendor/plugins/engines/test/functional/routes_test.rb
@@ -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 \ No newline at end of file
diff --git a/vendor/plugins/engines/test/functional/view_helpers_test.rb b/vendor/plugins/engines/test/functional/view_helpers_test.rb
new file mode 100644
index 000000000..5448ffeb7
--- /dev/null
+++ b/vendor/plugins/engines/test/functional/view_helpers_test.rb
@@ -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
diff --git a/vendor/plugins/engines/test/functional/view_loading_test.rb b/vendor/plugins/engines/test/functional/view_loading_test.rb
new file mode 100644
index 000000000..28d47546a
--- /dev/null
+++ b/vendor/plugins/engines/test/functional/view_loading_test.rb
@@ -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
+ \ No newline at end of file
diff --git a/vendor/plugins/engines/test/lib/app_and_plugin_lib_model.rb b/vendor/plugins/engines/test/lib/app_and_plugin_lib_model.rb
new file mode 100644
index 000000000..6ffe178a7
--- /dev/null
+++ b/vendor/plugins/engines/test/lib/app_and_plugin_lib_model.rb
@@ -0,0 +1,3 @@
+class AppAndPluginLibModel < ActiveRecord::Base
+ def self.report_location; TestHelper::report_location(__FILE__); end
+end \ No newline at end of file
diff --git a/vendor/plugins/engines/test/lib/engines_test_helper.rb b/vendor/plugins/engines/test/lib/engines_test_helper.rb
new file mode 100644
index 000000000..47bd2bbfd
--- /dev/null
+++ b/vendor/plugins/engines/test/lib/engines_test_helper.rb
@@ -0,0 +1,42 @@
+module TestHelper
+ def self.report_location(path)
+ [RAILS_ROOT + '/', 'vendor/plugins/'].each { |part| path.sub! part, ''}
+ path = path.split('/')
+ location, subject = path.first, path.last
+ if subject.sub! '.rb', ''
+ subject = subject.classify
+ else
+ subject.sub! '.html.erb', ''
+ end
+ "#{subject} (from #{location})"
+ end
+
+ def self.view_path_for path
+ [RAILS_ROOT + '/', 'vendor/plugins/', '.html.erb'].each { |part| path.sub! part, ''}
+ parts = path.split('/')
+ parts[(parts.index('views')+1)..-1].join('/')
+ end
+end
+
+class Test::Unit::TestCase
+ # Add more helper methods to be used by all tests here...
+ def get_action_on_controller(*args)
+ action = args.shift
+ with_controller *args
+ get action
+ end
+
+ def with_controller(controller, namespace = nil)
+ classname = controller.to_s.classify + 'Controller'
+ classname = namespace.to_s.classify + '::' + classname unless namespace.nil?
+ @controller = classname.constantize.new
+ end
+
+ def assert_response_body(expected)
+ assert_equal expected, @response.body
+ end
+end
+
+# Because we're testing this behaviour, we actually want these features on!
+Engines.disable_application_view_loading = false
+Engines.disable_application_code_loading = false
diff --git a/vendor/plugins/engines/test/lib/render_information.rb b/vendor/plugins/engines/test/lib/render_information.rb
new file mode 100644
index 000000000..0deb5d9d3
--- /dev/null
+++ b/vendor/plugins/engines/test/lib/render_information.rb
@@ -0,0 +1,7 @@
+module RenderInformation
+ def render_class_and_action(note = nil, options={})
+ text = "rendered in #{self.class.name}##{params[:action]}"
+ text += " (#{note})" unless note.nil?
+ render options.update(:text => text)
+ end
+end \ No newline at end of file
diff --git a/vendor/plugins/engines/test/plugins/alpha_plugin/app/controllers/alpha_plugin_controller.rb b/vendor/plugins/engines/test/plugins/alpha_plugin/app/controllers/alpha_plugin_controller.rb
new file mode 100644
index 000000000..736d59b83
--- /dev/null
+++ b/vendor/plugins/engines/test/plugins/alpha_plugin/app/controllers/alpha_plugin_controller.rb
@@ -0,0 +1,8 @@
+class AlphaPluginController < ApplicationController
+ def an_action
+ render_class_and_action
+ end
+ def action_with_layout
+ render_class_and_action(nil, :layout => "plugin_layout")
+ end
+end
diff --git a/vendor/plugins/engines/test/plugins/alpha_plugin/app/controllers/app_and_plugin_controller.rb b/vendor/plugins/engines/test/plugins/alpha_plugin/app/controllers/app_and_plugin_controller.rb
new file mode 100644
index 000000000..c41d6edd1
--- /dev/null
+++ b/vendor/plugins/engines/test/plugins/alpha_plugin/app/controllers/app_and_plugin_controller.rb
@@ -0,0 +1,5 @@
+class AppAndPluginController < ApplicationController
+ def an_action
+ render_class_and_action 'from alpha_plugin'
+ end
+end
diff --git a/vendor/plugins/engines/test/plugins/alpha_plugin/app/controllers/namespace/alpha_plugin_controller.rb b/vendor/plugins/engines/test/plugins/alpha_plugin/app/controllers/namespace/alpha_plugin_controller.rb
new file mode 100644
index 000000000..5edf81b53
--- /dev/null
+++ b/vendor/plugins/engines/test/plugins/alpha_plugin/app/controllers/namespace/alpha_plugin_controller.rb
@@ -0,0 +1,5 @@
+class Namespace::AlphaPluginController < ApplicationController
+ def an_action
+ render_class_and_action
+ end
+end \ No newline at end of file
diff --git a/vendor/plugins/engines/test/plugins/alpha_plugin/app/controllers/namespace/app_and_plugin_controller.rb b/vendor/plugins/engines/test/plugins/alpha_plugin/app/controllers/namespace/app_and_plugin_controller.rb
new file mode 100644
index 000000000..7431a36b6
--- /dev/null
+++ b/vendor/plugins/engines/test/plugins/alpha_plugin/app/controllers/namespace/app_and_plugin_controller.rb
@@ -0,0 +1,5 @@
+class Namespace::AppAndPluginController < ApplicationController
+ def an_action
+ render_class_and_action 'from alpha_plugin'
+ end
+end
diff --git a/vendor/plugins/engines/test/plugins/alpha_plugin/app/controllers/namespace/shared_plugin_controller.rb b/vendor/plugins/engines/test/plugins/alpha_plugin/app/controllers/namespace/shared_plugin_controller.rb
new file mode 100644
index 000000000..fb162bcf6
--- /dev/null
+++ b/vendor/plugins/engines/test/plugins/alpha_plugin/app/controllers/namespace/shared_plugin_controller.rb
@@ -0,0 +1,5 @@
+class Namespace::SharedPluginController < ApplicationController
+ def an_action
+ render_class_and_action 'from alpha_plugin'
+ end
+end
diff --git a/vendor/plugins/engines/test/plugins/alpha_plugin/app/controllers/shared_plugin_controller.rb b/vendor/plugins/engines/test/plugins/alpha_plugin/app/controllers/shared_plugin_controller.rb
new file mode 100644
index 000000000..00539bb8c
--- /dev/null
+++ b/vendor/plugins/engines/test/plugins/alpha_plugin/app/controllers/shared_plugin_controller.rb
@@ -0,0 +1,5 @@
+class SharedEngineController < ApplicationController
+ def an_action
+ render_class_and_action 'from alpha_engine'
+ end
+end
diff --git a/vendor/plugins/engines/test/plugins/alpha_plugin/app/models/alpha_plugin_model.rb b/vendor/plugins/engines/test/plugins/alpha_plugin/app/models/alpha_plugin_model.rb
new file mode 100644
index 000000000..cde71b8d0
--- /dev/null
+++ b/vendor/plugins/engines/test/plugins/alpha_plugin/app/models/alpha_plugin_model.rb
@@ -0,0 +1,3 @@
+class AlphaPluginModel < ActiveRecord::Base
+ def self.report_location; TestHelper::report_location(__FILE__); end
+end \ No newline at end of file
diff --git a/vendor/plugins/engines/test/plugins/alpha_plugin/app/models/app_and_plugin_model.rb b/vendor/plugins/engines/test/plugins/alpha_plugin/app/models/app_and_plugin_model.rb
new file mode 100644
index 000000000..92e6e625f
--- /dev/null
+++ b/vendor/plugins/engines/test/plugins/alpha_plugin/app/models/app_and_plugin_model.rb
@@ -0,0 +1,7 @@
+class AppAndPluginModel < ActiveRecord::Base
+ def self.report_location; TestHelper::report_location(__FILE__); end
+
+ def defined_only_in_alpha_plugin_version
+ # should not be defined as the model in app/models takes precedence
+ end
+end \ No newline at end of file
diff --git a/vendor/plugins/engines/test/plugins/alpha_plugin/app/models/shared_plugin_model.rb b/vendor/plugins/engines/test/plugins/alpha_plugin/app/models/shared_plugin_model.rb
new file mode 100644
index 000000000..e2ef43db7
--- /dev/null
+++ b/vendor/plugins/engines/test/plugins/alpha_plugin/app/models/shared_plugin_model.rb
@@ -0,0 +1,3 @@
+class SharedPluginModel < ActiveRecord::Base
+ def self.report_location; TestHelper::report_location(__FILE__); end
+end \ No newline at end of file
diff --git a/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/alpha_plugin/a_view.html.erb b/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/alpha_plugin/a_view.html.erb
new file mode 100644
index 000000000..1ad694584
--- /dev/null
+++ b/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/alpha_plugin/a_view.html.erb
@@ -0,0 +1 @@
+<%= TestHelper.view_path_for __FILE__ %> \ No newline at end of file
diff --git a/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/app_and_plugin/a_view.html.erb b/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/app_and_plugin/a_view.html.erb
new file mode 100644
index 000000000..791a6fab4
--- /dev/null
+++ b/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/app_and_plugin/a_view.html.erb
@@ -0,0 +1 @@
+<%= TestHelper.view_path_for __FILE__ %> (from a_view) \ No newline at end of file
diff --git a/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/layouts/plugin_layout.erb b/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/layouts/plugin_layout.erb
new file mode 100644
index 000000000..878e07c2c
--- /dev/null
+++ b/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/layouts/plugin_layout.erb
@@ -0,0 +1 @@
+<%= yield %> (with plugin layout) \ No newline at end of file
diff --git a/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/alpha_plugin/a_view.html.erb b/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/alpha_plugin/a_view.html.erb
new file mode 100644
index 000000000..1ad694584
--- /dev/null
+++ b/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/alpha_plugin/a_view.html.erb
@@ -0,0 +1 @@
+<%= TestHelper.view_path_for __FILE__ %> \ No newline at end of file
diff --git a/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/app_and_plugin/a_view.html.erb b/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/app_and_plugin/a_view.html.erb
new file mode 100644
index 000000000..1ad694584
--- /dev/null
+++ b/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/app_and_plugin/a_view.html.erb
@@ -0,0 +1 @@
+<%= TestHelper.view_path_for __FILE__ %> \ No newline at end of file
diff --git a/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/shared_plugin/a_view.html.erb b/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/shared_plugin/a_view.html.erb
new file mode 100644
index 000000000..f144ab394
--- /dev/null
+++ b/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/shared_plugin/a_view.html.erb
@@ -0,0 +1 @@
+<%= TestHelper.view_path_for __FILE__ %> (from alpha_plugin) \ No newline at end of file
diff --git a/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/shared_plugin/a_view.html.erb b/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/shared_plugin/a_view.html.erb
new file mode 100644
index 000000000..f144ab394
--- /dev/null
+++ b/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/shared_plugin/a_view.html.erb
@@ -0,0 +1 @@
+<%= TestHelper.view_path_for __FILE__ %> (from alpha_plugin) \ No newline at end of file
diff --git a/vendor/plugins/engines/test/plugins/alpha_plugin/lib/alpha_plugin_lib_model.rb b/vendor/plugins/engines/test/plugins/alpha_plugin/lib/alpha_plugin_lib_model.rb
new file mode 100644
index 000000000..0ce4f91bb
--- /dev/null
+++ b/vendor/plugins/engines/test/plugins/alpha_plugin/lib/alpha_plugin_lib_model.rb
@@ -0,0 +1,3 @@
+class AlphaPluginLibModel < ActiveRecord::Base
+ def self.report_location; TestHelper::report_location(__FILE__); end
+end \ No newline at end of file
diff --git a/vendor/plugins/engines/test/plugins/alpha_plugin/lib/app_and_plugin_lib_model.rb b/vendor/plugins/engines/test/plugins/alpha_plugin/lib/app_and_plugin_lib_model.rb
new file mode 100644
index 000000000..645a70c83
--- /dev/null
+++ b/vendor/plugins/engines/test/plugins/alpha_plugin/lib/app_and_plugin_lib_model.rb
@@ -0,0 +1,7 @@
+class AppAndPluginLibModel < ActiveRecord::Base
+ def self.report_location; TestHelper::report_location(__FILE__); end
+
+ def defined_only_in_alpha_plugin_version
+ # should not be defined
+ end
+end \ No newline at end of file
diff --git a/vendor/plugins/engines/test/plugins/alpha_plugin/locales/en.yml b/vendor/plugins/engines/test/plugins/alpha_plugin/locales/en.yml
new file mode 100644
index 000000000..76d39d315
--- /dev/null
+++ b/vendor/plugins/engines/test/plugins/alpha_plugin/locales/en.yml
@@ -0,0 +1,3 @@
+en:
+ hello: "Hello from alfa"
+ plugin: "alfa"
diff --git a/vendor/plugins/engines/test/plugins/beta_plugin/app/controllers/app_and_plugin_controller.rb b/vendor/plugins/engines/test/plugins/beta_plugin/app/controllers/app_and_plugin_controller.rb
new file mode 100644
index 000000000..2e7798976
--- /dev/null
+++ b/vendor/plugins/engines/test/plugins/beta_plugin/app/controllers/app_and_plugin_controller.rb
@@ -0,0 +1,5 @@
+class AppAndPluginController < ApplicationController
+ def an_action
+ render_class_and_action 'from beta_plugin'
+ end
+end
diff --git a/vendor/plugins/engines/test/plugins/beta_plugin/app/controllers/namespace/shared_plugin_controller.rb b/vendor/plugins/engines/test/plugins/beta_plugin/app/controllers/namespace/shared_plugin_controller.rb
new file mode 100644
index 000000000..971c7d563
--- /dev/null
+++ b/vendor/plugins/engines/test/plugins/beta_plugin/app/controllers/namespace/shared_plugin_controller.rb
@@ -0,0 +1,5 @@
+class Namespace::SharedPluginController < ApplicationController
+ def an_action
+ render_class_and_action 'from beta_plugin'
+ end
+end
diff --git a/vendor/plugins/engines/test/plugins/beta_plugin/app/controllers/shared_plugin_controller.rb b/vendor/plugins/engines/test/plugins/beta_plugin/app/controllers/shared_plugin_controller.rb
new file mode 100644
index 000000000..ddd9dbede
--- /dev/null
+++ b/vendor/plugins/engines/test/plugins/beta_plugin/app/controllers/shared_plugin_controller.rb
@@ -0,0 +1,5 @@
+class SharedPluginController < ApplicationController
+ def an_action
+ render_class_and_action 'from beta_plugin'
+ end
+end
diff --git a/vendor/plugins/engines/test/plugins/beta_plugin/app/models/shared_plugin_model.rb b/vendor/plugins/engines/test/plugins/beta_plugin/app/models/shared_plugin_model.rb
new file mode 100644
index 000000000..bfde227d1
--- /dev/null
+++ b/vendor/plugins/engines/test/plugins/beta_plugin/app/models/shared_plugin_model.rb
@@ -0,0 +1,3 @@
+class SharedPluginModel < ActiveRecord::Base
+ def self.report_location; TestHelper::report_location(__FILE__); end
+end \ No newline at end of file
diff --git a/vendor/plugins/engines/test/plugins/beta_plugin/app/views/namespace/shared_plugin/a_view.html.erb b/vendor/plugins/engines/test/plugins/beta_plugin/app/views/namespace/shared_plugin/a_view.html.erb
new file mode 100644
index 000000000..77b5a1538
--- /dev/null
+++ b/vendor/plugins/engines/test/plugins/beta_plugin/app/views/namespace/shared_plugin/a_view.html.erb
@@ -0,0 +1 @@
+<%= TestHelper.view_path_for __FILE__ %> (from beta_plugin) \ No newline at end of file
diff --git a/vendor/plugins/engines/test/plugins/beta_plugin/app/views/shared_plugin/a_view.html.erb b/vendor/plugins/engines/test/plugins/beta_plugin/app/views/shared_plugin/a_view.html.erb
new file mode 100644
index 000000000..77b5a1538
--- /dev/null
+++ b/vendor/plugins/engines/test/plugins/beta_plugin/app/views/shared_plugin/a_view.html.erb
@@ -0,0 +1 @@
+<%= TestHelper.view_path_for __FILE__ %> (from beta_plugin) \ No newline at end of file
diff --git a/vendor/plugins/engines/test/plugins/beta_plugin/init.rb b/vendor/plugins/engines/test/plugins/beta_plugin/init.rb
new file mode 100644
index 000000000..b4c4b0e1d
--- /dev/null
+++ b/vendor/plugins/engines/test/plugins/beta_plugin/init.rb
@@ -0,0 +1 @@
+# just here so that Rails recognizes this as a plugin \ No newline at end of file
diff --git a/vendor/plugins/engines/test/plugins/beta_plugin/locales/en.yml b/vendor/plugins/engines/test/plugins/beta_plugin/locales/en.yml
new file mode 100644
index 000000000..f49279cca
--- /dev/null
+++ b/vendor/plugins/engines/test/plugins/beta_plugin/locales/en.yml
@@ -0,0 +1,3 @@
+en:
+ hello: "Hello from beta"
+ plugin: "beta"
diff --git a/vendor/plugins/engines/test/plugins/not_a_plugin/public/should_not_be_copied.txt b/vendor/plugins/engines/test/plugins/not_a_plugin/public/should_not_be_copied.txt
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/vendor/plugins/engines/test/plugins/not_a_plugin/public/should_not_be_copied.txt
diff --git a/vendor/plugins/engines/test/plugins/test_assets/app/controllers/assets_controller.rb b/vendor/plugins/engines/test/plugins/test_assets/app/controllers/assets_controller.rb
new file mode 100644
index 000000000..db5de2e6a
--- /dev/null
+++ b/vendor/plugins/engines/test/plugins/test_assets/app/controllers/assets_controller.rb
@@ -0,0 +1,2 @@
+class AssetsController < ApplicationController
+end \ No newline at end of file
diff --git a/vendor/plugins/engines/test/plugins/test_assets/app/views/assets/index.html.erb b/vendor/plugins/engines/test/plugins/test_assets/app/views/assets/index.html.erb
new file mode 100644
index 000000000..8340f76d1
--- /dev/null
+++ b/vendor/plugins/engines/test/plugins/test_assets/app/views/assets/index.html.erb
@@ -0,0 +1,4 @@
+<%= image_tag 'image.png', :plugin => 'test_assets' %>
+<%= javascript_include_tag 'file.1.js', 'file2', :plugin => "test_assets" %>
+<%= stylesheet_link_tag 'file.1.css', 'file2', :plugin => "test_assets" %>
+<%= image_submit_tag 'image.png', :plugin => "test_assets" %>
diff --git a/vendor/plugins/engines/test/plugins/test_assets/app/views/layouts/assets.html.erb b/vendor/plugins/engines/test/plugins/test_assets/app/views/layouts/assets.html.erb
new file mode 100644
index 000000000..b7da375e9
--- /dev/null
+++ b/vendor/plugins/engines/test/plugins/test_assets/app/views/layouts/assets.html.erb
@@ -0,0 +1,3 @@
+<div id="assets_layout">
+ <%= yield %>
+</div> \ No newline at end of file
diff --git a/vendor/plugins/engines/test/plugins/test_assets/init.rb b/vendor/plugins/engines/test/plugins/test_assets/init.rb
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/vendor/plugins/engines/test/plugins/test_assets/init.rb
diff --git a/vendor/plugins/engines/test/plugins/test_assets/public/file.txt b/vendor/plugins/engines/test/plugins/test_assets/public/file.txt
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/vendor/plugins/engines/test/plugins/test_assets/public/file.txt
diff --git a/vendor/plugins/engines/test/plugins/test_assets/public/subfolder/file_in_subfolder.txt b/vendor/plugins/engines/test/plugins/test_assets/public/subfolder/file_in_subfolder.txt
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/vendor/plugins/engines/test/plugins/test_assets/public/subfolder/file_in_subfolder.txt
diff --git a/vendor/plugins/engines/test/plugins/test_assets_with_assets_directory/assets/file.txt b/vendor/plugins/engines/test/plugins/test_assets_with_assets_directory/assets/file.txt
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/vendor/plugins/engines/test/plugins/test_assets_with_assets_directory/assets/file.txt
diff --git a/vendor/plugins/engines/test/plugins/test_assets_with_assets_directory/assets/subfolder/file_in_subfolder.txt b/vendor/plugins/engines/test/plugins/test_assets_with_assets_directory/assets/subfolder/file_in_subfolder.txt
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/vendor/plugins/engines/test/plugins/test_assets_with_assets_directory/assets/subfolder/file_in_subfolder.txt
diff --git a/vendor/plugins/engines/test/plugins/test_assets_with_assets_directory/init.rb b/vendor/plugins/engines/test/plugins/test_assets_with_assets_directory/init.rb
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/vendor/plugins/engines/test/plugins/test_assets_with_assets_directory/init.rb
diff --git a/vendor/plugins/engines/test/plugins/test_assets_with_no_subdirectory/assets/file.txt b/vendor/plugins/engines/test/plugins/test_assets_with_no_subdirectory/assets/file.txt
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/vendor/plugins/engines/test/plugins/test_assets_with_no_subdirectory/assets/file.txt
diff --git a/vendor/plugins/engines/test/plugins/test_assets_with_no_subdirectory/init.rb b/vendor/plugins/engines/test/plugins/test_assets_with_no_subdirectory/init.rb
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/vendor/plugins/engines/test/plugins/test_assets_with_no_subdirectory/init.rb
diff --git a/vendor/plugins/engines/test/plugins/test_code_mixing/app/things/thing.rb b/vendor/plugins/engines/test/plugins/test_code_mixing/app/things/thing.rb
new file mode 100644
index 000000000..535d988e6
--- /dev/null
+++ b/vendor/plugins/engines/test/plugins/test_code_mixing/app/things/thing.rb
@@ -0,0 +1,3 @@
+class Thing
+ def self.from_plugin; TestHelper::report_location(__FILE__); end
+end \ No newline at end of file
diff --git a/vendor/plugins/engines/test/plugins/test_code_mixing/init.rb b/vendor/plugins/engines/test/plugins/test_code_mixing/init.rb
new file mode 100644
index 000000000..b4c4b0e1d
--- /dev/null
+++ b/vendor/plugins/engines/test/plugins/test_code_mixing/init.rb
@@ -0,0 +1 @@
+# just here so that Rails recognizes this as a plugin \ No newline at end of file
diff --git a/vendor/plugins/engines/test/plugins/test_load_path/init.rb b/vendor/plugins/engines/test/plugins/test_load_path/init.rb
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/vendor/plugins/engines/test/plugins/test_load_path/init.rb
diff --git a/vendor/plugins/engines/test/plugins/test_migration/db/migrate/001_create_tests.rb b/vendor/plugins/engines/test/plugins/test_migration/db/migrate/001_create_tests.rb
new file mode 100644
index 000000000..804a0cd2d
--- /dev/null
+++ b/vendor/plugins/engines/test/plugins/test_migration/db/migrate/001_create_tests.rb
@@ -0,0 +1,11 @@
+class CreateTests < ActiveRecord::Migration
+ def self.up
+ create_table 'tests' do |t|
+ t.column 'name', :string
+ end
+ end
+
+ def self.down
+ drop_table 'tests'
+ end
+end
diff --git a/vendor/plugins/engines/test/plugins/test_migration/db/migrate/002_create_others.rb b/vendor/plugins/engines/test/plugins/test_migration/db/migrate/002_create_others.rb
new file mode 100644
index 000000000..756aca653
--- /dev/null
+++ b/vendor/plugins/engines/test/plugins/test_migration/db/migrate/002_create_others.rb
@@ -0,0 +1,11 @@
+class CreateOthers < ActiveRecord::Migration
+ def self.up
+ create_table 'others' do |t|
+ t.column 'name', :string
+ end
+ end
+
+ def self.down
+ drop_table 'others'
+ end
+end
diff --git a/vendor/plugins/engines/test/plugins/test_migration/db/migrate/003_create_extras.rb b/vendor/plugins/engines/test/plugins/test_migration/db/migrate/003_create_extras.rb
new file mode 100644
index 000000000..fb5b6c205
--- /dev/null
+++ b/vendor/plugins/engines/test/plugins/test_migration/db/migrate/003_create_extras.rb
@@ -0,0 +1,11 @@
+class CreateExtras < ActiveRecord::Migration
+ def self.up
+ create_table 'extras' do |t|
+ t.column 'name', :string
+ end
+ end
+
+ def self.down
+ drop_table 'extras'
+ end
+end
diff --git a/vendor/plugins/engines/test/plugins/test_migration/init.rb b/vendor/plugins/engines/test/plugins/test_migration/init.rb
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/vendor/plugins/engines/test/plugins/test_migration/init.rb
diff --git a/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/models/plugin_mail.rb b/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/models/plugin_mail.rb
new file mode 100644
index 000000000..4f3661639
--- /dev/null
+++ b/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/models/plugin_mail.rb
@@ -0,0 +1,26 @@
+class PluginMail < ActionMailer::Base
+ def mail_from_plugin(note=nil)
+ body(:note => note)
+ end
+
+ def mail_from_plugin_with_application_template(note=nil)
+ body(:note => note)
+ end
+
+ def multipart_from_plugin
+ content_type 'multipart/alternative'
+ part :content_type => "text/html", :body => render_message("multipart_from_plugin_html", {})
+ part "text/plain" do |p|
+ p.body = render_message("multipart_from_plugin_plain", {})
+ end
+ end
+
+ def multipart_from_plugin_with_application_template
+ content_type 'multipart/alternative'
+ part :content_type => "text/html", :body => render_message("multipart_from_plugin_with_application_template_html", {})
+ part "text/plain" do |p|
+ p.body = render_message("multipart_from_plugin_with_application_template_plain", {})
+ end
+ end
+
+end \ No newline at end of file
diff --git a/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/views/plugin_mail/mail_from_plugin.erb b/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/views/plugin_mail/mail_from_plugin.erb
new file mode 100644
index 000000000..2b4960625
--- /dev/null
+++ b/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/views/plugin_mail/mail_from_plugin.erb
@@ -0,0 +1 @@
+<%= @note %> \ No newline at end of file
diff --git a/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/views/plugin_mail/multipart_from_plugin_html.html.erb b/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/views/plugin_mail/multipart_from_plugin_html.html.erb
new file mode 100644
index 000000000..46291d8f0
--- /dev/null
+++ b/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/views/plugin_mail/multipart_from_plugin_html.html.erb
@@ -0,0 +1 @@
+html template \ No newline at end of file
diff --git a/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/views/plugin_mail/multipart_from_plugin_plain.html.erb b/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/views/plugin_mail/multipart_from_plugin_plain.html.erb
new file mode 100644
index 000000000..f690dbaac
--- /dev/null
+++ b/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/views/plugin_mail/multipart_from_plugin_plain.html.erb
@@ -0,0 +1 @@
+plain template \ No newline at end of file
diff --git a/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/views/plugin_mail/multipart_from_plugin_with_application_template_html.html.erb b/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/views/plugin_mail/multipart_from_plugin_with_application_template_html.html.erb
new file mode 100644
index 000000000..795f0d508
--- /dev/null
+++ b/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/views/plugin_mail/multipart_from_plugin_with_application_template_html.html.erb
@@ -0,0 +1 @@
+template from plugin \ No newline at end of file
diff --git a/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/views/plugin_mail/multipart_from_plugin_with_application_template_plain.html.erb b/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/views/plugin_mail/multipart_from_plugin_with_application_template_plain.html.erb
new file mode 100644
index 000000000..795f0d508
--- /dev/null
+++ b/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/views/plugin_mail/multipart_from_plugin_with_application_template_plain.html.erb
@@ -0,0 +1 @@
+template from plugin \ No newline at end of file
diff --git a/vendor/plugins/engines/test/plugins/test_plugin_mailing/init.rb b/vendor/plugins/engines/test/plugins/test_plugin_mailing/init.rb
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/vendor/plugins/engines/test/plugins/test_plugin_mailing/init.rb
diff --git a/vendor/plugins/engines/test/plugins/test_routing/app/controllers/namespace/test_routing_controller.rb b/vendor/plugins/engines/test/plugins/test_routing/app/controllers/namespace/test_routing_controller.rb
new file mode 100644
index 000000000..29d7bdbd4
--- /dev/null
+++ b/vendor/plugins/engines/test/plugins/test_routing/app/controllers/namespace/test_routing_controller.rb
@@ -0,0 +1,5 @@
+class Namespace::TestRoutingController < ApplicationController
+ def routed_action
+ render_class_and_action
+ end
+end \ No newline at end of file
diff --git a/vendor/plugins/engines/test/plugins/test_routing/app/controllers/test_routing_controller.rb b/vendor/plugins/engines/test/plugins/test_routing/app/controllers/test_routing_controller.rb
new file mode 100644
index 000000000..ac3164a4f
--- /dev/null
+++ b/vendor/plugins/engines/test/plugins/test_routing/app/controllers/test_routing_controller.rb
@@ -0,0 +1,9 @@
+class TestRoutingController < ApplicationController
+ def routed_action
+ render_class_and_action
+ end
+
+ def test_named_routes_from_plugin
+ render :text => plugin_route_path(:action => "index")
+ end
+end \ No newline at end of file
diff --git a/vendor/plugins/engines/test/plugins/test_routing/config/routes.rb b/vendor/plugins/engines/test/plugins/test_routing/config/routes.rb
new file mode 100644
index 000000000..dbc49f960
--- /dev/null
+++ b/vendor/plugins/engines/test/plugins/test_routing/config/routes.rb
@@ -0,0 +1,4 @@
+ActionController::Routing::Routes.draw do |map|
+ map.connect 'routes/:action', :controller => "test_routing"
+ map.plugin_route 'somespace/routes/:action', :controller => "namespace/test_routing"
+end \ No newline at end of file
diff --git a/vendor/plugins/engines/test/plugins/test_routing/init.rb b/vendor/plugins/engines/test/plugins/test_routing/init.rb
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/vendor/plugins/engines/test/plugins/test_routing/init.rb
diff --git a/vendor/plugins/engines/test/plugins/test_testing/app/README.txt b/vendor/plugins/engines/test/plugins/test_testing/app/README.txt
new file mode 100644
index 000000000..784e4fe28
--- /dev/null
+++ b/vendor/plugins/engines/test/plugins/test_testing/app/README.txt
@@ -0,0 +1 @@
+Fixtures are only copied from plugins with an +app+ directory, but git needs this directory to be non-empty \ No newline at end of file
diff --git a/vendor/plugins/engines/test/plugins/test_testing/init.rb b/vendor/plugins/engines/test/plugins/test_testing/init.rb
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/vendor/plugins/engines/test/plugins/test_testing/init.rb
diff --git a/vendor/plugins/engines/test/plugins/test_testing/test/fixtures/testing_fixtures.yml b/vendor/plugins/engines/test/plugins/test_testing/test/fixtures/testing_fixtures.yml
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/vendor/plugins/engines/test/plugins/test_testing/test/fixtures/testing_fixtures.yml
diff --git a/vendor/plugins/engines/test/plugins/test_testing/test/unit/override_test.rb b/vendor/plugins/engines/test/plugins/test_testing/test/unit/override_test.rb
new file mode 100644
index 000000000..4c4c42a2c
--- /dev/null
+++ b/vendor/plugins/engines/test/plugins/test_testing/test/unit/override_test.rb
@@ -0,0 +1,13 @@
+require File.expand_path(File.join(File.dirname(__FILE__), *%w[.. .. .. .. .. test test_helper]))
+
+class OverrideTest < ActiveSupport::TestCase
+ def test_overrides_from_the_application_should_work
+ flunk "this test should be overridden by the app"
+ end
+
+ def test_tests_within_the_plugin_should_still_run
+ assert true, "non-overridden plugin tests should still run"
+ end
+end
+
+Engines::Testing.override_tests_from_app \ No newline at end of file
diff --git a/vendor/plugins/engines/test/unit/action_mailer_test.rb b/vendor/plugins/engines/test/unit/action_mailer_test.rb
new file mode 100644
index 000000000..fc3e75661
--- /dev/null
+++ b/vendor/plugins/engines/test/unit/action_mailer_test.rb
@@ -0,0 +1,54 @@
+require File.dirname(__FILE__) + '/../test_helper'
+
+class ActionMailerWithinApplicationTest < Test::Unit::TestCase
+
+ def test_normal_implicit_template
+ m = NotifyMail.create_signup("hello")
+ assert m.body =~ /^Signup template from application/
+ end
+
+ def test_action_mailer_can_get_helper
+ m = NotifyMail.create_signup('James')
+ assert m.body =~ /James/
+ assert m.body =~ /semaJ/ # from the helper
+ end
+
+ def test_multipart_mails_with_explicit_templates
+ m = NotifyMail.create_multipart
+ assert_equal 2, m.parts.length
+ assert_equal 'the html part of the email james', m.parts[0].body
+ assert_equal 'the plaintext part of the email', m.parts[1].body
+ end
+
+ def test_multipart_mails_with_implicit_templates
+ m = NotifyMail.create_implicit_multipart
+ assert_equal 2, m.parts.length
+ assert_equal 'the implicit plaintext part of the email', m.parts[0].body
+ assert_equal 'the implicit html part of the email james', m.parts[1].body
+ end
+end
+
+
+class ActionMailerWithinPluginsTest < Test::Unit::TestCase
+ def test_should_be_able_to_create_mails_from_plugin
+ m = PluginMail.create_mail_from_plugin("from_plugin")
+ assert_equal "from_plugin", m.body
+ end
+
+ def test_should_be_able_to_overload_views_within_the_application
+ m = PluginMail.create_mail_from_plugin_with_application_template("from_plugin")
+ assert_equal "from_plugin (from application)", m.body
+ end
+
+ def test_should_be_able_to_create_a_multipart_mail_from_within_plugin
+ m = PluginMail.create_multipart_from_plugin
+ assert_equal 2, m.parts.length
+ assert_equal 'html template', m.parts[0].body
+ assert_equal 'plain template', m.parts[1].body
+ end
+
+ def test_plugin_mailer_template_overriding
+ m = PluginMail.create_multipart_from_plugin_with_application_template
+ assert_equal 'plugin mail template loaded from application', m.parts[1].body
+ end
+end \ No newline at end of file
diff --git a/vendor/plugins/engines/test/unit/arbitrary_code_mixing_test.rb b/vendor/plugins/engines/test/unit/arbitrary_code_mixing_test.rb
new file mode 100644
index 000000000..4b862f35b
--- /dev/null
+++ b/vendor/plugins/engines/test/unit/arbitrary_code_mixing_test.rb
@@ -0,0 +1,41 @@
+require File.dirname(__FILE__) + '/../test_helper'
+
+class ArbitraryCodeMixingTest < Test::Unit::TestCase
+ def setup
+ Engines.code_mixing_file_types = %w(controller helper)
+ end
+
+ def test_should_allow_setting_of_different_code_mixing_file_types
+ assert_nothing_raised {
+ Engines.mix_code_from :things
+ }
+ end
+
+ def test_should_add_new_types_to_existing_code_mixing_file_types
+ Engines.mix_code_from :things
+ assert_equal ["controller", "helper", "thing"], Engines.code_mixing_file_types
+ Engines.mix_code_from :other
+ assert_equal ["controller", "helper", "thing", "other"], Engines.code_mixing_file_types
+ end
+
+ def test_should_allow_setting_of_multiple_types_at_once
+ Engines.mix_code_from :things, :other
+ assert_equal ["controller", "helper", "thing", "other"], Engines.code_mixing_file_types
+ end
+
+ def test_should_singularize_elements_to_be_mixed
+ # this is the only test using mocha, so let's try to work around it
+ # also, this seems to be already tested with the :things in the tests above
+ # arg = stub(:to_s => stub(:singularize => "element"))
+ Engines.mix_code_from :elements
+ assert Engines.code_mixing_file_types.include?("element")
+ end
+
+ # TODO doesn't seem to work as expected?
+
+ # def test_should_successfully_mix_custom_types
+ # Engines.mix_code_from :things
+ # assert_equal 'Thing (from app)', Thing.from_app
+ # assert_equal 'Thing (from test_code_mixing)', Thing.from_plugin
+ # end
+end \ No newline at end of file
diff --git a/vendor/plugins/engines/test/unit/assets_test.rb b/vendor/plugins/engines/test/unit/assets_test.rb
new file mode 100644
index 000000000..3332c533e
--- /dev/null
+++ b/vendor/plugins/engines/test/unit/assets_test.rb
@@ -0,0 +1,52 @@
+require File.dirname(__FILE__) + '/../test_helper'
+
+class AssetsTest < Test::Unit::TestCase
+ def setup
+ Engines::Assets.mirror_files_for Engines.plugins[:test_assets]
+ end
+
+ def teardown
+ FileUtils.rm_r(Engines.public_directory) if File.exist?(Engines.public_directory)
+ end
+
+ def test_engines_has_created_base_public_file
+ assert File.exist?(Engines.public_directory)
+ end
+
+ def test_engines_has_created_README_in_public_directory
+ assert File.exist?(File.join(Engines.public_directory, 'README'))
+ end
+
+ def test_public_files_have_been_copied_from_test_assets_plugin
+ assert File.exist?(File.join(Engines.public_directory, 'test_assets'))
+ assert File.exist?(File.join(Engines.public_directory, 'test_assets', 'file.txt'))
+ assert File.exist?(File.join(Engines.public_directory, 'test_assets', 'subfolder'))
+ assert File.exist?(File.join(Engines.public_directory, 'test_assets', 'subfolder', 'file_in_subfolder.txt'))
+ end
+
+ def test_engines_has_not_created_duplicated_file_structure
+ assert !File.exists?(File.join(Engines.public_directory, "test_assets", RAILS_ROOT))
+ end
+
+ def test_public_files_have_been_copied_from_test_assets_with_assets_dir_plugin
+ Engines::Assets.mirror_files_for Engines.plugins[:test_assets_with_assets_directory]
+
+ assert File.exist?(File.join(Engines.public_directory, 'test_assets_with_assets_directory'))
+ assert File.exist?(File.join(Engines.public_directory, 'test_assets_with_assets_directory', 'file.txt'))
+ assert File.exist?(File.join(Engines.public_directory, 'test_assets_with_assets_directory', 'subfolder'))
+ assert File.exist?(File.join(Engines.public_directory, 'test_assets_with_assets_directory', 'subfolder', 'file_in_subfolder.txt'))
+ end
+
+ def test_public_files_have_been_copied_from_test_assets_with_no_subdirectory_plugin
+ Engines::Assets.mirror_files_for Engines.plugins[:test_assets_with_no_subdirectory]
+
+ assert File.exist?(File.join(Engines.public_directory, 'test_assets_with_no_subdirectory'))
+ assert File.exist?(File.join(Engines.public_directory, 'test_assets_with_no_subdirectory', 'file.txt'))
+ end
+
+ def test_public_files_have_NOT_been_copied_from_plugins_without_public_or_asset_directories
+ Engines::Assets.mirror_files_for Engines.plugins[:alpha_plugin]
+
+ assert !File.exist?(File.join(Engines.public_directory, 'alpha_plugin'))
+ end
+end \ No newline at end of file
diff --git a/vendor/plugins/engines/test/unit/backwards_compat_test.rb b/vendor/plugins/engines/test/unit/backwards_compat_test.rb
new file mode 100644
index 000000000..4fa3698f2
--- /dev/null
+++ b/vendor/plugins/engines/test/unit/backwards_compat_test.rb
@@ -0,0 +1,8 @@
+require File.dirname(__FILE__) + '/../test_helper'
+
+class BackwardsCompatibilityTest < Test::Unit::TestCase
+ def test_rails_module_plugin_method_should_delegate_to_engines_plugins
+ assert_nothing_raised { Rails.plugins }
+ assert_equal Engines.plugins, Rails.plugins
+ end
+end \ No newline at end of file
diff --git a/vendor/plugins/engines/test/unit/load_path_test.rb b/vendor/plugins/engines/test/unit/load_path_test.rb
new file mode 100644
index 000000000..c26d331c3
--- /dev/null
+++ b/vendor/plugins/engines/test/unit/load_path_test.rb
@@ -0,0 +1,58 @@
+# Tests in this file ensure that:
+#
+# * the application /app/[controllers|helpers|models] and /lib
+# paths preceed the corresponding plugin paths
+# * the plugin paths are added to $LOAD_PATH in the order in which plugins are
+# loaded
+
+require File.dirname(__FILE__) + '/../test_helper'
+
+class LoadPathTest < Test::Unit::TestCase
+ def setup
+ @load_path = expand_paths($LOAD_PATH)
+ end
+
+ # Not sure if these test actually make sense as this now essentially tests
+ # Rails core functionality. On the other hand Engines relies on this to some
+ # extend so this will choke if something important changes in Rails.
+
+ # the application app/... and lib/ directories should appear
+ # before any plugin directories
+
+ def test_application_app_libs_should_precede_all_plugin_app_libs
+ types = %w(app/controllers app/helpers app/models lib)
+ types.each do |t|
+ app_index = load_path_index(File.join(RAILS_ROOT, t))
+ assert_not_nil app_index, "#{t} is missing in $LOAD_PATH"
+ Engines.plugins.each do |plugin|
+ first_plugin_index = load_path_index(File.join(plugin.directory, t))
+ assert(app_index < first_plugin_index) unless first_plugin_index.nil?
+ end
+ end
+ end
+
+ # the engine directories should appear in the proper order based on
+ # the order they were started
+
+ def test_plugin_dirs_should_appear_in_reverse_plugin_loading_order
+ app_paths = %w(app/controllers/ app app/models app/helpers lib)
+ app_paths.map { |p| File.join(RAILS_ROOT, p)}
+ plugin_paths = Engines.plugins.reverse.collect { |plugin| plugin.load_paths.reverse }.flatten
+
+ expected_paths = expand_paths(app_paths + plugin_paths)
+ # only look at those paths that are also present in expected_paths so
+ # the only difference would be in the order of the paths
+ actual_paths = @load_path & expected_paths
+
+ assert_equal expected_paths, actual_paths
+ end
+
+ protected
+ def expand_paths(paths)
+ paths.collect { |p| File.expand_path(p) }
+ end
+
+ def load_path_index(dir)
+ @load_path.index(File.expand_path(dir))
+ end
+end \ No newline at end of file
diff --git a/vendor/plugins/engines/test/unit/migration_test.rb b/vendor/plugins/engines/test/unit/migration_test.rb
new file mode 100644
index 000000000..eae7fe7d4
--- /dev/null
+++ b/vendor/plugins/engines/test/unit/migration_test.rb
@@ -0,0 +1,63 @@
+require File.dirname(__FILE__) + '/../test_helper'
+require 'rails_generator'
+require 'rails_generator/scripts/generate'
+
+class MigrationsTest < Test::Unit::TestCase
+
+ @@migration_dir = "#{RAILS_ROOT}/db/migrate"
+
+ def setup
+ ActiveRecord::Migration.verbose = false
+ Engines.plugins[:test_migration].migrate(0)
+ end
+
+ def teardown
+ FileUtils.rm_r(@@migration_dir) if File.exist?(@@migration_dir)
+ end
+
+ def test_engine_migrations_can_run_down
+ assert !table_exists?('tests'), ActiveRecord::Base.connection.tables.inspect
+ assert !table_exists?('others'), ActiveRecord::Base.connection.tables.inspect
+ assert !table_exists?('extras'), ActiveRecord::Base.connection.tables.inspect
+ end
+
+ def test_engine_migrations_can_run_up
+ Engines.plugins[:test_migration].migrate(3)
+ assert table_exists?('tests')
+ assert table_exists?('others')
+ assert table_exists?('extras')
+ end
+
+ def test_engine_migrations_can_upgrade_incrementally
+ Engines.plugins[:test_migration].migrate(1)
+ assert table_exists?('tests')
+ assert !table_exists?('others')
+ assert !table_exists?('extras')
+ assert_equal 1, Engines::Plugin::Migrator.current_version(Engines.plugins[:test_migration])
+
+
+ Engines.plugins[:test_migration].migrate(2)
+ assert table_exists?('others')
+ assert_equal 2, Engines::Plugin::Migrator.current_version(Engines.plugins[:test_migration])
+
+
+ Engines.plugins[:test_migration].migrate(3)
+ assert table_exists?('extras')
+ assert_equal 3, Engines::Plugin::Migrator.current_version(Engines.plugins[:test_migration])
+ end
+
+ def test_generator_creates_plugin_migration_file
+ Rails::Generator::Scripts::Generate.new.run(['plugin_migration', 'test_migration'], :quiet => true)
+ assert migration_file, "migration file is missing"
+ end
+
+ private
+
+ def table_exists?(table)
+ ActiveRecord::Base.connection.tables.include?(table)
+ end
+
+ def migration_file
+ Dir["#{@@migration_dir}/*test_migration_to_version_3.rb"][0]
+ end
+end \ No newline at end of file
diff --git a/vendor/plugins/engines/test/unit/model_and_lib_test.rb b/vendor/plugins/engines/test/unit/model_and_lib_test.rb
new file mode 100644
index 000000000..e5aa773ba
--- /dev/null
+++ b/vendor/plugins/engines/test/unit/model_and_lib_test.rb
@@ -0,0 +1,37 @@
+require File.dirname(__FILE__) + '/../test_helper'
+
+class ModelAndLibTest < Test::Unit::TestCase
+
+ def test_WITH_a_model_defined_only_in_a_plugin_IT_should_load_the_model
+ assert_equal 'AlphaPluginModel (from alpha_plugin)', AlphaPluginModel.report_location
+ end
+
+ def test_WITH_a_model_defined_only_in_a_plugin_lib_dir_IT_should_load_the_model
+ assert_equal 'AlphaPluginLibModel (from alpha_plugin)', AlphaPluginLibModel.report_location
+ end
+
+ # app takes precedence over plugins
+
+ def test_WITH_a_model_defined_in_both_app_and_plugin_IT_should_load_the_one_in_app
+ assert_equal 'AppAndPluginModel (from app)', AppAndPluginModel.report_location
+ assert_raises(NoMethodError) { AppAndPluginLibModel.defined_only_in_alpha_engine_version }
+ end
+
+ def test_WITH_a_model_defined_in_both_app_and_plugin_lib_dirs_IT_should_load_the_one_in_app
+ assert_equal 'AppAndPluginLibModel (from lib)', AppAndPluginLibModel.report_location
+ assert_raises(NoMethodError) { AppAndPluginLibModel.defined_only_in_alpha_engine_version }
+ end
+
+ # subsequently loaded plugins take precendence over previously loaded plugins
+
+ # TODO
+ #
+ # this does work when we rely on $LOAD_PATH while it won't work when we use
+ # Dependency constant autoloading. This somewhat confusing difference has
+ # been there since at least Rails 1.2.x. See http://www.ruby-forum.com/topic/134529
+
+ def test_WITH_a_model_defined_in_two_plugins_IT_should_load_the_latter_of_both
+ require 'shared_plugin_model'
+ assert_equal SharedPluginModel.report_location, 'SharedPluginModel (from beta_plugin)'
+ end
+end \ No newline at end of file
diff --git a/vendor/plugins/engines/test/unit/plugins_test.rb b/vendor/plugins/engines/test/unit/plugins_test.rb
new file mode 100644
index 000000000..f8627bcee
--- /dev/null
+++ b/vendor/plugins/engines/test/unit/plugins_test.rb
@@ -0,0 +1,11 @@
+require File.dirname(__FILE__) + '/../test_helper'
+
+class PluginsTest < Test::Unit::TestCase
+
+ def test_should_allow_access_to_plugins_by_strings_or_symbols
+ p = Engines.plugins["alpha_plugin"]
+ q = Engines.plugins[:alpha_plugin]
+ assert_kind_of Engines::Plugin, p
+ assert_equal p, q
+ end
+end \ No newline at end of file
diff --git a/vendor/plugins/engines/test/unit/test_testing/override_test.rb b/vendor/plugins/engines/test/unit/test_testing/override_test.rb
new file mode 100644
index 000000000..ea58a51c3
--- /dev/null
+++ b/vendor/plugins/engines/test/unit/test_testing/override_test.rb
@@ -0,0 +1,7 @@
+require File.join(File.dirname(__FILE__), *%w[.. .. test_helper])
+
+class OverrideTest < ActiveSupport::TestCase
+ def test_overrides_from_the_application_should_work
+ assert true, "overriding plugin tests from the application should work"
+ end
+end \ No newline at end of file
diff --git a/vendor/plugins/engines/test/unit/testing_test.rb b/vendor/plugins/engines/test/unit/testing_test.rb
new file mode 100644
index 000000000..c0c37ed40
--- /dev/null
+++ b/vendor/plugins/engines/test/unit/testing_test.rb
@@ -0,0 +1,19 @@
+require File.dirname(__FILE__) + '/../test_helper'
+
+class TestingTest < Test::Unit::TestCase
+ def setup
+ Engines::Testing.set_fixture_path
+ @filename = File.join(Engines::Testing.temporary_fixtures_directory, 'testing_fixtures.yml')
+ File.delete(@filename) if File.exists?(@filename)
+ end
+
+ def teardown
+ File.delete(@filename) if File.exists?(@filename)
+ end
+
+ def test_should_copy_fixtures_files_to_tmp_directory
+ assert !File.exists?(@filename)
+ Engines::Testing.setup_plugin_fixtures
+ assert File.exists?(@filename)
+ end
+end \ No newline at end of file
diff --git a/vendor/plugins/prepend_engine_views/init.rb b/vendor/plugins/prepend_engine_views/init.rb
new file mode 100644
index 000000000..cbf0e89a9
--- /dev/null
+++ b/vendor/plugins/prepend_engine_views/init.rb
@@ -0,0 +1,21 @@
+module PrependEngineViews
+ def self.included(base)
+ base.send(:include, InstanceMethods)
+ base.class_eval do
+ alias_method_chain :add_engine_view_paths, :prepend
+ end
+ end
+
+ module InstanceMethods
+ # Patch Rails so engine's views are prepended to the view_path,
+ # thereby letting plugins override application views
+ def add_engine_view_paths_with_prepend
+ paths = ActionView::PathSet.new(engines.collect(&:view_path))
+ ActionController::Base.view_paths.unshift(*paths)
+ ActionMailer::Base.view_paths.unshift(*paths) if configuration.frameworks.include?(:action_mailer)
+ end
+ end
+end
+
+Rails::Plugin::Loader.send :include, PrependEngineViews
+