Sha256: 8713a8726f225924f6db03b0683a26be46d6215688530753f2a332a7c3a20c92

Contents?: true

Size: 1.79 KB

Versions: 3

Compression:

Stored size: 1.79 KB

Contents

require File.expand_path(File.dirname(__FILE__) + '/spec_helper')

require 'models/user'

describe "Foreign Key definition" do

  let(:fk_definition) { RedhillonrailsCore::ActiveRecord::ConnectionAdapters::ForeignKeyDefinition }

  it "it is dumped to sql with quoted values" do
    definition = fk_definition.new("named_fkey", :posts, :user, :users, :id)
    definition.to_sql.should == foreign_key_sql("named_fkey")
  end

  context "when name isn't given" do

    it "builds name from table and column name" do
      definition = fk_definition.new(nil, :posts, :user, :users, :id)
      definition.to_sql.should == foreign_key_sql("posts_user_fkey")
    end

    it "build name with column joined with underscore for compsite key" do
      definition = fk_definition.new(nil, :orders, [:inquiry_id, :user_id], :inquiries, [:id, :user_id])
      expected_definition = "CONSTRAINT orders_inquiry_id_user_id_fkey FOREIGN KEY \
        (#{quote_column_name("inquiry_id")}, #{quote_column_name("user_id")}) \
        REFERENCES #{quote_table_name("inquiries")} (#{quote_column_name("id")}, #{quote_column_name("user_id")})".squeeze(" ")
      definition.to_sql.should == expected_definition
    end

  end

  it "does not include name if no name or table_name is given" do
    definition = fk_definition.new(nil, nil, :user, :users, :id)
    definition.to_sql.should == foreign_key_sql(nil)
  end

  protected
  def quote_table_name(table)
    ActiveRecord::Base.connection.quote_table_name(table)
  end

  def quote_column_name(column)
    ActiveRecord::Base.connection.quote_column_name(column)
  end

  def foreign_key_sql(fk_name)
    [("CONSTRAINT #{fk_name}" if fk_name), "FOREIGN KEY (#{quote_column_name('user')}) "\
        "REFERENCES #{quote_table_name('users')} (#{quote_column_name('id')})"].compact.join(' ')
  end

end

Version data entries

3 entries across 3 versions & 2 rubygems

Version Path
aspgems-redhillonrails_core-2.0.0.beta4 spec/foreign_key_definition_spec.rb
redhillonrails_core-2.0.0.pre spec/foreign_key_definition_spec.rb
redhillonrails_core-1.2.0 spec/foreign_key_definition_spec.rb