Skip to content

Instantly share code, notes, and snippets.

@maletor

maletor/test.rb Secret

Last active August 29, 2015 14:06
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save maletor/af1aae5086ba10ed7cad to your computer and use it in GitHub Desktop.
Save maletor/af1aae5086ba10ed7cad to your computer and use it in GitHub Desktop.
require 'byebug'
require 'rubygems'
gem 'activerecord', '= 4.1.5'
require 'active_record'
require 'minitest/autorun'
require 'logger'
# Ensure backward compatibility with Minitest 4
Minitest::Test = MiniTest::Unit::TestCase unless defined?(Minitest::Test)
# This connection will do for database-independent bug reports.
ActiveRecord::Base.establish_connection(adapter: 'mysql2', database: 'foo')
# ActiveRecord::Base.establish_connection(adapter: 'sqlite3', database: ':memory:')
ActiveRecord::Base.logger = Logger.new(STDOUT)
# ActiveRecord::Schema.define do
# create_table :address_books
#
# create_table :imported_contacts do |t|
# t.belongs_to :address_book
# t.string :email
# end
#
# create_table :users do |t|
# t.belongs_to :account
# end
#
# create_table :accounts do |t|
# t.string :login
# end
#
# create_table :vendor_email_addresses do |t|
# t.belongs_to :user
# t.string :email
# end
# end
class AddressBook < ActiveRecord::Base
belongs_to :user, inverse_of: :address_books
has_many :imported_contacts, inverse_of: :address_book
has_many :matched_users, through: :imported_contacts, source: :matched_user
has_many :matched_vendor_users, through: :imported_contacts, source: :matched_vendor_user
end
class ImportedContact < ActiveRecord::Base
belongs_to :address_book, inverse_of: :imported_contacts
has_one :user, through: :address_book
has_one :matched_account, class_name: "Account", foreign_key: :login, primary_key: :email
has_one :matched_vendor_email_address, class_name: "VendorEmailAddress", foreign_key: :email, primary_key: :email
has_one :matched_user, class_name: "User", through: :matched_account, source: :user
has_one :matched_vendor_user, class_name: "User", through: :matched_vendor_email_address, source: :user
end
class VendorEmailAddress < ActiveRecord::Base
belongs_to :user
end
class User < ActiveRecord::Base
has_many :address_books
belongs_to :account
has_many :vendor_email_addresses
end
class Account < ActiveRecord::Base
has_one :user
end
class BugTest < Minitest::Test
def test_union
address_book = AddressBook.create!
union = address_book.matched_users.union(address_book.matched_vendor_users)
union.to_sql
end
end
@maletor
Copy link
Author

maletor commented Sep 19, 2014

With sqlite3

Run options: --seed 20853

# Running:

D, [2014-09-19T11:08:59.083614 #71148] DEBUG -- :    (0.0ms)  begin transaction
D, [2014-09-19T11:08:59.091967 #71148] DEBUG -- :   SQL (0.1ms)  INSERT INTO "address_books" DEFAULT VALUES
D, [2014-09-19T11:08:59.092202 #71148] DEBUG -- :    (0.0ms)  commit transaction
.

Finished in 0.030723s, 32.5489 runs/s, 0.0000 assertions/s.

1 runs, 0 assertions, 0 failures, 0 errors, 0 skips

With mysql2

Run options: --seed 53959

# Running:

D, [2014-09-19T11:09:24.508602 #71272] DEBUG -- :    (0.1ms)  BEGIN
D, [2014-09-19T11:09:24.511703 #71272] DEBUG -- :   SQL (0.2ms)  INSERT INTO `address_books` VALUES ()
D, [2014-09-19T11:09:24.512231 #71272] DEBUG -- :    (0.3ms)  COMMIT
E

Finished in 0.049766s, 20.0940 runs/s, 0.0000 assertions/s.

  1) Error:
BugTest#test_union:
NoMethodError: undefined method `reverse' for nil:NilClass
    /Users/maletor/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/activerecord-4.1.5/lib/active_record/connection_adapters/abstract/database_statements.rb:14:in `block in to_sql'
    /Users/maletor/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/arel-5.0.1.20140414130214/lib/arel/visitors/bind_visitor.rb:26:in `call'
    /Users/maletor/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/arel-5.0.1.20140414130214/lib/arel/visitors/bind_visitor.rb:26:in `visit_Arel_Nodes_BindParam'
    /Users/maletor/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/arel-5.0.1.20140414130214/lib/arel/visitors/visitor.rb:22:in `visit'
    /Users/maletor/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/arel-5.0.1.20140414130214/lib/arel/visitors/to_sql.rb:515:in `visit_Arel_Nodes_Equality'
    /Users/maletor/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/arel-5.0.1.20140414130214/lib/arel/visitors/visitor.rb:22:in `visit'
    /Users/maletor/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/arel-5.0.1.20140414130214/lib/arel/visitors/to_sql.rb:496:in `block in visit_Arel_Nodes_And'
    /Users/maletor/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/arel-5.0.1.20140414130214/lib/arel/visitors/to_sql.rb:496:in `map'
    /Users/maletor/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/arel-5.0.1.20140414130214/lib/arel/visitors/to_sql.rb:496:in `visit_Arel_Nodes_And'
    /Users/maletor/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/arel-5.0.1.20140414130214/lib/arel/visitors/visitor.rb:22:in `visit'
    /Users/maletor/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/arel-5.0.1.20140414130214/lib/arel/visitors/to_sql.rb:204:in `block in visit_Arel_Nodes_SelectCore'
    /Users/maletor/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/arel-5.0.1.20140414130214/lib/arel/visitors/to_sql.rb:203:in `each'
    /Users/maletor/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/arel-5.0.1.20140414130214/lib/arel/visitors/to_sql.rb:203:in `each_with_index'
    /Users/maletor/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/arel-5.0.1.20140414130214/lib/arel/visitors/to_sql.rb:203:in `visit_Arel_Nodes_SelectCore'
    /Users/maletor/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/arel-5.0.1.20140414130214/lib/arel/visitors/mysql.rb:41:in `visit_Arel_Nodes_SelectCore'
    /Users/maletor/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/arel-5.0.1.20140414130214/lib/arel/visitors/to_sql.rb:163:in `block in visit_Arel_Nodes_SelectStatement'
    /Users/maletor/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/arel-5.0.1.20140414130214/lib/arel/visitors/to_sql.rb:163:in `each'
    /Users/maletor/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/arel-5.0.1.20140414130214/lib/arel/visitors/to_sql.rb:163:in `visit_Arel_Nodes_SelectStatement'
    /Users/maletor/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/arel-5.0.1.20140414130214/lib/arel/visitors/mysql.rb:36:in `visit_Arel_Nodes_SelectStatement'
    /Users/maletor/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/arel-5.0.1.20140414130214/lib/arel/visitors/visitor.rb:22:in `visit'
    /Users/maletor/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/arel-5.0.1.20140414130214/lib/arel/visitors/mysql.rb:10:in `visit_Arel_Nodes_Union'
    /Users/maletor/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/arel-5.0.1.20140414130214/lib/arel/visitors/visitor.rb:22:in `visit'
    /Users/maletor/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/arel-5.0.1.20140414130214/lib/arel/visitors/visitor.rb:5:in `accept'
    /Users/maletor/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/arel-5.0.1.20140414130214/lib/arel/visitors/bind_visitor.rb:11:in `accept'
    /Users/maletor/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/arel-5.0.1.20140414130214/lib/arel/nodes/node.rb:45:in `to_sql'
    /Users/maletor/Desktop/bug.rb:74:in `test_union'

1 runs, 0 assertions, 0 failures, 1 errors, 0 skips

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment