mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
201 lines
5.3 KiB
Ruby
201 lines
5.3 KiB
Ruby
require "isolation/abstract_unit"
|
|
|
|
module PluginsTest
|
|
class VendoredTest < Test::Unit::TestCase
|
|
include ActiveSupport::Testing::Isolation
|
|
|
|
def setup
|
|
build_app
|
|
|
|
@plugin = plugin "bukkits", "::LEVEL = config.log_level" do |plugin|
|
|
plugin.write "lib/bukkits.rb", "class Bukkits; end"
|
|
end
|
|
end
|
|
|
|
def boot_rails
|
|
super
|
|
require "#{app_path}/config/environment"
|
|
end
|
|
|
|
test "it loads the plugin's init.rb file" do
|
|
boot_rails
|
|
assert_equal "loaded", BUKKITS
|
|
end
|
|
|
|
test "the init.rb file has access to the config object" do
|
|
boot_rails
|
|
assert_equal :debug, LEVEL
|
|
end
|
|
|
|
test "the plugin puts its lib directory on the load path" do
|
|
boot_rails
|
|
require "bukkits"
|
|
assert_equal "Bukkits", Bukkits.name
|
|
end
|
|
|
|
test "plugin paths get added to the AS::Dependency list" do
|
|
boot_rails
|
|
assert_equal "Bukkits", Bukkits.name
|
|
end
|
|
|
|
test "plugin constants do not get reloaded by default" do
|
|
boot_rails
|
|
assert_equal "Bukkits", Bukkits.name
|
|
ActiveSupport::Dependencies.clear
|
|
@plugin.delete("lib/bukkits.rb")
|
|
assert_nothing_raised { Bukkits }
|
|
end
|
|
|
|
test "plugin constants get reloaded if config.reload_plugins is set" do
|
|
add_to_config <<-RUBY
|
|
config.reload_plugins = true
|
|
RUBY
|
|
|
|
boot_rails
|
|
|
|
assert_equal "Bukkits", Bukkits.name
|
|
ActiveSupport::Dependencies.clear
|
|
@plugin.delete("lib/bukkits.rb")
|
|
assert_raises(NameError) { Bukkits }
|
|
end
|
|
|
|
test "plugin should work without init.rb" do
|
|
@plugin.delete("init.rb")
|
|
|
|
boot_rails
|
|
|
|
require "bukkits"
|
|
assert_nothing_raised { Bukkits }
|
|
end
|
|
|
|
test "the plugin puts its models directory on the load path" do
|
|
@plugin.write "app/models/my_bukkit.rb", "class MyBukkit ; end"
|
|
|
|
boot_rails
|
|
|
|
assert_nothing_raised { MyBukkit }
|
|
end
|
|
|
|
test "the plugin puts is controllers directory on the load path" do
|
|
@plugin.write "app/controllers/bukkit_controller.rb", "class BukkitController ; end"
|
|
|
|
boot_rails
|
|
|
|
assert_nothing_raised { BukkitController }
|
|
end
|
|
|
|
test "the plugin adds its view to the load path" do
|
|
@plugin.write "app/controllers/bukkit_controller.rb", <<-RUBY
|
|
class BukkitController < ActionController::Base
|
|
def index
|
|
end
|
|
end
|
|
RUBY
|
|
|
|
@plugin.write "app/views/bukkit/index.html.erb", "Hello bukkits"
|
|
|
|
boot_rails
|
|
|
|
require "action_controller"
|
|
require "rack/mock"
|
|
response = BukkitController.action(:index).call(Rack::MockRequest.env_for("/"))
|
|
assert_equal "Hello bukkits\n", response[2].body
|
|
end
|
|
|
|
test "the plugin adds helpers to the controller's views" do
|
|
@plugin.write "app/controllers/bukkit_controller.rb", <<-RUBY
|
|
class BukkitController < ActionController::Base
|
|
def index
|
|
end
|
|
end
|
|
RUBY
|
|
|
|
@plugin.write "app/helpers/bukkit_helper.rb", <<-RUBY
|
|
module BukkitHelper
|
|
def bukkits
|
|
"bukkits"
|
|
end
|
|
end
|
|
RUBY
|
|
|
|
@plugin.write "app/views/bukkit/index.html.erb", "Hello <%= bukkits %>"
|
|
|
|
boot_rails
|
|
|
|
require "rack/mock"
|
|
response = BukkitController.action(:index).call(Rack::MockRequest.env_for("/"))
|
|
assert_equal "Hello bukkits\n", response[2].body
|
|
end
|
|
|
|
test "routes.rb are added to the router" do
|
|
@plugin.write "config/routes.rb", <<-RUBY
|
|
class Sprokkit
|
|
def self.call(env)
|
|
[200, {'Content-Type' => 'text/html'}, ["I am a Sprokkit"]]
|
|
end
|
|
end
|
|
|
|
ActionController::Routing::Routes.draw do
|
|
match "/sprokkit", :to => Sprokkit
|
|
end
|
|
RUBY
|
|
|
|
boot_rails
|
|
require "rack/mock"
|
|
response = Rails.application.call(Rack::MockRequest.env_for("/sprokkit"))
|
|
assert_equal "I am a Sprokkit", response[2].join
|
|
end
|
|
end
|
|
|
|
class VendoredOrderingTest < Test::Unit::TestCase
|
|
include ActiveSupport::Testing::Isolation
|
|
|
|
def setup
|
|
build_app
|
|
$arr = []
|
|
plugin "a_plugin", "$arr << :a"
|
|
plugin "b_plugin", "$arr << :b"
|
|
plugin "c_plugin", "$arr << :c"
|
|
end
|
|
|
|
def boot_rails
|
|
super
|
|
require "#{app_path}/config/environment"
|
|
end
|
|
|
|
test "plugins are loaded alphabetically by default" do
|
|
boot_rails
|
|
assert_equal [:a, :b, :c], $arr
|
|
end
|
|
|
|
test "if specified, only those plugins are loaded" do
|
|
add_to_config "config.plugins = [:b_plugin]"
|
|
boot_rails
|
|
assert_equal [:b], $arr
|
|
end
|
|
|
|
test "the plugins are initialized in the order they are specified" do
|
|
add_to_config "config.plugins = [:b_plugin, :a_plugin]"
|
|
boot_rails
|
|
assert_equal [:b, :a], $arr
|
|
end
|
|
|
|
test "if :all is specified, the remaining plugins are loaded in alphabetical order" do
|
|
add_to_config "config.plugins = [:c_plugin, :all]"
|
|
boot_rails
|
|
assert_equal [:c, :a, :b], $arr
|
|
end
|
|
|
|
test "if :all is at the beginning, it represents the plugins not otherwise specified" do
|
|
add_to_config "config.plugins = [:all, :b_plugin]"
|
|
boot_rails
|
|
assert_equal [:a, :c, :b], $arr
|
|
end
|
|
|
|
test "plugin order array is strings" do
|
|
add_to_config "config.plugins = %w( c_plugin all )"
|
|
boot_rails
|
|
assert_equal [:c, :a, :b], $arr
|
|
end
|
|
end
|
|
end
|