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