aboutsummaryrefslogblamecommitdiffstats
path: root/railties/test/plugins/vendored_test.rb
blob: eae73ee5d8e638de639075bc54a59e46e1a17a26 (plain) (tree)
1
2
3
4
5
6
7
8
9

                                 

                                           



                                             
 

                                                                          
         






































































































































                                                                                          

































                                                 














                                                   

                                              




























                                                                                            





                                                         
     
   
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

    test "tasks are loaded by default" do
      $executed = false
      @plugin.write "lib/tasks/foo.rake", <<-RUBY
        task :foo do
          $executed = true
        end
      RUBY

      boot_rails
      require 'rake'
      require 'rake/rdoctask'
      require 'rake/testtask'
      Rails.application.load_tasks
      Rake::Task[:foo].invoke
      assert $executed
    end

    test "deprecated tasks are also loaded" do
      $executed = false
      @plugin.write "tasks/foo.rake", <<-RUBY
        task :foo do
          $executed = true
        end
      RUBY

      boot_rails
      require 'rake'
      require 'rake/rdoctask'
      require 'rake/testtask'
      Rails.application.load_tasks
      Rake::Task[:foo].invoke
      assert $executed
    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