diff --git a/test/boot.rb b/test/boot.rb new file mode 100644 index 0000000..ccc8b61 --- /dev/null +++ b/test/boot.rb @@ -0,0 +1,21 @@ + +require 'activerecord' +require 'active_support' + +plugin_root = File.join(File.dirname(__FILE__), '..') +framework_root = ["#{plugin_root}/rails", "#{plugin_root}/../../rails"].detect { |p| File.directory? p } +rails_version = ENV['RAILS_VERSION'] +rails_version = nil if rails_version && rails_version == '' + +if rails_version.nil? && framework_root + puts "Found framework root: #{framework_root}" + $:.unshift "#{framework_root}/activesupport/lib", "#{framework_root}/activerecord/lib" +else + puts "Using rails#{" #{rails_version}" if rails_version} from gems" + if rails_version + gem 'rails', rails_version + else + gem 'activerecord' + end +end + diff --git a/test/helper.rb b/test/helper.rb index 80d496b..3c1d16d 100644 --- a/test/helper.rb +++ b/test/helper.rb @@ -1,30 +1,64 @@ require 'test/unit' require 'rubygems' -require 'activerecord' -require 'active_support' require 'shoulda' require 'mocha' +require 'test/boot' unless defined?(ActiveRecord) +require 'activerecord' +require 'active_support' require 'grouped_scope' ActiveRecord::Base.logger = Logger.new(File.dirname(__FILE__)+'/debug.log') ActiveRecord::Base.establish_connection :adapter => 'sqlite3', :database => ':memory:' def setup_environment(options={}) - options.reverse_merge! :gc => :group_id + options.reverse_merge! :group_column => :group_id + setup_database(options) + setup_models(options) +end + +def setup_database(options) ActiveRecord::Base.connection.create_table :employees, :force => true do |t| t.column :name, :string t.column :email, :string - t.column options[:gc], :integer + t.column options[:group_column], :integer end ActiveRecord::Base.connection.create_table :reports, :force => true do |t| - t.column :title, :string - t.column :body, :string + t.column :title, :string + t.column :body, :string + t.column :employee_id, :integer + end + ActiveRecord::Base.connection.create_table :legacy_employees, :force => true, :id => false do |t| + t.column :name, :string + t.column :email, :string + t.column options[:group_column], :integer + end + ActiveRecord::Base.connection.create_table :legacy_reports, :force => true do |t| + t.column :title, :string + t.column :body, :string + t.column :email, :string + end +end + +def setup_models(options) + ['Employee','Report','LegacyEmployee','LegacyReport'].each do |klass| + Object.send(:remove_const,klass) rescue nil + Object.const_set klass, Class.new(ActiveRecord::Base) end - Object.send(:remove_const,'Employee') rescue nil - Object.const_set 'Employee', Class.new(ActiveRecord::Base) Employee.class_eval do has_many :reports grouped_scope :reports end + Report.class_eval do + belongs_to :employee + end + LegacyEmployee.class_eval do + set_primary_key :email + has_many :reports, :class_name => 'LegacyReport', :foreign_key => 'email' + grouped_scope :reports + end + LegacyReport.class_eval do + belongs_to :employee, :class_name => 'LegacyEmployee' + end end +