require 'test_helper' require 'application_checker' tmp_dir = "#{File.dirname(__FILE__)}/fixtures/tmp" if defined? BASE_ROOT BASE_ROOT.replace tmp_dir else BASE_ROOT = tmp_dir end FileUtils.mkdir_p BASE_ROOT # Stub out methods on upgrader class module Rails module Upgrading class ApplicationChecker attr_reader :alerts def base_path BASE_ROOT + "/" end def in_rails_app? true end def initialize @alerts = {} end def alert(title, text, more_info_url, culprits) @alerts[title] = [text, more_info_url, culprits] end end end end class ApplicationCheckerTest < ActiveSupport::TestCase def setup @checker = Rails::Upgrading::ApplicationChecker.new @old_dir = Dir.pwd Dir.chdir(BASE_ROOT) end def test_check_ar_methods_in_controller make_file("app/controllers", "post_controller.rb", "Post.find(:all)") @checker.check_ar_methods assert @checker.alerts.has_key?("Soon-to-be-deprecated ActiveRecord calls") end def test_check_ar_methods_in_models make_file("app/models", "post.rb", "Post.find(:all)") @checker.check_ar_methods assert @checker.alerts.has_key?("Soon-to-be-deprecated ActiveRecord calls") end def test_named_scope_left_over make_file("app/models", "post.rb", "named_scope :failure") @checker.check_ar_methods assert @checker.alerts.has_key?("named_scope is now just scope") end def test_check_routes make_file("config/", "routes.rb", " map.connect 'fail'") @checker.check_routes assert @checker.alerts.has_key?("Old router API") end def test_check_lack_of_app_dot_rb @checker.check_environment assert @checker.alerts.has_key?("New file needed: config/application.rb") end def test_check_environment_syntax make_file("config/", "environment.rb", "config.frameworks = []") @checker.check_environment assert @checker.alerts.has_key?("Old environment.rb") end def test_check_gems make_file("config/", "environment.rb", "config.gem 'rails'") @checker.check_gems assert @checker.alerts.has_key?("Old gem bundling (config.gems)") end def test_check_mailer_syntax make_file("app/models/", "notifications.rb", "def signup\nrecipients @users\n end") @checker.check_mailers assert @checker.alerts.has_key?("Old ActionMailer class API") end def test_check_mailer_api make_file("app/controllers/", "thing_controller.rb", "def signup\n Notifications.deliver_signup\n end") @checker.check_mailers assert @checker.alerts.has_key?("Deprecated ActionMailer API") end def test_check_generators make_file("vendor/plugins/thing/generators/thing/", "thing_generator.rb", "def manifest\n m.whatever\n end") @checker.check_generators assert @checker.alerts.has_key?("Old Rails generator API") end def test_check_plugins make_file("vendor/plugins/rspec-rails/", "whatever.rb", "def rspec; end") @checker.check_plugins assert @checker.alerts.has_key?("Known broken plugins") end def teardown clear_files Dir.chdir(@old_dir) end def make_file(where, name=nil, contents=nil) FileUtils.mkdir_p "#{BASE_ROOT}/#{where}" File.open("#{BASE_ROOT}/#{where}/#{name}", "w+") do |f| f.write(contents) end if name end def clear_files FileUtils.rm_rf(Dir.glob("#{BASE_ROOT}/*")) end end