Chris@0: require File.dirname(__FILE__) + '/../test_helper' Chris@0: Chris@0: class ModelAndLibTest < Test::Unit::TestCase Chris@0: Chris@0: def test_WITH_a_model_defined_only_in_a_plugin_IT_should_load_the_model Chris@0: assert_equal 'AlphaPluginModel (from alpha_plugin)', AlphaPluginModel.report_location Chris@0: end Chris@0: Chris@0: def test_WITH_a_model_defined_only_in_a_plugin_lib_dir_IT_should_load_the_model Chris@0: assert_equal 'AlphaPluginLibModel (from alpha_plugin)', AlphaPluginLibModel.report_location Chris@0: end Chris@0: Chris@0: # app takes precedence over plugins Chris@0: Chris@0: def test_WITH_a_model_defined_in_both_app_and_plugin_IT_should_load_the_one_in_app Chris@0: assert_equal 'AppAndPluginModel (from app)', AppAndPluginModel.report_location Chris@0: assert_raises(NoMethodError) { AppAndPluginLibModel.defined_only_in_alpha_engine_version } Chris@0: end Chris@0: Chris@0: def test_WITH_a_model_defined_in_both_app_and_plugin_lib_dirs_IT_should_load_the_one_in_app Chris@0: assert_equal 'AppAndPluginLibModel (from lib)', AppAndPluginLibModel.report_location Chris@0: assert_raises(NoMethodError) { AppAndPluginLibModel.defined_only_in_alpha_engine_version } Chris@0: end Chris@0: Chris@0: # subsequently loaded plugins take precendence over previously loaded plugins Chris@0: Chris@0: # TODO Chris@0: # Chris@0: # this does work when we rely on $LOAD_PATH while it won't work when we use Chris@0: # Dependency constant autoloading. This somewhat confusing difference has Chris@0: # been there since at least Rails 1.2.x. See http://www.ruby-forum.com/topic/134529 Chris@0: Chris@0: def test_WITH_a_model_defined_in_two_plugins_IT_should_load_the_latter_of_both Chris@0: require 'shared_plugin_model' Chris@0: assert_equal SharedPluginModel.report_location, 'SharedPluginModel (from beta_plugin)' Chris@0: end Chris@0: end