blob: b9725ca0ad79c8c4a8c6823c62cc49c4a6fe4a64 (
plain) (
tree)
|
|
# frozen_string_literal: true
require "isolation/abstract_unit"
module RailtiesTest
class RailtieTest < ActiveSupport::TestCase
include ActiveSupport::Testing::Isolation
def setup
build_app
FileUtils.rm_rf("#{app_path}/config/environments")
require "rails/all"
end
def teardown
teardown_app
end
def app
@app ||= Rails.application
end
test "cannot instantiate a Railtie object" do
assert_raise(RuntimeError) { Rails::Railtie.new }
end
test "Railtie provides railtie_name" do
class ::FooBarBaz < Rails::Railtie ; end
assert_equal "foo_bar_baz", FooBarBaz.railtie_name
ensure
Object.send(:remove_const, :"FooBarBaz")
end
test "railtie_name can be set manually" do
class Foo < Rails::Railtie
railtie_name "bar"
end
assert_equal "bar", Foo.railtie_name
end
test "config is available to railtie" do
class Foo < Rails::Railtie ; end
assert_nil Foo.config.action_controller.foo
end
test "config name is available for the railtie" do
class Foo < Rails::Railtie
config.foo = ActiveSupport::OrderedOptions.new
config.foo.greetings = "hello"
end
assert_equal "hello", Foo.config.foo.greetings
end
test "railtie configurations are available in the application" do
class Foo < Rails::Railtie
config.foo = ActiveSupport::OrderedOptions.new
config.foo.greetings = "hello"
end
require "#{app_path}/config/application"
assert_equal "hello", Rails.application.config.foo.greetings
end
test "railtie can add to_prepare callbacks" do
$to_prepare = false
class Foo < Rails::Railtie ; config.to_prepare { $to_prepare = true } ; end
assert_not $to_prepare
require "#{app_path}/config/environment"
require "rack/test"
extend Rack::Test::Methods
get "/"
assert $to_prepare
end
test "railtie have access to application in before_configuration callbacks" do
$before_configuration = false
class Foo < Rails::Railtie ; config.before_configuration { $before_configuration = Rails.root.to_path } ; end
assert_not $before_configuration
require "#{app_path}/config/environment"
assert_equal app_path, $before_configuration
end
test "before_configuration callbacks run as soon as the application constant inherits from Rails::Application" do
$before_configuration = false
class Foo < Rails::Railtie ; config.before_configuration { $before_configuration = true } ; end
class Application < Rails::Application ; end
assert $before_configuration
end
test "railtie can add after_initialize callbacks" do
$after_initialize = false
class Foo < Rails::Railtie ; config.after_initialize { $after_initialize = true } ; end
assert_not $after_initialize
require "#{app_path}/config/environment"
assert $after_initialize
end
test "rake_tasks block is executed when MyApp.load_tasks is called" do
$ran_block = false
class MyTie < Rails::Railtie
rake_tasks do
$ran_block = true
end
end
require "#{app_path}/config/environment"
assert_not $ran_block
require "rake"
require "rake/testtask"
require "rdoc/task"
Rails.application.load_tasks
assert $ran_block
end
test "rake_tasks block defined in superclass of railtie is also executed" do
$ran_block = []
class Rails::Railtie
rake_tasks do
$ran_block << railtie_name
end
end
class MyTie < Rails::Railtie
railtie_name "my_tie"
end
require "#{app_path}/config/environment"
assert_equal [], $ran_block
require "rake"
require "rake/testtask"
require "rdoc/task"
Rails.application.load_tasks
assert_includes $ran_block, "my_tie"
end
test "generators block is executed when MyApp.load_generators is called" do
$ran_block = false
class MyTie < Rails::Railtie
generators do
$ran_block = true
end
end
require "#{app_path}/config/environment"
assert_not $ran_block
Rails.application.load_generators
assert $ran_block
end
test "console block is executed when MyApp.load_console is called" do
$ran_block = false
class MyTie < Rails::Railtie
console do
$ran_block = true
end
end
require "#{app_path}/config/environment"
assert_not $ran_block
Rails.application.load_console
assert $ran_block
end
test "runner block is executed when MyApp.load_runner is called" do
$ran_block = false
class MyTie < Rails::Railtie
runner do
$ran_block = true
end
end
require "#{app_path}/config/environment"
assert_not $ran_block
Rails.application.load_runner
assert $ran_block
end
test "railtie can add initializers" do
$ran_block = false
class MyTie < Rails::Railtie
initializer :something_nice do
$ran_block = true
end
end
assert_not $ran_block
require "#{app_path}/config/environment"
assert $ran_block
end
test "we can change our environment if we want to" do
original_env = Rails.env
Rails.env = "foo"
assert_equal("foo", Rails.env)
ensure
Rails.env = original_env
assert_equal(original_env, Rails.env)
end
end
end
|