aboutsummaryrefslogblamecommitdiffstats
path: root/railties/test/commands/console_test.rb
blob: 96ac7c0661f7d8bd66ab25c80e808658e7d06f99 (plain) (tree)
1
2
3
4
5
6
7
8


                                

                                                  

                    
                   






                     


                         
                                                                     



                                          
                                                              


                           
                     
                                                          



                            
         

                               
                                                           

     
                             

                       

                               
                                                                      

     
                                   
                           



                                          
                        
                                                     

     


                                                
                                             

       
 
                                             
                                          
           
                                                    

       
 
                                            
                                 




                                            
                   
                                      
                                                  
     
 
                             
                                              
                                                  

     
                                                           
               
                                          
     
 
                                                     
               
                                    
     
 
                                                      
               
                                           

     
                                                                       

                                                  
               

         

                                                      

     
                     


                 
 



                                                                    
 


                                     
 


                                      
 


                               
 


                  
 


                         
 

                        
         
                                 
       
 


                                          
   
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