# Some test models
# These will get created and dropped during the active record tests
# Be sure and call setup and teardown
module ActiveRecordFixtures
  extend self
  def setup
    ActiveRecordFixtures::Order.setup
    ActiveRecordFixtures::Shipment.setup
  end
  def teardown
    ActiveRecordFixtures::Shipment.teardown
    ActiveRecordFixtures::Order.teardown
    begin
      super
    rescue => e
    end
  end
  class Order < ActiveRecord::Base
    self.table_name = 'newrelic_test_orders'
    has_and_belongs_to_many :shipments, :class_name => 'ActiveRecordFixtures::Shipment'
    def self.setup
      unless check_for_table
        connection.create_table self.table_name, :force => true do |t|
          t.column :name, :string
        end
      else
        connection.execute("delete from #{self.table_name}")
      end
    end

    def self.check_for_table
      connection.table_exists?(self.table_name)
    rescue => e
      false
    end
    
    def self.add_delay
      # Introduce a 5 ms delay into db operations on Orders
      def connection.log_info *args
        sleep 0.005
        super *args
      end
    end
    def self.teardown
      def connection.log_info *args
        super *args
      end
    end
  end

  class Shipment < ActiveRecord::Base
    self.table_name = 'newrelic_test_shipment'
    has_and_belongs_to_many :orders, :class_name => 'ActiveRecordFixtures::Order'
    def self.setup
      unless check_for_table
        connection.create_table self.table_name, :force => true do |t|
          # no other columns
        end
        connection.create_table 'orders_shipments', :force => true, :id => false do |t|
          t.column :order_id, :integer
          t.column :shipment_id, :integer
        end
      else
        connection.execute("delete from #{self.table_name}")
      end
    end
    def self.check_for_table
      connection.table_exists?(self.table_name) && connection.table_exists?('orders_shipments')
    rescue => e
      false
    end

    
    def self.teardown
    end
  end
end
