require 'abstract_unit' require 'env_helpers' require 'rails/commands/console' class Rails::ConsoleTest < ActiveSupport::TestCase include EnvHelpers class FakeConsole def self.started? @started end def self.start @started = true end end def test_sandbox_option console = Rails::Console.new(app, parse_arguments(["--sandbox"])) assert console.sandbox? end def test_short_version_of_sandbox_option console = Rails::Console.new(app, parse_arguments(["-s"])) assert console.sandbox? end def test_no_options console = Rails::Console.new(app, parse_arguments([])) assert !console.sandbox? end def test_start start assert app.console.started? assert_match(/Loading \w+ environment \(Rails/, output) end def test_start_with_sandbox start ["--sandbox"] assert app.console.started? assert app.sandbox assert_match(/Loading \w+ environment in sandbox \(Rails/, output) end def test_console_with_environment start ["-e production"] assert_match(/\sproduction\s/, output) end def test_console_defaults_to_IRB app = build_app(nil) assert_equal IRB, Rails::Console.new(app).console end def test_default_environment_with_no_rails_env with_rails_env nil do start assert_match(/\sdevelopment\s/, output) end end def test_default_environment_with_rails_env with_rails_env 'special-production' do start assert_match(/\sspecial-production\s/, output) end end def test_default_environment_with_rack_env with_rack_env 'production' do start assert_match(/\sproduction\s/, output) end end def test_e_option start ['-e', 'special-production'] assert_match(/\sspecial-production\s/, output) end def test_environment_option start ['--environment=special-production'] assert_match(/\sspecial-production\s/, output) end def test_rails_env_is_production_when_first_argument_is_p start ['p'] assert_match(/\sproduction\s/, output) end def test_rails_env_is_test_when_first_argument_is_t start ['t'] assert_match(/\stest\s/, output) end def test_rails_env_is_development_when_argument_is_d start ['d'] assert_match(/\sdevelopment\s/, output) end def test_rails_env_is_dev_when_argument_is_dev_and_dev_env_is_present stubbed_console = Class.new(Rails::Console) do def available_environments ['dev'] end end options = stubbed_console.parse_arguments(['dev']) assert_match('dev', options[:environment]) end attr_reader :output private :output private def start(argv = []) rails_console = Rails::Console.new(app, parse_arguments(argv)) @output = capture(:stdout) { rails_console.start } end def app @app ||= build_app(FakeConsole) end def build_app(console) mocked_console = Class.new do attr_reader :sandbox, :console def initialize(console) @console = console end def config self end def sandbox=(arg) @sandbox = arg end def load_console end end mocked_console.new(console) end def parse_arguments(args) Rails::Console.parse_arguments(args) end end