diff options
author | Go MAEDA <maeda@farend.jp> | 2023-10-06 06:12:24 +0000 |
---|---|---|
committer | Go MAEDA <maeda@farend.jp> | 2023-10-06 06:12:24 +0000 |
commit | 291206fda1ee6c6a360034b64c32aec87bf76126 (patch) | |
tree | d134d5466717fb230f28bec6f9cee64fba2403d7 | |
parent | d7189c02dbdb08105a10026425266ed80465cc4e (diff) | |
download | redmine-291206fda1ee6c6a360034b64c32aec87bf76126.tar.gz redmine-291206fda1ee6c6a360034b64c32aec87bf76126.zip |
Add test for r22327 (#38707).
Patch by Nishida Yuya.
git-svn-id: https://svn.redmine.org/redmine/trunk@22328 e93f8b46-1217-0410-a6f0-8f06a7374b81
-rw-r--r-- | test/integration/routing/plugins_test.rb | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/test/integration/routing/plugins_test.rb b/test/integration/routing/plugins_test.rb new file mode 100644 index 000000000..ba663caa9 --- /dev/null +++ b/test/integration/routing/plugins_test.rb @@ -0,0 +1,95 @@ +# frozen_string_literal: true + +# Redmine - project management software +# Copyright (C) 2006-2023 Jean-Philippe Lang +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +require File.expand_path('../../../test_helper', __FILE__) + +class RoutingPluginsTest < Redmine::RoutingTest + setup do + @setup_plugin_paths = [] + @setup_plugin_paths << setup_plugin( + :redmine_test_plugin_foo, + "config/routes.rb" => <<~ROUTES_CONTENT, + resources :plugin_articles, only: %i[index] + ROUTES_CONTENT + "app/contrtollers/plugin_articles_controller.rb" => <<~CONTROLLER_CONTENT, + class PluginArticlesController < ApplicationController + def index + render plain: "foo PluginArticlesController#index" + end + end + CONTROLLER_CONTENT + ) + @setup_plugin_paths << setup_plugin( + :redmine_test_plugin_bar, + "config/routes.rb" => <<~ROUTES_CONTENT, + # same path helper name with foo's + get '/bar_plugin_articles', as: :plugin_articles, to: 'bar_plugin_articles#index' + ROUTES_CONTENT + "app/contrtollers/bar_plugin_articles_controller.rb" => <<~CONTROLLER_CONTENT, + class BarPluginArticlesController < ApplicationController + def index + render plain: "bar BarPluginArticlesController#index" + end + end + CONTROLLER_CONTENT + ) + Redmine::PluginLoader.load + Redmine::PluginLoader.directories.each(&:run_initializer) # to define relative controllers + RedmineApp::Application.instance.routes_reloader.reload! + end + + teardown do + @setup_plugin_paths.each(&:rmtree) + Redmine::PluginLoader.load + RedmineApp::Application.instance.routes_reloader.reload! + end + + def test_plugins + should_route 'GET /plugin_articles' => 'plugin_articles#index' + should_route 'GET /bar_plugin_articles' => 'bar_plugin_articles#index' + assert_equal("/bar_plugin_articles", plugin_articles_path) + end + + private + + def setup_plugin(plugin_name, **relative_path_to_content) + plugin_path = Redmine::Plugin.directory / plugin_name.to_s + plugin_path.mkpath + (plugin_path / "init.rb").write(<<~EOS) + Redmine::Plugin.register :#{plugin_name} do + name 'Test plugin #{plugin_name}' + author 'Author name' + description 'This is a plugin for Redmine test' + version '0.0.1' + end + + Pathname(__dir__).glob("app/**/*.rb").sort.each do |path| + require path + end + EOS + + relative_path_to_content.each do |relative_path, content| + path = plugin_path / relative_path + path.parent.mkpath + path.write(content) + end + + return plugin_path + end +end |